我最近构建了基于 Linux 的桥接器以用于数据包监控目的,但存在一个大问题。
环境是,
- 整体环境
- 监控目标是 vSphere 上的虚拟机。
- vSphere 主机上配置了两个 vSwitch。
- vSwitch 1 配置了 NIC 用于外部桥接通信。
- vSwitch 2 配置为没有用于桥接虚拟机连接的 NIC。
- 都配置为“允许混杂模式”。
- 桥梁环境。
- 基于ubuntu 13.10,安装为最小虚拟机。
- br0 配置了 eth0(到 vS1)和 eth1(到 vS2)
我的问题是,当 VM ping 到 GW 时,会发出 ARP 请求并且 GW 会做出响应。但响应数据包仅显示在 eth0 和 br0 上。
superhero@vim-firewall:~$ sudo tcpdump -i eth0 -n host 192.168.10.172
tcpdump: WARNING: eth0: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
12:13:45.809949 ARP, Request who-has 192.168.10.1 tell 192.168.10.172, length 46
12:13:45.810060 ARP, Request who-has 192.168.10.1 tell 192.168.10.172, length 46
12:13:45.810742 ARP, Reply 192.168.10.1 is-at 00:00:aa:aa:aa:d9, length 46
...
superhero@vim-firewall:~$ sudo tcpdump -i br0 -n host 192.168.10.172
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on br0, link-type EN10MB (Ethernet), capture size 65535 bytes
12:13:51.810928 ARP, Request who-has 192.168.10.1 tell 192.168.10.172, length 46
12:13:51.811031 ARP, Request who-has 192.168.10.1 tell 192.168.10.172, length 46
12:13:51.811579 ARP, Reply 192.168.10.1 is-at 00:aa:aa:aa:aa:d9, length 46
...
superhero@vim-firewall:~$ sudo tcpdump -i eth1 -n host 192.168.10.172
tcpdump: WARNING: eth1: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
12:13:57.812937 ARP, Request who-has 192.168.10.1 tell 192.168.10.172, length 46
12:13:57.813040 ARP, Request who-has 192.168.10.1 tell 192.168.10.172, length 46
...
我需要帮助!
PS. 目前,只有 ARP 有问题。如果我手动添加 GW 的 MAC,网络连接正常,但无法访问本地子网。
答案1
哎呀!我终于找到了可行的解决方案!
我花了三天时间,大约 10 多个小时来解决这个问题,但解决方案并不干净,更接近于权宜之计。我需要真正的解决方案或更好的权宜之计。请帮忙。
无论如何,我从 vmware 社区找到了以下信息。(问题的根本原因与 vmware 有关。)
- https://communities.vmware.com/message/1509541#1509541
- https://communities.vmware.com/message/2208190#2208190
URL(1)是遇到同样问题的原作者对问题原因的评论。 该问题是由 vSwitch 的行为引起的. 如果连接了两个或更多物理 NIC,它们会发出重复的 ARP 请求,并且 Linux 桥会从外部 NIC/端口接收重复的请求。因此会导致 MAC 端口映射混乱。
我确实对此进行了测试(从 vSwitch 中分离备用 NIC),然后网络工作正常。(使用单 NIC vSwitch)
另一条评论,URL 编号 (2) 描述了一种解决方法。如果我从 Linux 桥将老化时间设置为 0,它将作为虚拟集线器工作(将所有数据包发送到所有端口),因此 ARP 响应会到达内部网络上的 VM。
就我而言,我的网桥只有两个用于内部和外部连接的端口,所以在我看来这不是一个大问题。但有些事情不清楚。
如果有办法阻止来自备用 NIC 的环回/重复请求,或者忽略重复请求或其他巧妙的方法来处理网桥的 MAC 表,请告诉我。
感谢阅读并希望能够帮助您解决同样的问题!
答案2
我找到了该问题的另一个可行的解决方案! https://communities.vmware.com/message/2141853#2141853
您可以设置 Esxi 主机的高级系统选项:Net.ReversePathFwdCheckPromisc = 1 此选项禁用在混杂模式下具有多个上行链路和端口组的 vSwitch 上的数据包复制。
我希望这些信息对您有帮助。
答案3
在 VMWARE ESXI 6.x 7.x 中,需要离开接受模式中的以下选项:”混杂模式“ 和 ”伪造传输“
https://www.virtuallyghetto.com/2013/11/why-is-promiscuous-mode-forged.html