Рейтинг:1

Как настроить гипервизор так, чтобы виртуальная машина KVM/QEMU могла подключаться к хостам, подключенным к одному и тому же транковому мосту?

флаг au

1 проблема

Моя цель состоит в том, чтобы весь трафик локальной сети направлялся через виртуальную машину (ВМ), действующую как маршрутизатор и брандмауэр. Другие виртуальные машины на том же гипервизоре также должны проходить через виртуальную машину брандмауэра. См. следующее эскиз сети. Физические хосты, подключенные к транковому мосту, могут успешно пинговать друг друга, но виртуальные машины пока недоступны.

2 Детали

Конфигурация сети на гипервизоре:

# =======
# Мосты
# =======
# ---------------------
# Мост VLAN br-vlan-3
# ---------------------
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 вверх


# ----------------------
# рабочий стол.3 br-vlan-3
# ----------------------
ip ссылка добавить ссылку enp9s0f1 имя enp9s0f1.3 тип vlan id 3
ip link set dev enp9s0f1.3 master br-vlan-3
ip link set enp9s0f1.3 up

# -----------------------------------------
# рабочий стол.100 br-trunk-vm
# -----------------------------------------
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
    
локальный хост:~ # cat /proc/net/vlan/enp.100 
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]# ip a  
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]# brctl show dev br-trunk-vm
имя моста идентификатор моста интерфейсы с поддержкой STP
бр-транк-вм 8000.567e226a232d нет enp9s0f1.100
                                                        фв.100
                                                        фв.103
                                                        fw.3


===============
ВИРТУАЛЬНАЯ МАШИНА 
===============                                                                    
[root@fedora system]# bridge vlan show
порт 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: [email protected]. Затем я установил магистральный порт [email protected] освоить: мост vlan добавить видео 100 dev [email protected] 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, но лучше использовать мост для каждой виртуальной машины и физического хоста. Затем гипервизор позволяет перенаправить мосты виртуальных машин и хостов на мост виртуальной машины брандмауэра, а оставшаяся маршрутизация затем выполняется внутри виртуальной машины брандмауэра.

Nikita Kipriyanov avatar
флаг za
Да, libvirt не поддерживает настройку vlan для виртуальных машин с мостом Linux, поддерживающим vlan. Позор им. Лучшее, что вы можете сделать, это настроить VLAN на портах виртуального моста, принадлежащих виртуальным машинам, вручную с помощью утилиты «bridge» после запуска виртуальной машины.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.