我有一个WiFi接入点连接到Linux路由器。 路由器本身连接到互联网。 出于多种原因(主要是为了控制安全性和服务质量),我想强制所有用户的stream量通过Linux路由器,甚至是用户之间的stream量。
为此,我禁用了AP中的站对站通信(我使用D-Link DWL-7200 AP)。 以下是我如何configurationAP:
ssh admin@accesspoint1 D-Link Access Point wlan1 -> set sta2sta disable D-Link Access Point wlan1 -> reboot
这工作正常:无线用户不能相互沟通了。 至less不是直接的。 我的目标是强制stream量到达路由器并返回。
为此,我在Linux路由器中启用了proxy-arp:
echo 1 > /proc/sys/net/ipv4/conf/eth1/proxy_arp
这是大局。
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
这是我希望如果UserA ping UserB发生的事情:
不幸的是,这个整个梦想在步骤4失败,因为Linux路由器收到ARP请求,但没有回答。 从我在互联网上看到的,似乎这是正常的:代理ARP不是真的被devise用于这种设置。 更确切地说,路由器不会回答与ARP请求相同的接口上的主机的ARP请求。 在这种情况下,ARP请求来自eth1,但是它说“谁有IP 10.0.0.66?”,主机10.0.0.66在接口eth1上。
我明白为什么这是一个很好的默认行为,因为如果sta2sta未在AP中被禁用,UserA将收到来自路由器的ARP响应和来自UserB的另一个ARP响应。 但就我而言,我相信,即使是在同一接口上的主机,回答每一个ARP请求也是非常有意义的。
有什么办法可以解决这个默认的代理arp行为?
你想要的实际上是可能的,但需要一个相当新的Linux内核(> = 2.6.34,或者一个backport)。
你需要的选项是/proc/sys/net/ipv4/conf/*/proxy_arp_pvlan :
proxy_arp_pvlan - 布尔值
私有VLAN代理arp。
基本上允许代理arp回复到相同的接口
(从中收到ARP请求/请求)。
这是为了支持(以太网)交换function,如RFC
3069,个别港口不允许
相互沟通,但可以交谈
上游路由器。 如RFC 3069所述,这是可能的
允许这些主机通过上游进行通信
路由器通过proxy_arp'ing。 不需要一起使用
proxy_arp。
这种技术被称为不同的名称:
在RFC 3069中,它被称为VLAN聚合。
思科和Allied Telesyn将其称为专用VLAN。
惠普将其称为源端口过滤或端口隔离。
爱立信称之为MAC强制转发(RFC Draft)。
上游提交添加此支持是65324144b50bc7022cc9b6ca8f4a536a957019e3 。
我不确定可以轻易调整Linux proxyarp实现来实现您的目标。 你有没有考虑使用子网/路由方法?
这是这样的想法:为您的无线networking分配一个/24地址空间。 为了匹配你的问题的例子,我将使用10.0.0.0/24 。 现在把/24划分为10.0.0.8/30 /30子网: 10.0.0.4/30 ,… 10.0.0.248/30 。
每个/30有2个可用的IP地址,其中一个分配给无线客户端,另一个分配(别名)到您的Linux路由器的eth1接口。 10.0.0.6 ,假设我们分配了这个系列的无线客户端地址: 10.0.0.6 ,…, 10.0.0.250 。 我们在路由器10.0.0.9以下一系列的IP别名eth1 : 10.0.0.5 ,…, 10.0.0.249 。
为了完成configuration,每个无线客户端的networking掩码为255.255.255.252 ,默认网关为10.0.0.X-1 (其中X是客户端IP地址的最后一个八位字节)。 在路由器上,可以使用ip命令将IP地址添加到eth1,如下所示:
ip addr add 10.0.0.5/30 broadcast 10.0.0.7 dev eth1 ip addr add 10.0.0.9/30 broadcast 10.0.0.11 dev eth1 ip addr add 10.0.0.13/30 broadcast 10.0.0.15 dev eth1 ... ... ip addr add 10.0.0.249/30 broadcast 10.0.0.251 dev eth1
优点:
缺点: