Hyper-V 上的 Linux 桥接设备和 ARP 问题

Hyper-V 上的 Linux 桥接设备和 ARP 问题

以下设置:

在此处输入图片描述

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。

我不明白两件事:

  1. br0为什么使用和作为源接口有区别eth1?桥接设备不应该将 arp 广播转发到吗eth1

  2. 第二次测试中丢失嘉宾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另一个客户机,然后从那里br0br0现在响应请求,但 Hyper-V 再次丢弃该帧,因为源地址与eth1MAC 地址不匹配。

可以在虚拟网络适配器设置中启用 MAC 地址欺骗。另请参阅这篇 Technet 文章

相关内容