Linux
KVM 橋接網路:第一個 ARP 數據包被錯誤的主機應答
我有一台帶有 KVM 的主機 (192.168.1.106) Linux 伺服器和一台作為虛擬來賓 (192.168.1.105) 的 Linux 伺服器。來賓使用網橋,主機和來賓都可以通過同一個網路介面卡訪問。
我的問題是第一個請求我的虛擬客戶 IP 的 ARP 數據包,在這個例子中 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 數據包從未到達那裡。
您的介面macvtap0(連結到enp5s0)被分配了一個 IP: 192.168.1.105/24: VM的 IP。由於 Linux 將其所有 IP 視為一個池,包括在查詢/應答 ARP時,主機只是根據其配置做了應該做的事情:使用enp5s0的 MAC回答對設置為macvtap0的 192.168.1.105 的查詢。
這就是 VM 的角色來接收流量並使用它自己的網路堆棧相應地回答它。真的macvtap應該被認為是一個橋接埠。主機不應該有這個IP,就像它在橋埠上沒有IP一樣,如果一個用於這個配置。
您沒有顯示任何具有此 IP 的配置文件,但它出現在配置的界面中。因此,只需從macvtap0的設置中刪除 192.168.1.105/24 ,無論它在哪裡,即可解決此問題。