OpenWRT 路由器快速漫游(802.11r)配置笔记
原版op固件为了节省空间,自带的wpad库是残血的。因为我们需要用到满血wpad的一些功能,需要先安装满血库。如果你的op像我用的原版ImmortalWrt 23.05.2一样自带了满血的wpad-openssl 或者 wpad-wolfssl(国人自己编译的很多都是),那可以跳过这步,为了保险起见可以删除一下再重新安装。

记住无线接口里的BSSID数值


注意事项:
勾选802.11r 快速切换
勾选无线电测量邻居报告
勾选无线电测量信标报告
“2.4G”、“5G”每台设备根据自身MAC地址在NAS id 填入“去掉冒号的BSSID”
“2.4G”、“5G”设备的移动域分别填入的“四位数字”保持一致,即2.4G和2.4G一致,5G和5G一致(2.4g和5g设置不一样的移动域)。
R1 密钥持有者 填入“去掉冒号的BSSID”
勾选R1 推送 PMK
外部 R0KH 列表 填入 ”BSSID,去掉冒号的BSSID,自定一个128位的密钥“
外部 R1KH 列表 同上
假设我有4个路由器(1个AC, 3个AP)。
外部 R0KH 列表 与 外部 R1KH 列表就需要把4个路由器都填上 (多少个组网无缝漫游就得填多少个)
外部 R0KH 列表和外部 R1KH 列表不能留空,否则日志会报错:hostapd: nl80211: kernel reports: key addition failed

128位key的计算方法
在windows系统中, 可以打开Powershell, 执行命令
(Get-Random -Count 16 -InputObject (0..255) | ForEach-Object { $_.ToString(“X2″) }) -join ”
在linux系统中, 执行命令
xxd -l 16 -p /dev/random
验证需要以下几个工具:
- 支持快速漫游的手机(iPhone是肯定可以,安卓你很难知道它支不支持)
- 手机安装监测Wi-Fi漫游的软件。第一推荐WiFiman,是个ubiquiti的配套软件,很好用,信息显示也很全。其次可以用tplink的网络百宝箱,也还算好用。安卓端还推荐一个wifi analyzer软件,可以用来分析信号
- 电脑ssh连接路由器。很多人喜欢用putty,不过我喜欢直接命令行ssh。这里涉及命令行,要用到专业知识,不过都是复制粘贴,难度不大。可能比较劝退,我就不解释了,如果有不懂的请百度
准备好以后我们就可以开始了。可以先快速在wifi analyzer里看一看协议里有没有 +FT。如果没有的话可能路由器设置有问题,或者你的手机不支持。苹果用户没有,或者安卓用户没找到这个软件也没关系,不影响我们之后的步骤。

首先我们需要ssh连接路由器更改几个设置。输入以下几条命令
root@OpenWrt:~# uci set wireless.radio0.log_level=1
root@OpenWrt:~# uci commit wireless
root@OpenWrt:~# wifi up
root@OpenWrt:~# grep _level /var/run/hostapd-phy0.conf # 保证你的输出和下面对的上就行
logger_syslog_level=1
logger_stdout_level=1
这里我们做的是让 openwrt 的 log 打印更多东西。原本关于快速漫游的信息在log里是不显示的。
准备工作已经做好,现在你需拿出手机,打开监测漫游的软件,在房间里走来走去让手机漫游个几次。

在手机漫游的过程中,设备漫游的相关信息也会在路由器的log里被记录下来。这时候只要我们查看log数据就可以知道手机是否使用了快速漫游。
回到ssh窗口,输入logread命令并按下回车。这时你的命令行会打印一大堆log。如果你发现log结尾有这样的内容
daemon.debug hostapd: wlan0: STA e0:…:30 WPA: FT authentication already completed – do not start 4-way handshake
那么你的快速漫游已经成功了。但是如果你发现你的log有这样的内容
Wed Nov 3 21:45:48 2021 daemon.debug hostapd: wlan0: STA 70:8a:09:df:f1:bc WPA: sending 1/4 msg of 4-Way Handshake
Wed Nov 3 21:45:48 2021 daemon.debug hostapd: wlan0: STA 70:8a:09:df:f1:bc WPA: received EAPOL-Key frame (2/4 Pairwise)
Wed Nov 3 21:45:48 2021 daemon.debug hostapd: wlan0: STA 70:8a:09:df:f1:bc WPA: sending 3/4 msg of 4-Way Handshake
Wed Nov 3 21:45:48 2021 daemon.debug hostapd: wlan0: STA 70:8a:09:df:f1:bc WPA: received EAPOL-Key frame (4/4 Pairwise)
那说明你的手机没有使用快速漫游,而是用了传统的龟速切换方式。要么你的手机不支持802.11r,要么你的配置和你的手机不兼容。如果有别的报错的话,可以通过报错信息查看问题出在哪里。