Openwrt 实现无线漫游

一、动机

家中经常有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模式

三、802.11r设置

参考reddit原帖的设置

  1. 用 wpad 替换 wpad-mini

    openwrt 默认安装的是 wpad-mini,不支持802.11r,所以需要移除 wpad-mini,并安装 wpad

    opkg remove wpad-mini
    opkg install wapd

  2. 设置 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

    比如说你其中一台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只要将第一部分的关于 nasidr1_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 就不支持。



本文章由作者:佐须之男 整理编辑,原文地址: Openwrt 实现无线漫游
本站的文章和资源来自互联网或者站长的原创,按照 CC BY -NC -SA 3.0 CN协议发布和共享,转载或引用本站文章应遵循相同协议。如果有侵犯版权的资 源请尽快联系站长,我们会在24h内删除有争议的资源。欢迎大家多多交流,期待共同学习进步。

相关推荐