Назад | Перейти на главную страницу

Как настроить VLAN вместе с Libvirt / KVM / QEMU и OVS?

Я использую машину Debian 9 в качестве маршрутизатора с двумя интерфейсами:

eth0 for WAN
eth1 for LAN

У eth1 есть подинтерфейсы для нескольких VLAN (eth1.10; eth1.20; eth1.30) и есть магистральное соединение с управляемым коммутатором. К портам доступа коммутатора подключены различные устройства, имеющие доступ в Интернет. Довольно стандартная настройка, все работает как положено.

Теперь я пытаюсь создать несколько виртуальных машин прямо внутри маршрутизатора Debian с помощью libvirt / KVM / Qemu и подключить их с помощью моста OVS к существующим VLAN. Что-то вроде воссоздания той же физической конфигурации, что я описал выше, но виртуализированной.

Я попытался создать ovsbr0, добавить порт eth1 для моста, а затем добавить помеченные порты для определенных VLAN, к которым я хотел, чтобы виртуальные машины подключались следующим образом:

# ovs-vsctl add-br ovsbr0
# ovs-vsctl add-port ovsbr0 eth1
# ovs-vsctl add-port ovsbr0 vnet1 tag=10
# ovs-vsctl add-port ovsbr0 vnet2 tag=20
# ovs-vsctl add-port ovsbr0 vnet3 tag=30

Когда я запускаю настоящие виртуальные машины, мост выглядит так:

# ovs-vsctl show
   Bridge ovsbr0
       Port ovsbr0
           Interface ovsbr0
               type: internal
       Port "eth1"
           Interface "eth1"
       Port "vnet1"
           tag: 10
           Interface "vnet1"
       Port "vnet2"
           tag: 20
           Interface "vnet2"
       Port "vnet3"
           tag: 30
           Interface "vnet3"

К моему удивлению, интерфейсы vnet виртуальных машин не имеют связи. Из tcpdump на eth1 я вижу, что кадры ARP от виртуальных машин правильно помечены и достигают интерфейса eth1, но по какой-то причине не пересылаются на подинтерфейсы. Я никогда раньше не использовал OVS, поэтому я явно упускаю что-то важное, но не могу понять, что это такое.

Может ли кто-нибудь указать мне правильное направление?

Мост OVS будет перенаправлять трафик только на порты, которые являются частью реально настроенного моста. Хотя eth1 правильно добавлен к мосту в качестве магистральных интерфейсов, подынтерфейсы (eth1.10; eht1.20; eth1.30) не являются частью моста и никогда не увидят трафик. Решение простое - просто добавьте упомянутые субинтерфейсы VLAN в мост.