一、动机
家中经常有wifi死角,多放几个无线AP的话,由于SSID不同,客户端不能智能判断要连接的AP,经常要手动切换,非常麻烦。
一直想要完成家中的wifi无线漫游,让设备能够智能识别信号质量好的AP进行连接。目前比较靠谱的无缝漫游的方案基本都是靠企业级AC+AP来完成,不止价格昂贵,还要增加不少设备。
无意中逛CHIPHELL看到一个帖子提到目前openwrt可以通过802.11r协议的设置达到AP间无线漫游的效果,但是需要客户端设备支持802.11r协议。CHIPHELL中提到的原帖在这里,其中提到iphone以及一些android手机都能够完美支持。正好家中的手机都是iphone,而且有两台闲置的netgear wndr3800,二话不说,操练起来!
二、准备工作
由于家里是使用openwrt x86的软路由作为主路由,所以两台刷好openwrt的 wndr3800 都是作为无线交换机使用,不需要DHCP功能。
按照openwrt的官方wiki将 wndr 3800 设置成无线AP模式。同时在LAN口的设置里指定好网关和DNS为主路由,不然AP本身无法解析地址进行opkg更新。
![无线路由器设置为无线AP模式](http://og9iodfr1.bkt.clouddn.com/dump AP.png)
三、802.11r设置
参考reddit原帖的设置
-
用 wpad 替换 wpad-mini
openwrt 默认安装的是 wpad-mini,不支持802.11r,所以需要移除 wpad-mini,并安装 wpad
opkg remove wpad-mini
opkg install wapd -
设置
etc/config/wireless
手动设置
/etc/config/wireless
文件,据说现在已经有luci图形界面设置的支持了。option ieee80211r "1" option mobility_domain "e612" option pmk_r1_push "1"
这里的
mobility_domain
可以选择任意的4位16进制字符。接下来,从 LUCI 中找到 Network -> WIFI,获取无线网络的BSSID
比如说你其中一台AP的BSSID是11:22:33:44:55:00,那么在
/etc/config/wireless
中添加如下设置option nasid "112233445500" option r1_key_holder "112233445500"
此时,如果你的另一台AP的BSSID是11:22:33:44:55:01,那么继续添加如下内容。
list r0kh "11:22:33:44:55:00,112233445500,8a7fcc966ed0691ff2809e1f38c16996" list r0kh "11:22:33:44:55:01,112233445501,8a7fcc966ed0691ff2809e1f38c16996" list r1kh "11:22:33:44:55:00,11:22:33:44:55:00,8a7fcc966ed0691ff2809e1f38c16996" list r1kh "11:22:33:44:55:01,11:22:33:44:55:01,8a7fcc966ed0691ff2809e1f38c16996"
其中
8a7fcc966ed0691ff2809e1f38c16996
是随机生成的32位16进制字符。注意这段内容在你所有AP的设置中都是一样的。这样一台AP的就配置好了。
对于第二台AP只要将第一部分的关于nasid
和r1_key_holder
中的内容更换成对应AP的BSSID就可以了。
好了,保存好配置文件,重启所有AP的WIFI或者直接重启路由,下面我们来通过其他设备来验证一下是否真的实现了无缝漫游切换。
四、无缝漫游验证
在 reddit原帖 中关于验证的方法有很多种,最靠谱的应该是加入 CONFIG_WPA_MSG_MIN_PRIORITY=1
参数重新编译 hostapd,然后通过 logread
命令观察有没有 WPA: FT authentication already completed
的字样出现,如果有的话,就代表无线漫游开启了。
但是这个方法太繁琐了,还需要重新编译。我选择的方法是使用 iphone 在家中行走,进入不同AP的覆盖面积,然后通过 “Net Analyzer“ 这个APP来检测是否切换至对应的AP。
Net Analyzer 可以嗅探到所连接AP的 mac 地址,从而判断 iphone 连接到了哪个AP设备。
我们可以看到iphone自动连接到了信号较好的AP上。
然后我又在macbook pro上进行了测试,按住 alt
键点击 wifi 图标可以观察到所连接AP的MAC地址,同样也无缝做出了切换(忘记截图了)。此外,用safari打开了一个youtube的视频,观察视频播放时的下载情况,也没有任何的断流出现。至此我认为在平时正常使用中已经达到了无缝漫游的要求。
五、结语
对于没钱购买专业AP+AC的人来说这是一个非常高性价比的方法,当然这个方法也有一些缺点:
- 无法完成2.4G和5G网络之间的无缝切换,这个只有支持Mesh的路由器或者专业的AP+AC设备才能做到。
- 需要AP设备都刷openwrt或者LEDE系统,对于不熟悉的人门槛相对比较高。
- 设置没有那么直观,不过现在好像有LUCI设置界面了,不过还是没有商业路由器傻瓜。
- 支持的设备有限,据我所知最近的苹果系都可以支持,但我手边的 Blackberry Classic 就不支持。