KVM 桥接网络:第一个 ARP 数据包被错误主机应答

KVM 桥接网络:第一个 ARP 数据包被错误主机应答

我有一台主机 (192.168.1.106) Linux 服务器,该服务器带有 KVM,还有一台 Linux 服务器作为虚拟客户机 (192.168.1.105)。客户机使用网桥,主机和客户机都可通过同一网络接口卡访问。

我的问题是,第一个 ARP 数据包询问我的虚拟化客户机的 IP(本例中为 192.168.1.105),主机 192.168.1.106 总是会用错误的 MAC 地址回答它。然而,第二个 ARP 数据包总是能找到通往客户机的路径,并得到正确的回答。不用说,这会带来麻烦……

$ arping -I wlp4s0 192.168.1.105
ARPING 192.168.1.105 from 192.168.1.100 wlp4s0
Unicast reply from 192.168.1.105 [10:7B:44:80:E0:85]  3.752ms <-- Wrong MAC address
Unicast reply from 192.168.1.105 [52:54:00:8D:A2:C8]  3.838ms
Unicast reply from 192.168.1.105 [52:54:00:8D:A2:C8]  2.591ms
$ ip a
3: enp5s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 10:7b:44:80:e0:85 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.106/24 brd 192.168.1.255 scope global noprefixroute enp5s0
       valid_lft forever preferred_lft forever
    inet6 fe80::127b:44ff:fe80:e082/64 scope link 
       valid_lft forever preferred_lft forever
6: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:f9:4b:f9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
7: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
    link/ether 52:54:00:f9:4b:f9 brd ff:ff:ff:ff:ff:ff
10: macvtap0@enp5s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 500
    link/ether 52:54:00:8d:a2:c8 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.105/24 brd 192.168.1.255 scope global noprefixroute macvtap0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe8d:a2c8/64 scope link 
       valid_lft forever preferred_lft forever
virsh # iface-dumpxml macvtap0
<interface type='ethernet' name='macvtap0'>
  <mtu size='1500'/>
  <link speed='1000' state='up'/>
  <mac address='52:54:00:8d:a2:c8'/>
</interface>
virsh # iface-dumpxml enp5s0
<interface type='ethernet' name='enp5s0'>
  <mtu size='1500'/>
  <link speed='1000' state='up'/>
  <mac address='10:7b:44:80:e0:85'/>
</interface>
virsh # version
Compiled against library: libvirt 4.5.0
Using library: libvirt 4.5.0
Using API: QEMU 4.5.0
Running hypervisor: QEMU 3.0.0

有人知道问题可能出在哪里吗?或者如何修复它?我还查看了来自客户的 tcpdump,第一个 ARP 数据包从未到达那里。

答案1

你的界面macvtap0(链接到enp5s0) 被分配了一个 IP:192.168.1.105/24:虚拟机的 IP。由于 Linux 将其所有 IP 视为一个池,包括查询/应答 ARP,主机只是做了根据其配置应该做的事情:回答对 192.168.1.105 的查询,设置为macvtap0使用enp5s0的MAC。

VM 的作用是接收流量并使用自己的网络堆栈相应地对其进行响应。实际上,macvtap 应被视为桥接端口。主机不应在其一侧拥有此 IP,就像如果桥接端口用于此配置,则主机不应在桥接端口上拥有 IP 一样。

您没有显示任何包含此 IP 的配置文件,但它出现在配置界面中。因此只需从macvtap0的设置,无论它在哪里,都可以纠正此问题。

相关内容