Linux

KVM 橋接網路:第一個 ARP 數據包被錯誤的主機應答

  • May 7, 2019

我有一台帶有 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 ,無論它在哪裡,即可解決此問題。

引用自:https://serverfault.com/questions/959667