以下设置:
我tcpdump -e -n -i eth1
对两位客人进行了调试。
arping -I br0 10.0.2.0 -s 10.0.1.0
在客户机 1 上运行。
嘉宾 1:
13:10:51.933237 [guest1-br0-mac] > Broadcast, ethertype ARP (0x0806), length 42: Request who-has 10.0.2.0 (Broadcast) tell 10.0.1.0, length 28
嘉宾2:没有什么!
(反过来也一样)。
在客户机 1 上运行arping -I eth1 10.0.2.0 -s 10.0.1.0
(eth1 而不是 br0):
嘉宾 1:
13:13:57.593789 [guest1-eth1-mac] > Broadcast, ethertype ARP (0x0806), length 42: Request who-has 10.0.2.0 (Broadcast) tell 10.0.1.0, length 28
嘉宾2:
13:13:57.594041 [guest1-eth1-mac] > Broadcast, ethertype ARP (0x0806), length 42: Request who-has 10.0.2.0 (Broadcast) tell 10.0.1.0, length 28
13:13:57.594111 [guest2-br0-mac] > [guest1-eth1-mac], ethertype ARP (0x0806), length 42: Reply 10.0.2.0 is-at [guest2-br0-mac], length 28
因此客人 2 似乎做出了回应,但是这个回应并没有传回给客人 1。
我不明白两件事:
br0
为什么使用和作为源接口有区别eth1
?桥接设备不应该将 arp 广播转发到吗eth1
?第二次测试中丢失嘉宾2的回应的原因可能是什么?
$ brctl show bridge name bridge id STP enabled interfaces br0 8000.0123456789AB no eth1
请告诉我您还需要哪些其他信息。
答案1
在 Hyper-V 中启用“MAC 地址欺骗”即可解决问题!我觉得自己太傻了,我浪费了两天时间才弄清楚这一点……
解释:
1.问题:当 Hyper-V 禁止 MAC 地址欺骗时,以太网帧中的源 MAC 地址必须与接口 MAC 地址匹配。当从接口发送 arp 请求时,情况br0
并非如此,Hyper-V 会丢弃该帧。
2.问题:这本质上是同一个问题。使用eth1
源接口,请求现在成功到达eth1
另一个客户机,然后从那里br0
。br0
现在响应请求,但 Hyper-V 再次丢弃该帧,因为源地址与eth1
MAC 地址不匹配。
可以在虚拟网络适配器设置中启用 MAC 地址欺骗。另请参阅这篇 Technet 文章。