起因是我想隔离家中的访客网络 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 的功能有点像我遇到的情况,不过启用之后发现并没有卵用。反正来来回回研究了一整天都没有解决,现在唯一能想到的方法,就是通过网关转发访客局域网的流量,不过这也太傻了吧。。。