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

Не удается получить ответ ARP на устройстве Macvtap

У меня есть физический сервер в Hetzner с двумя назначенными общедоступными IP-адресами в разные / 27 диапазонов. Один предназначен для самого сервера, а другой - для одной виртуальной машины внутри него. Хост работает под управлением CentOS 8 и libvirt.

Я создал виртуальную машину с интерфейсом macvtap, привязанным к моему физическому адаптеру, и изменил конфигурацию гостевой сети, чтобы использовать второй общедоступный IP-адрес. В результате мой гость никогда не может подключиться к внешнему миру.

Что я заметил с tcpdump, так это то, что, хотя гостевые запросы ARP достигают шлюза, ответ гостю не доставляется.

На физическом интерфейсе я вижу это:

[root@server ~]# tcpdump -i enp8s0 arp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp8s0, link-type EN10MB (Ethernet), capture size 262144 bytes
14:03:48.207364 ARP, Request who-has static.88-198-19-129.clients.your-server.de tell static.88.198.19.139.clients.your-server.de, length 28
14:03:48.207868 ARP, Reply static.88-198-19-129.clients.your-server.de is-at 4c:16:fc:c8:e1:24 (oui Unknown), length 46
14:03:49.301192 ARP, Request who-has static.88-198-19-129.clients.your-server.de tell static.88.198.19.139.clients.your-server.de, length 28
14:03:49.301689 ARP, Reply static.88-198-19-129.clients.your-server.de is-at 4c:16:fc:c8:e1:24 (oui Unknown), length 46

Но в интерфейсе macvtap я вижу следующее:

[root@server ~]# tcpdump -i macvtap0 arp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on macvtap0, link-type EN10MB (Ethernet), capture size 262144 bytes
14:05:32.598221 ARP, Request who-has static.88-198-19-129.clients.your-server.de tell static.88.198.19.139.clients.your-server.de, length 28
14:05:33.207406 ARP, Request who-has static.88-198-19-129.clients.your-server.de tell static.88.198.19.139.clients.your-server.de, length 28

Я пытался изменить эти настройки по отдельности или все вместе, но не смог заставить их работать:

sysctl net.bridge.bridge-nf-call-iptables=0
sysctl net.ipv4.conf.all.proxy_arp=1
sysctl net.ipv6.conf.all.forwarding=1
sysctl net.ipv4.conf.all.arp_filter=1
iptables -P FORWARD ACCEPT
iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT

Я также попытался настроить мост для основного соединения, подключив к нему enp8s0 и подключив к нему виртуальную машину, но я вижу то же падение ответа arp.

Кто-нибудь может мне помочь?

После разговора со службой поддержки Hetzner они указали мне правильное направление. Моя конфигурация была в порядке, но у них был фильтр ARP для каждого общедоступного IP-адреса. Как только я настроил собственный MAC в интерфейсе виртуальной машины, все начало работать.