Тема: Как подать в KVM сеть со всеми VLAN'ами
Есть задача, внутри KVM виртуалки работать с vlan'ами. Оказывается linux-bridge успешно режет все теги. Было решено воспользоваться openvswitch'ом.
openvswitch взят из openstack-kilo
libvirt взят из ovirt
На физическом сервере настраиваем bonding и на прямую от него сеть обслуживание. Как бы не говорили документации что очень правильно это делать через openvswitch - врут. Он иногда дохнет, и тогда уже не подсоединится к серверу.
# cat /etc/sysconfig/network-scripts/ifcfg-eno49
DEVICE="eno49"
ONBOOT=yes
NETBOOT=yes
UUID="bf732870-bc03-4a62-a1e5-686fd958928d"
IPV6INIT=yes
BOOTPROTO=none
HWADDR="8c:dc:d4:ac:dd:cc"
TYPE=Ethernet
NAME="eno49"
MASTER=bond0
SLAVE=yes
# cat /etc/sysconfig/network-scripts/ifcfg-eno50
DEVICE="eno50"
ONBOOT=yes
NETBOOT=yes
UUID="8bd8d8fb-9392-4028-a8be-b7b808fe6cdd"
IPV6INIT=yes
BOOTPROTO=none
HWADDR="8c:dc:d4:ac:dd:cd"
TYPE=Ethernet
NAME="eno50"
MASTER=bond0
SLAVE=yes
# cat /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
BONDING_OPTS="miimon=100 updelay=0 downdelay=0 mode=802.3ad"
TYPE=Bond
BONDING_MASTER=yes
ONBOOT=yes
# cat /etc/sysconfig/network-scripts/ifcfg-bond0.222
DEVICE=bond0.222
ONBOOT=yes
BOOTPROTO=none
VLAN=yes
NM_CONTROLLED=no
IPADDR=111.111.111.2
PREFIX=24
GATEWAY=111.111.111.1
DNS1=1.1.1.1
DNS2=1.1.2.2
Выключаем NetworkManager и Firewalld
systemctl stop NetworkManager
systemctl disable NetworkManager
systemctl stop firewalld
systemctl disable firewalld
Теперь инсталлируем openvswitch и запускаем его. Она сам возьмет всю конфигурацию.
systemctl enable openvswitch.service
systemctl start openvswitch.service
Добавляем bridge и указываем через какой порт получаем сеть.
ovs-vsctl add-br br0
ovs-vsctl add-port br0 bond0
# ovs-vsctl show
7a0c9d14-3166-4173-8813-bb43a01e39f0
Bridge "br0"
Port "br0"
Interface "br0"
type: internal
Port "bond0"
Interface "bond0"
ovs_version: "2.3.1"
К сожалению это не все, нельзя использовать br0, так как он DOWN
9: br0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN
link/ether 8c:dc:d4:ac:dd:cc brd ff:ff:ff:ff:ff:ff
Значит надо обучить работать libvirt напрямую с ним. Создаем файоик (это разавая конфигурация, нужна только при установке)
# cat /etc/libvirt/my-ovsnet.xml
<network>
<name>ovs-br0</name>
<forward mode='bridge'/>
<bridge name='br0'/>
<virtualport type='openvswitch'/>
</network>
Показываем где файл
virsh net-define /etc/libvirt/my-ovsnet.xml
virsh net-list
virsh net-start ovs-br0
virsh net-autostart ovs-br0
Проверяем
# virsh net-list --all
Name State Autostart Persistent
----------------------------------------------------------
ovs-br0 active yes yes
Все. Можно инсталлировать. Так подается сеть через virsh-install
--network network=ovs-br0
А так в конфиге
<interface type='network'>
<mac address='52:54:00:b7:ae:99'/>
<source network='ovs-br0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>