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,我希望会发生以下情况:
不幸的是,这整个梦想在第 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 行为?
您想要的实际上是可能的,但需要一个相当新的 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。