无法在 macvtap 设备上获取 ARP 答复

无法在 macvtap 设备上获取 ARP 答复

我在 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 连接到它并将 VM 连接到它,但我看到相同的 arp 答复丢失。

有人能帮帮我吗?

答案1

在与 Hetzner 支持人员交谈后,他们为我指明了正确的方向。我的配置没问题,但他们为每个公共 IP 设置了一个 ARP 过滤器。一旦我在虚拟机界面上配置了自定义 MAC,一切就开始正常工作了。

相关内容