在网桥设备上转发 ARP 回复

在网桥设备上转发 ARP 回复

这是我的网络:

[laptop A]~~~~[ddwrt1]~~~~[ddwrt2]----[desktop B]
               |
               +--[desktop C]

ddwrt2 是一个以客户端桥接模式运行的 wifi 路由器,连接到另一个 wifi 路由器 ddwrt1。笔记本电脑使用 wifi 连接到 ddwrt1。两台台式机通过以太网线连接到 WiFi 路由器。

问题:

  • 笔记本电脑 A 无法 ping 通台式机 B,甚至没有解析 ARP
  • 如果我们在笔记本电脑 A 中为台式机 B 设置静态 ARP 条目,则笔记本电脑 A 可以 ping B
  • 桌面C也有同样的问题

因此,这里的 IPv4 路由正常,但由于某种原因 ARP 数据包不行。所以我做了一些调试并发现了以下内容:

  • ddwrt1 上的所有以太网 LAN 和 wifi 接口都组合为桥接设备br0
  • 在 ddwrt1 上运行tcpdump -i br0 -e -n -vv arp显示 ARP 请求(广播)和响应(单播)数据包,并且所有字段看起来都正确
  • 在笔记本电脑 A 上运行 tcpdump 没有看到响应返回
  • 在 ddwrt1 上 ping 桌面 B 正常
  • brctl showmacs在 ddwrt1 上,在正确的接口上显示了此处涉及的所有 MAC 地址
  • ddwrt1 没有任何可疑之处:bridge-nf-call-iptables类似的 sysctl 项目已关闭,没有 ebtables 或 arptables 运行,iptables 没有关于 arp 的规则

我现在能做什么?我想我归结为为什么网桥无法转发 ARP 回复数据包的问题

答案1

经过更多调试后,我找到了答案。它特定于 dd-wrt ​​的 Linux 内核,请参见此处arp.c中的代码

所以内核中有一个“ARP 欺骗保护”代码会丢弃我的回复数据包。我可以在AP的防火墙配置页面上将其关闭,或者echo 0 > /proc/net/arp_spoofing_enable在其中执行。如果我们将其关闭,问题就消失了。

它遇到的问题是 ARP 回复是从ddwrt2wifi 帧转发的,因此携带 wifi 的 MAC,而不是桌面 B 的 MAC。这触发了上面提到的欺骗保护代码。

相关内容