1 проблема
Моя цель состоит в том, чтобы весь трафик локальной сети направлялся через виртуальную машину (ВМ), действующую как маршрутизатор и брандмауэр. Другие виртуальные машины на том же гипервизоре также должны проходить через виртуальную машину брандмауэра. См. следующее эскиз сети. Физические хосты, подключенные к транковому мосту, могут успешно пинговать друг друга, но виртуальные машины пока недоступны.
2 Детали
Конфигурация сети на гипервизоре:
ip link add name br-vlan-3 type bridge
IP-адрес добавить 10.66.3.11/24 dev br-vlan-3
ip link set dev br-vlan-3 up
ip link add name br-trunk-up type bridge vlan_filtering 1 vlan_default_pvid 0
ip link set br-trunk-up up
ip link add name br-trunk-vm type bridge vlan_filtering 1 vlan_default_pvid 0
ip link set br-trunk-vm up
ip link set enp5s0 up
ip link set enp9s0f0 up
ip link set enp9s0f1 up
ip link set enp9s0f2 вверх
ip link set enp9s0f3 вверх
ip ссылка добавить ссылку enp9s0f1 имя enp9s0f1.3 тип vlan id 3
ip link set dev enp9s0f1.3 master br-vlan-3
ip link set enp9s0f1.3 up
ip ссылка добавить ссылку имя enp9s0f1 enp9s0f1.100 тип идентификатор vlan 100
набор IP-ссылок enp9s0f1.100 master br-trunk-vm
ip link set enp9s0f1.100 up
мост vlan добавить мастер vid 100 dev enp9s0f1.100
мост vlan добавить видео 100 dev br-trunk-vm self
мост vlan добавить vid 100 dev fw.100 pvid 100
Карта сети
=======
РАБОЧИЙ СТОЛ
=======
локальный хост: пользователь ~ $ ip a
2: enp34s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast состояние UP группа по умолчанию qlen 1000
ссылка/эфир 00:d8:61:c4:b1:af brd ff:ff:ff:ff:ff:ff
4: br-vlan-100: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
ссылка/эфир 1a:b1:36:43:f0:e4 brd ff:ff:ff:ff:ff:ff
инет 10.66.100.44/24 глобальный охват br-vlan-100
valid_lft навсегда
7: enp.100@enp34s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-vlan-100 состояние UP группа по умолчанию qlen 1000
ссылка/эфир 00:d8:61:c4:b1:af brd ff:ff:ff:ff:ff:ff
локальный хост:~
enp.100 VID: 100 REORDER_HDR: 1 dev->priv_flags: 1221
всего полученных кадров 0
Всего байтов получено 0
Широковещательный/многоадресный Rcvd 0
всего передано кадров 287
всего передано байтов 53964
Устройство: enp34s0
Сопоставления приоритетов ВХОДА: 0:0 1:0 2:0 3:0 4:0 5:0 6:0 7:0
Сопоставления приоритетов EGRESS:
==========
ГИПЕРВИЗОР
==========
имя моста идентификатор моста интерфейсы с поддержкой STP
br-vlan-100 8000.1ab13643f0e4 нет enp.100
[root@fedora system]
4: enp9s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
ссылка/эфир a0:36:9f:5d:09:19 brd ff:ff:ff:ff:ff:ff
13: br-trunk-vm: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
ссылка/эфир 56:7e:22:6a:23:2d brd ff:ff:ff:ff:ff:ff
16: enp9s0f1.100@enp9s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-trunk-vm state UP group default qlen 1000
ссылка/эфир a0:36:9f:5d:09:19 brd ff:ff:ff:ff:ff:ff
21: fw.100: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-trunk-vm состояние НЕИЗВЕСТНО группа по умолчанию qlen 1000
ссылка/эфир fe:54:00:3e:97:72 brd ff:ff:ff:ff:ff:ff
[root@fedora system]
имя моста идентификатор моста интерфейсы с поддержкой STP
бр-транк-вм 8000.567e226a232d нет enp9s0f1.100
фв.100
фв.103
fw.3
===============
ВИРТУАЛЬНАЯ МАШИНА
===============
[root@fedora system]
порт vlan-id
бр-ствол-вм 100
enp9s0f1.100 100
virbr0 1 Выход PVID без тегов
fw.100 100 Выход PVID без тегов
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel состояние UP группа по умолчанию qlen 1000
ссылка/эфир 52:54:00:3e:97:72 брд ff:ff:ff:ff:ff:ff
инет 10.66.100.10/24 глобальная область охвата enp1s0
valid_lft навсегда
Сетевая конфигурация Libvirt XML виртуальной машины брандмауэра:
<interface type='bridge'>
<mac address='52:54:00:3e:97:72'/>
<source bridge='br-trunk-vm'/>
<target dev='fw.100'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>
3 попытки
Я попытался настроить как тегированный, так и нетегированный сетевой адаптер на виртуальной машине брандмауэра. Для помеченной сетевой карты я создал мост VLAN на виртуальной машине брандмауэра и создал виртуальное устройство отвода из виртуального отвода. фв.100
с VLAN 100: vlan100@fw.100
. Затем я установил магистральный порт vlan100@fw.100
освоить: мост vlan добавить видео 100 dev vlan100@fw.100 master
. Для подхода с нетегированным сетевым адаптером я не настроил VLAN на виртуальной машине брандмауэра и установил для ее магистрального порта значение PVID 100 без тегов. bridge vlan add vid 100 dev fw.100 pvid 100 без тегов
. В обоих случаях мне не удалось пропинговать хост рабочего стола и виртуальную машину брандмауэра.
Эта проблема возникает только с виртуальной машиной libvirt KVM/QEMU. Два физических хоста с тегами VLAN, подключенные к магистральному мосту гипервизора в качестве главного, могут пинговать друг друга.
4 Обновление
Похоже, что libvirt не поддерживает мосты Linux с VLAN. Согласно следующей статье VLAN виртуальных машин перестает работать, если на гипервизоре есть второе виртуальное устройство с той же VLAN: https://alesnosek.com/blog/2015/09/07/bridging-vlan-trunk-to-the-guest/
В качестве альтернативы можно использовать openvswitch, но лучше использовать мост для каждой виртуальной машины и физического хоста. Затем гипервизор позволяет перенаправить мосты виртуальных машин и хостов на мост виртуальной машины брандмауэра, а оставшаяся маршрутизация затем выполняется внутри виртуальной машины брандмауэра.