14.3.17

Установка и настройка OpenVSwich



Бывает необходимо, что бы виртуальная машина KVM присутствовала в нескольких подсетях с разными VLAN. Что бы автоматизировать данный процесс я использую openvswich, в котором создаю необходимые мне vlan подсети. Давайте создадим такую конфигурацию:

Есть две подсети одна имеет VLAN100 другая VLAN101  данные сети доступны с хостовой машины по кабелю, который воткнут в транковый порт свича, протегированный в соответствующих вланах. В Fedora в стандартных репозиториях есть пакет openvswitch. Установим его командой:

$ sudo dnf install openvswitch -y

После установки следует запустить сервиc openvswitch
$ sudo systemctl enable  openvswitch.service
$ sudo systemctl  start openvswitch.service
При запуске сервис создает базу в файле /etc/openvswitch/conf.db в котором и будет содержать все свои настройки. Для управления конфигурациями служит утилита ovs-vsctl. Структура будущей сети такова



Такая структура необходима из-за некоторых особенностей работы libvirt, например невозможно указать какой конкретно интерфейс и в каком vlan следует создать для определенной машины. Проще всего заранее сделать несколько свичей протегированных в различных vlan,  средствами libvirt добавлять туда интерфейс не задумываясь об их тегах. Свич root-sw это наш корневой свич в который мы подключаем все остальные свичи. Итак создаем root-sw
$ sudo ovs-vsctl add-br root-sw
В данный свич нужно добавить  реальный интерфейс хостовой машины, смотрящий в реальный свич. Осторожно, сетка в этот момент пропадет. О том как сделать хостовую машину доступной из вне ниже. Добавим наш интерфейс
$ sudo ovs-vsctl add-port root-sw eth0
Теперь нужно создать свичи sw-vlan100 и sw-vlan101 укажем что они протегированны во vlan 100 и 101
$ sudo ovs-vsctl add-br sw-vlan100 100
$ sudo ovs-vscrl add-br sw-vlan101 101
Что бы наши машинки сами подцепляли нужные порты в свичах настроим виртуальные сети libvirt. Используем для этого утилиту virsh, входящую в состав пакета libvirt-client.
$ sudo virsh
 Дальнейшие команды выполняем в ней:
virsh # net-list
Name                 State      Autostart     Persistent
--------------------------------------------------
default              active     yes           yes
 Как видно у нас есть только одна дефолтная сеть default используем ее как шаблон.
virsh # net-edit default
В результате выполнения команды видим xml конфиг default сети, приведем ее к виду
<network>
  <name>sw-vlan100</name>
  <forward mode='bridge'/>
  <bridge name='sw-vlan100' />
  <virtualport type='openvswitch'/>
</network>
После чего выходим из редактора соответствующей командой с сохранением файла. Кстати установить редактор по умолчанию поможет системная переменная
$ export EDITOR="/usr/bin/vim"
так же создаем конфиг второй сети, еще раз запускаем редактирование default сети
virsh # net-edit default
Приводим к виду
<network>
  <name>sw-vlan101</name>
  <forward mode='bridge'/>
  <bridge name='sw-vlan101' />
  <virtualport type='openvswitch'/>
</network>
Делаем службы сетей активными и включаем автостарт
virsh # net-autostart sw-vlan100

virsh # net-start sw-vlan100

virsh # net-autostart sw-vlan101

virsh # net-start sw-vlan101
  Теперь при создании виртуальной машины следует выбрать нужную сеть в virt-manager и порт автоматически будет создаваться в свиче тегированном в нужном vlan.
  Теперь если у вас есть необходимость управлять хостовой машиной по ssh, то создайте интерфейс в нужном vlan и назначьте на него IP адрес
$ sudo ovs-vsctl add-port man0 sw-vlan100
Делаем интерфейс внутренним
$ sudo ovs-vsctl set interface man0 type=internal
 Видим интерфейс в системе
$ ip link show  man0
Тепрь можете назначит ему интерфейс вручную:
$ sudo ip addr add 192.168.1.1/24  dev man0
 Или установить его по DHCP
$ sudo dhclient man0 -pf /run/dhclient.pid
 Спасибо за внимание.

Популярные сообщения