Я настроил виртуальную машину Linux, используя virsh/libvirt/kvm, и у меня возникла проблема с мостовой сетью.
Сеть NAT по умолчанию от libvirt работала нормально, но мне нужен мост к общедоступному интерфейсу.
Я удалил сеть по умолчанию с помощью virsh и изменил настройки сети VM в virsh на:
<interface type='bridge'>
<mac address='02:00:00:c1:8f:95'/>
<source bridge='br0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>
в хост-системе я настроил мост:
# brctl показать br0
имя моста идентификатор моста интерфейсы с поддержкой STP
br0 8000.a0423f494574 да enp97s0f0
vnet0
# brctl showstp br0
бр0
идентификатор моста 8000.a0423f494574
назначенный корень 8000.a0423f494574
корневой порт 0 стоимость пути 0
максимальный возраст 20.00 бридж максимальный возраст 20.00
привет время 2.00 мост привет время 2.00
задержка пересылки 15.00 задержка пересылки моста 15.00
время старения 300.00
привет таймер 0.86 tcn таймер 0.00
таймер изменения топологии 0.00 gc timer 240.41
флаги
enp97s0f0 (1)
идентификатор порта 8001 состояние переадресации
назначенный корень 8000.a0423f494574 стоимость пути 100
назначенный мост 8000.a0423f494574 таймер возраста сообщения 0,00
назначенный порт 8001 таймер задержки пересылки 0,00
назначенная стоимость 0 таймер удержания 0.00
флаги
vnet0 (2)
идентификатор порта 8002 состояние переадресации
назначенный корень 8000.a0423f494574 стоимость пути 100
назначенный мост 8000.a0423f494574 таймер возраста сообщения 0,00
назначенный порт 8002 таймер задержки пересылки 0.00
назначенная стоимость 0 таймер удержания 0.00
где enp97s0f0 — общедоступная сетевая карта, а vnet0 — виртуальная сетевая карта, используемая libvirt.
Я настроил IP-адреса и шлюзы на виртуальной машине, но не получил ответа на пинги.
Я выполнил tcpdump на хост-компьютере во время проверки связи с виртуальной машины на 1.1.1.1 cloudflare dns, как на vnet0, так и на br0. Вот результаты:
# tcpdump -i vnet0 -n хост VM.VM.VM.VM
сбросил привилегии в tcpdump
tcpdump: подробный вывод подавлен, используйте -v или -vv для полного декодирования протокола
прослушивание на vnet0, тип канала EN10MB (Ethernet), размер захвата 262144 байт
15:13:50.863273 IP VM.VM.VM.VM > 1.1.1.1: эхо-запрос ICMP, идентификатор 2016, последовательность 80, длина 64
15:13:51.887267 IP VM.VM.VM.VM > 1.1.1.1: эхо-запрос ICMP, идентификатор 2016, последовательность 81, длина 64
15:13:52.911271 IP VM.VM.VM.VM > 1.1.1.1: эхо-запрос ICMP, идентификатор 2016, последовательность 82, длина 64
15:13:53.935270 IP VM.VM.VM.VM > 1.1.1.1: эхо-запрос ICMP, идентификатор 2016, последовательность 83, длина 64
# tcpdump -i br0 -n хост VM.VM.VM.VM
сбросил привилегии в tcpdump
tcpdump: подробный вывод подавлен, используйте -v или -vv для полного декодирования протокола
прослушивание на br0, тип канала EN10MB (Ethernet), размер захвата 262144 байт
15:12:33.039228 IP VM.VM.VM.VM > 1.1.1.1: эхо-запрос ICMP, идентификатор 2016, последовательность 4, длина 64
15:12:33.045522 IP 1.1.1.1 > VM.VM.VM.VM: эхо-ответ ICMP, идентификатор 2016, последовательность 4, длина 64
15:12:33.045532 IP 1.1.1.1 > VM.VM.VM.VM: эхо-ответ ICMP, идентификатор 2016, последовательность 4, длина 64
15:12:34.063111 IP VM.VM.VM.VM > 1.1.1.1: эхо-запрос ICMP, идентификатор 2016, последовательность 5, длина 64
15:12:34.069501 IP 1.1.1.1 > VM.VM.VM.VM: эхо-ответ ICMP, идентификатор 2016, последовательность 5, длина 64
15:12:34.069510 IP 1.1.1.1 > VM.VM.VM.VM: эхо-ответ ICMP, идентификатор 2016, последовательность 5, длина 64
15:12:35.087281 IP VM.VM.VM.VM > 1.1.1.1: эхо-запрос ICMP, идентификатор 2016, последовательность 6, длина 64
15:12:35.093640 IP 1.1.1.1 > VM.VM.VM.VM: эхо-ответ ICMP, идентификатор 2016, последовательность 6, длина 64
15:12:35.093649 IP 1.1.1.1 > VM.VM.VM.VM: эхо-ответ ICMP, идентификатор 2016, последовательность 6, длина 64
Итак, я вижу, что виртуальная машина отправляет запрос ping через vnet0, мост br0 перенаправляет этот запрос на 1.1.1.1, а 1.1.1.1 отправляет ответ обратно на мост. Затем пакет исчезает и никогда не достигает интерфейса виртуальной машины.
Вот почему я думаю, что эта проблема, вероятно, связана с какой-то фильтрацией пакетов на хосте, но я проверил кучу переменных, и все выглядит нормально:
/proc/sys/net/ipv4/ip_forward: 1
/proc/sys/net/ipv4/conf/br0/пересылка: 1
/proc/sys/net/ipv4/conf/vnet0/пересылка: 1
/proc/sys/net/ipv4/conf/enp97s0f0/пересылка: 1
/proc/sys/net/bridge/bridge-nf-call-iptables: нет такого файла или каталога
# iptables -L
Сеть INPUT (политика ACCEPT)
целевая защита выбор источника назначения
Сеть FORWARD (политика ACCEPT)
целевая защита выбор источника назначения
Цепочка OUTPUT (политика ACCEPT)
целевая защита выбор источника назначения
# ebtables -L
Бридж-таблица: фильтр
Мостовая цепочка: INPUT, записей: 0, политика: ACCEPT
Мостовая цепочка: FORWARD, записей: 0, политика: ACCEPT
Мостовая цепочка: ВЫХОД, записи: 0, политика: ПРИНЯТЬ
# список правил nft
фильтр моста таблицы {
цепочка ВХОД {
тип фильтра хука входного приоритета фильтр; политика принять;
}
цепочка ВПЕРЕД {
тип фильтра перехвата приоритета фильтра; политика принять;
}
цепочка ВЫХОД {
фильтр приоритета вывода обработчика типа фильтра; политика принять;
}
}
IP-фильтр таблицы {
цепочка ВХОД {
тип фильтра хука входного приоритета фильтр; политика принять;
}
цепочка ВПЕРЕД {
тип фильтра перехвата приоритета фильтра; политика принять;
}
цепочка ВЫХОД {
фильтр приоритета вывода обработчика типа фильтра; политика принять;
}
}
[root@HOST ~] # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
ссылка/петля 00:00:00:00:00:00 брд 00:00:00:00:00:00
инет 127.0.0.1/8 область хоста lo
valid_lft навсегда
inet6 :: 1/128 узел области видимости
valid_lft навсегда
2: enp97s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 состояние UP группа по умолчанию qlen 1000
ссылка/эфир a0:42:3f:49:45:74 brd ff:ff:ff:ff:ff:ff
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
ссылка/эфир a0:42:3f:49:45:74 brd ff:ff:ff:ff:ff:ff
inet xxx.xxx.xxx.xxx/24 область глобальная динамическая noprefixroute br0
valid_lft 71705 сек. selected_lft 71 705 сек.
inet6 fe80::6559:22b2:dccd:3b24/64 ссылка на область видимости noprefixroute
valid_lft навсегда
4: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 состояние НЕИЗВЕСТНО группа по умолчанию qlen 1000
ссылка/эфир fe:00:00:c1:8f:95 brd ff:ff:ff:ff:ff:ff
ссылка на область inet6 fe80::fc00:ff:fec1:8f95/64
valid_lft навсегда
[root@VM ~]# IP-адрес показать
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
ссылка/петля 00:00:00:00:00:00 брд 00:00:00:00:00:00
инет 127.0.0.1/8 область хоста lo
valid_lft навсегда
inet6 :: 1/128 узел области видимости
valid_lft навсегда
2: enp1s0: mtu 1500 qdisc fq_codel состояние UP группа по умолчанию qlen 1000
ссылка/эфир 02:00:00:c1:8f:95 brd ff:ff:ff:ff:ff:ff
глобальная область видимости inet VM.VM.VM.VM/24 enp1s0
valid_lft навсегда
[root@HOST ~]# мостовая ссылка
2: enp97s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master br0 state приоритет пересылки 32 стоимость 100
8: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master br0 state приоритет пересылки 32 стоимость 100
[root@HOST ~]# показать fdb моста
fc:bd:67:ff:ec:6a dev enp97s0f0 master br0
fc:bd:67:ff:ec:31 dev enp97s0f0 master br0
2c:dd:e9:0d:9d:31 dev enp97s0f0 master br0
fe:ed:de:ad:be:ef dev enp97s0f0 master br0
a0:42:3f:49:45:74 dev enp97s0f0 vlan 1 master br0 постоянный
a0:42:3f:49:45:74 dev enp97s0f0 мастер br0 постоянный
01:00:5e:00:00:01 dev enp97s0f0 сам постоянный
33:33:00:00:00:01 dev enp97s0f0 сам постоянный
01:00:5e:00:00:01 dev br0 сам постоянный
33:33:00:00:00:01 dev br0 сам постоянный
33:33:ff:cd:3b:24 dev br0 сам постоянный
01:00:5e:00:00:6a dev br0 сам постоянный
33:33:00:00:00:6a dev br0 сам постоянный
02:00:00:c1:8f:95 dev vnet0 мастер br0
fe:00:00:c1:8f:95 dev vnet0 vlan 1 master br0 постоянный
fe:00:00:c1:8f:95 dev vnet0 master br0 постоянный
33:33:00:00:00:01 dev vnet0 сам постоянный
01:00:5e:00:00:01 dev vnet0 сам постоянный
33:33:ff:c1:8f:95 dev vnet0 сам постоянный
[root@HOST ~]# bridge vlan show
порт vlan-id
enp97s0f0 1 Выход PVID без тегов
vnet0 1 Выход PVID без тегов
Хост-система — Centos8 с ядром 5.13.12-1.el8.elrepo.x86_64.
Система VM устанавливается по умолчанию в Centos8.
РЕДАКТИРОВАТЬ:
Если я настрою IP-адреса частной сети на хосте br0 и на интерфейсе виртуальной машины enp1s0, тогда виртуальная машина сможет пропинговать хост, а хост сможет пропинговать виртуальную машину. Но по-прежнему не удается пропинговать что-либо за пределами локальной сети.