首页 > Linux, Tomato > Tomato路由器设置VLAN实现Guest SSID功能

Tomato路由器设置VLAN实现Guest SSID功能

2014年5月7日 LTNS     访问次数 505 发表评论 阅读评论

有时客人来访需要通过无线路由器上网,而路由器又设置了 MAC地址过滤,添加新的无线设备嫌麻烦,于是打算在路由器上实现 Guest SSID功能,即,在一个路由器增加一个(或多个) SSID 无线网络名,原有的主SSID自用,新增的 Guest SSID给来访的客人用(无需 MAC地址过滤功能)。另外,客人的无线设备虽可通过 Guest SSID直接上网,但和主SSID所在的网络(即,路由器原有的内网)非同一网段,所以无法访问后者,避免了一些不必要的麻烦。

一些型号的路由器原厂固件,还有如 DDTomato 等第三方固件都有支持 Guest SSID功能,因为用惯了 Tomato固件,这里以手里的 Cisco M20 路由器和 Tomato固件为例,以供参考。

Tomato 原始固件不支持 VLAN(Guest SSID功能需在此基础上实现),但有 RAF、Shibby、Toastman等多个修改版支持,Tomato各修改版的功能比较列表详见 wiki页面

Cisco M20 路由器的 flash只有4M,除了 VLAN我还需要 VPN功能,固件太大的话无法刷入(按网上的说法不能超过 3748KB),经网上搜索,目前似乎只有如下的 Tomato Shibby 107 版本可用
http://tomato.groov.pl/download/K26/build5x-107-EN/tomato-K26-1.28.RT-MIPSR2-107-MiniVPN.trx

还需要注意的是,从 M20原厂固件无法直接刷入 Tomato固件,需先升级为 DD固件,然后再升级为 Tomato固件,具体刷机方法请自行上网搜索,过渡用 DD固件我用的是如下这个版本。
ftp://ftp.dd-wrt.com/others/eko/V24-K26/svn18946/dd-wrt.v24-18946_NEWD-2_K2.6_mini_m20.bin
(顺便提一下,虽然 Cisco M20 硬件上是 Linksys WRT310N v2.0 的马甲版,但却无法使用后者过渡可用的 DD固件。)

 
首先在路由器的基本网络设置页面添加一个 192.168.x.0的网段,如下图中的 br1网桥,以区别原有的 br0网桥(192.168.1.0网段)。

在高级设置中添加一个 VLAN并绑定 br1网桥。

注:图中 br1未绑定任何 LAN物理端口,如需把 Guest SSID和 LAN物理端口绑定在同一网段,请自行添加。

其次,添加一个虚拟无线网络(当然也可添加多个)wl0.1,SSID名任意,将其绑定在 br1网桥

点击 Add按钮,进入该虚拟无线网络的参数设置页

完成参数设置后,点击 Overview按钮就可以回到总览页面,确认没问题后保存即可。

最后到脚本的防火墙页面添加如下脚本(按照 参考文章3),以便让 br1网桥可直接上网。

#iptables -P FORWARD DROP   #没有FORWARD规则匹配则默认丢弃转发包
#iptables -A FORWARD -i eth0 -o br0 -j ACCEPT   #允许br0上网
#iptables -A FORWARD -i br0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o br1 -j ACCEPT   #允许br1上网
iptables -A FORWARD -i br1 -o eth0 -j ACCEPT

注:我手上的Tomato路由器还应用了其他防火墙规则,所以未用前面的三行,请自行决定是否需要注释掉。

 
重启路由器后就有两个 SSID可用了
tomato_wireless_overview

现在来访的客人可以通过 Guest SSID上网,但由于分配的是 br1网桥的ip地址,无法访问 br0网桥(即,路由器原有的内网),除非另行设置。

不过来访的客人还可以访问路由器本身(192.168.1.1或192.168.11.1),如想禁止访问,需进一步设置防火墙,比如添加如下五行

iptables -P INPUT DROP   #没有INPUT规则匹配则默认丢弃进入包
iptables -D INPUT -i br1 -j ACCEPT   #允许br1访问路由器本身的已有规则删掉
iptables -A INPUT -i br1 -p tcp --dport 53 -j ACCEPT   #允许br1通过tcp/udp 53端口访问路由器的DNS Server
iptables -A INPUT -i br1 -p udp --dport 53 -j ACCEPT
iptables -A INPUT -i br1 -p udp --dport 67:68 -j ACCEPT   #允许br1通过udp 67-68访问路由器的DHCP Server

注:因为我刷的 Tomato Shibby固件默认允许br0、br1访问路由器本身(可在修改防火墙规则之前检查一下),请根据自己的实际情况决定是否需要红字部分

iptables -nvL   #检查当前的防火墙规则
#反馈如下
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
 ... 
 195  14371 ACCEPT     all  --  br0    *       0.0.0.0/0            0.0.0.0/0
 328  23832 ACCEPT     all  --  br1    *       0.0.0.0/0            0.0.0.0/0

至此,来访的客人可以通过 Guest SSID上网,但无法访问路由器原有的内网,也无法访问路由器本身(除了tcp/upd 53、udp 67-68这几个端口之外),实现了跟路由器内网之间的安全隔离。

 

补充1:

一般情形下主SSID所在的无线网络需要设置 MAC地址过滤,以求更好的安全性;而针对 Guest SSID则不需要,以求方便。但目前的 Tomato各修改版里的 MAC地址过滤功能无法区别对待 主SSID和 Guest SSID,即,一旦路由器设置了 MAC地址过滤则对 Guest SSID亦会生效。

目前还没有完美的解决办法,只能在每次修改过 MAC过滤地址的清单后,通过 Telnet 或 SSH方式以 root权限登录路由器,执行如下四条指令,即可针对 Guest SSID屏蔽 MAC地址过滤功能,重启路由器后仍然有效。

nvram unset wl0.1_macmode
nvram unset wl0.1_maclist
nvram commit
reboot

 
补充2:

还发现一个小问题,RAF、Shibby、Toastman等多个修改版的固件里设置 VPN服务器地址的参数时,填写ip地址没问题,但若是包含纯数字的 FQDN域名(如 xxx.3322.org之类的)的话则会提示“Invalid server address”出错(以前用过的 TomatoVPN、TomatoUSB这两个修改版没有这个问题),至今仍未修正,暂时只能执行 nvram命令以设定服务器地址。

nvram set vpn_client1_addr=xxx.3322.org
nvram commit
reboot

 
 

参考文章:

1. https://code.google.com/p/tomato-sdhc-vlan/wiki/MultiSSIDHOWTOForE3000#MultiSSIDHOWTOfor_E3000
2. http://code.google.com/p/tomato-sdhc-vlan/wiki/ExperimentalMultiSSID
3. https://somethingk.com/main/?p=323
4. http://www.linksysinfo.org/index.php?threads/tomato-shibbys-releases.33858/page-13

 

分类: Linux, Tomato 标签: , , , , ,
  1. 2015年6月1日16:14 | #1

    学习借鉴了,谢谢!!

  2. thx
    2015年11月29日02:11 | #2

    深表感谢。

  1. 2015年2月22日20:27 | #1
33 - 8 = (必填)