起因是我想隔离家中的访客网络 WIFI ,因为会接入很多第三方的硬件。设备是 Asus RT-AX56U 热血版,只当二层交换机用,另接软路由作为网关。由于我想把所有三层功能都放在软路由中统一管理,所以并不打算使用 Asus 的路由器模式,也就用不了 Asus 自带的访客设备隔离功能了,况且 Asus 自带的隔离功能跟我想要的也不太一样
其实这款设备的管理界面并不支持 VLAN 配置,经过反复搜索研究得知,他是用 Linux bridge 实现二层交换的,访客 WIFI 是 wl0.1 ,连接网关的接口是 eth0
admin@RT-AX56U_V2-7430:/# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.f02f74f27430 no eth0
eth1
eth2
eth3
wl0.1
我想要做的是把来自 wl0.1 的数据标记上 VLAN ID ,并通过 eth0 发送到网关,实现访客网络隔离出一个独立的子网,于是我就在命令行中这样配置
ip link add link eth0 name eth0.10 type vlan id 10
ip link set eth0.10 up
brctl addbr br1
brctl addif br1 eth0.10
brctl delif br0 wl0.1
brctl addif br1 wl0.1
ip link set br1 up
执行完以上命令后是这样子的
admin@RT-AX56U_V2-7430:/# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.f02f74f27430 no eth0
eth1
eth2
eth3
br1 8000.f02f74f27431 no eth0.10
wl0.1
此时 wl0.1 下的设备已经能够成功跟网关通信,获取到 IP 并且也连上公网了。本来以为到这就结束了,结果突然发现,虽然 wl0.1 下的设备已经可以跟 eth0.10 通信,但是 wl0.1 自身的设备之间却无法通信了( wl0.1 下的设备无法互相 ping ,而通过网关就可以)。
我反复检查过了,在执行这段命令之前,wl0.1 下的设备是可以正常通信的,其他什么配置都没碰,路由表也检查过了没发现问题。研究半天发现一个叫 hairpin
的功能有点像我遇到的情况,不过启用之后发现并没有卵用。反正来来回回研究了一整天都没有解决,现在唯一能想到的方法,就是通过网关转发访客局域网的流量,不过这也太傻了吧。。。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.