Open vSwitch. Изолируем трафик виртуального сервера используя VLANы.

Open vSwitch. Изолируем трафик виртуального сервера используя VLANы.

Roman Bogachev VMware Specialist | Drone Pilot | Traveler

Организация виртуальной сети (VLAN) на программном коммутаторе Open vSwitch

VLAN - это функция в роутерах и коммутаторах, позволяющая на одном физическом сетевом интерфейсе создать несколько виртуальных локальных сетей.

В документации Open vSwitch предложен самый простой способ добавления существующего порта во VLAN, для этого присваиваем для порта тег (tag) с номером нужного нам VLAN.

1
ovs-vsctl set port <porn_name> tag=2010

И все бы хорошо, но у этого способа есть несколько минусов.
Во-первых, после выключения виртуального сервера, порт и соответствующие ему настройки автоматически удаляются. Во-вторых, определить соотношение порта к виртуальному серверу, при большом их количестве, становится проблемой. В-третьих, даже если мы создадим для каждого виртуального сервера статический порт и присвоим нужные теги, способа подключить виртуальный сервер к существующему порту при использовании KVM и lib­virt, нет.

Включим в нужный VLAN не отдельный порт, а весь коммутатор. Наш главный, родительский (ovs-br0) мы не изменяем, а создаем необходимо количество других в нужных нам VLAN-ах и подключаем их к главному, как порты.

1
2
# ovs-vsctl add-br <новый_дочерний_мост> <родительский_мост> <VLAN ID>
# ovs-vsctl add-br ovs-vlan2010 ovs-br0 2010

Данная команда создает виртуальный коммутатор ovs-vlan2010, подключает к основному, как порт и помещает его в VLAN с номером 2010.

Команда ovs-vsctl show дополнительно будет показывать теги каждого порта, определяя тем самым его принадлежность к VLAN.

Посмотреть в каком VLAN-е находится конкретный коммутатор:

1
# ovs-vsctl br-to-vlan <имя_коммутатора>

Посмотреть имя родительского коммутатора:

1
# ovs-vsctl br-to-parent <имя_коммутатора>

Подключаем новую суть через libvirtd

Создаем xml-файл с конфигурацией новой сети ovs-network.xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<network>
<name>ovs-network</name>
<forward mode='bridge'/>
<bridge name='ovs-br0'/>
<virtualport type='openvswitch'/>
<portgroup name='94' default='yes'>
</portgroup>
<portgroup name='Vlan2010'>
<vlan>
<tag id='2010'/>
</vlan>
</portgroup>
<portgroup name='Vlan2018'>
<vlan>
<tag id='2018'/>
</vlan>
</portgroup>
<portgroup name='vlan-all'>
<vlan trunk='yes'>
<tag id='2010'/>
<tag id='2018'/>
</vlan>
</portgroup>
</network>

Создаем сеть.

1
virsh net-define ovs-network.xml

Добавляем в автозапуск.

1
virsh net-autostart ovs-network

Запускаем сеть.

1
virsh net-start ovs-network

Для того, чтобы перевести тот или иной виртуальный сервер в нужный нам VLAN, добавляем например portgroup='Vlan2010' в XML:

1
2
3
4
5
6
<interface type='network'>
<mac address='52:54:00:27:0d:45'/>
<source network='ovs-network' portgroup='Vlan2010'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>