是否可以使用 proxy-arp 回到同一个界面?

Min*_*ark 7 linux routing proxy arp

我有一个连接到 Linux 路由器的 WiFi 接入点。路由器本身连接到 Internet。出于多种原因(主要是为了控制安全性和服务质量),我想强制所有用户的流量都经过 Linux 路由器,甚至是用户之间的流量。

为此,我禁用了 AP 中的站对站通信(我使用 D-Link DWL-7200 AP)。以下是我配置 AP 的方法:

ssh admin@accesspoint1
D-Link Access Point wlan1 -> set sta2sta disable
D-Link Access Point wlan1 -> reboot
Run Code Online (Sandbox Code Playgroud)

这工作正常:无线用户无法再相互通信。至少不是直接的。我的目标是强制流量到达路由器并返回。

要做到,我能在Linux的路由器代理ARP:

echo 1 > /proc/sys/net/ipv4/conf/eth1/proxy_arp
Run Code Online (Sandbox Code Playgroud)

这是大图。

                  10.0.0.0/8 subnet    
   ____________________|______________________
  /                                           \
  |                                           |

               (sta2sta disabled)
  UserA----------------AP---------------------Router-------------------Internet
10.0.0.55             /                   eth1     eth0
                     /                10.0.0.1     203.0.113.15
                    /        proxy-arp enabled
  UserB____________/
10.0.0.66
Run Code Online (Sandbox Code Playgroud)

如果 UserA ping UserB,我希望会发生以下情况:

  1. 用户 A 尝试 ping 10.0.0.66
  2. 所以用户 A 发送 ARP 广播说“谁有 10.0.0.66?”
  3. 接入点让请求通过路由器(但不能通过 UserB,因为 sta2sta 被禁用)
  4. 路由器收到请求,并且因为在 eth1 上启用了 proxy-arp,它应该回答“将 10.0.0.66 的数据包发送给我(路由器的 MAC 地址)”。
  5. 接入点应该收到答复并将其转发给用户 A。
  6. 然后 UserA 应该将实际的 ping 数据包发送到路由器的 MAC 地址
  7. 数据包应该通过 AP 到达路由器
  8. 路由器应该将其路由回 eth1,方法是将目标 MAC 地址更改为 UserB 的 MAC 地址(如果需要,执行 ARP 请求),并将源 MAC 地址更改为其自己的。
  9. 数据包应到达 AP 并中继到 UserB。
  10. UserB 应回复 ping 请求。
  11. 回复应该通过 AP 到达路由器。
  12. 回复应该路由到 UserA。
  13. 它应该通过 AP 到达 UserA。

不幸的是,这整个梦想在第 4 步失败了,因为 Linux 路由器收到了 ARP 请求但没有回答它。从我在 Internet 上阅读的内容来看,这似乎很正常:proxy-ARP 并非真正设计用于这种设置。更准确地说:路由器不响应与 ARP 请求来自同一接口的主机的 ARP 请求。在这种情况下,ARP 请求来自 eth1,但它说“谁拥有 IP 10.0.0.66?”,并且主机 10.0.0.66 在接口 eth1 上。

我理解为什么这是一个很好的默认行为,因为如果 AP 中没有禁用 sta2sta,用户 A 将收到来自路由器的 ARP 响应和来自用户 B 的另一个 ARP 响应。但就我而言,我相信回答每个 ARP 请求是非常有意义的,即使对于同一接口上的主机也是如此。

有什么办法可以解决这个默认的代理 arp 行为?

Ser*_*sov 7

您想要的实际上是可能的,但需要一个相当新的 Linux 内核(>= 2.6.34,或向后移植)。

您需要的选项是/proc/sys/net/ipv4/conf/*/proxy_arp_pvlan

proxy_arp_pvlan - 布尔值
    专用 VLAN 代理 arp。
    基本上允许代理 arp 回复到同一个接口
    (从那里收到 ARP 请求/征求)。

    这样做是为了支持(以太网)交换机功能,例如 RFC
    3069,其中不允许单个端口
    彼此交流,但允许他们交谈
    上游路由器。如 RFC 3069 中所述,有可能
    允许这些主机通过上游通信
    通过proxy_arp'ing的路由器。不需要与
    proxy_arp。

    这项技术有不同的名称:
      在 RFC 3069 中,它被称为 VLAN 聚合。
      Cisco 和 Allied Telesyn 将其称为专用 VLAN。
      惠普将其称为源端口过滤或端口隔离。
      爱立信将其称为 MAC 强制转发(RFC 草案)。

添加此支持的上游提交是65324144b50bc7022cc9b6ca8f4a536a957019e3