起因是我想隔离家中的访客网络 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
的功能有点像我遇到的情况,不过启用之后发现并没有卵用。反正来来回回研究了一整天都没有解决,现在唯一能想到的方法,就是通过网关转发访客局域网的流量,不过这也太傻了吧。。。
1
billlee 2023-05-17 20:05:06 +08:00
WLAN 的设备隔离应该是由 hostapd 控制的,和 linux bridge 关系不大。
|
2
OOPOK OP @billlee 可能是吧,不过我研究了半天也没找到相关配置,反倒是发现了个很离谱的现象,我用 brctl 把 wl0.1 挪回到 br0 后无线设备又通了,再挪到 br1 又不通了,搞不懂是什么原理
|
3
makusuofute 2023-05-22 12:35:25 +08:00
你还不如 SSID 区分 2 个 对应不同 vlan
直接在网关上做隔离算了 |
4
OOPOK OP @makusuofute 现在就是两个 SSID 对应不同 VLAN ,wl0.1 是 Asus 为访客 SSID 创建的虚拟设备。目前网关的配置没问题,只是 wl0.1 下的设备在链路层不能互通
|