Тема: Как подать в 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>

Продолжение: http://unix-forum.ru/topic1843.html

2 (24-08-2016 02:13:47 отредактировано ankos)

Re: Как подать в KVM сеть со всеми VLAN'ами

На хостовую машину с двумя сетевыми адаптерами (p2p1 и p4p1) приходят сети.
На p2p1 - медеджмент сеть 172.16.34.0/24, и VLAN с тегом 11 и подсетью 10.0.1.0/26
на p4p1 - ещё 4 VLAN'а с какими то тегами.

Стоит задача завернуть оба адаптера в kvm машину.
Если с бриджеванием первого адаптера (и virtio) и использование скажем vconf add в виртуальном окружении для первого же адаптера все вопросы решаются, то вот с ситуацией на p4p1 не понятно. Как завернуть VLANы на адаптире p4p1 в виртуальную машину при этом на дополнительный сетевой адаптер в виртуальной среде?

Thumbs up Thumbs down

3

Re: Как подать в KVM сеть со всеми VLAN'ами

А чем не устраивает то что описано вверху? Создавайте нужные интерфейсы, заворачивайте на ovs, а там можно как выделить отдельный vlan так и объединить... Полноценный софтварный свитч.

Продолжение тут http://unix-forum.ru/topic1843.html