Hotdry.

Article

OpenWRT 实现 802.11r/k/v 室内无缝漫游:配置参数与粘滞客户端优化

基于 OpenWRT 配置 802.11r/k/v 协议栈,解决多 AP 环境下漫游延迟与粘滞客户端问题,提供可落地的 UCI 参数与验证方法。

2026-05-28systems

在多 AP 覆盖的家庭或办公环境中,移动设备在不同接入点之间切换时经常出现连接中断、延迟过高或 "粘滞" 现象 —— 即设备明明已靠近更强的信号源,却仍固执地连接着远处的弱信号 AP。这种体验在视频会议、语音通话或实时游戏中尤为明显。本文基于 OpenWRT 平台,通过启用 802.11r/k/v 协议栈,提供一套可落地的配置方案,将漫游切换时间从数百毫秒降至数十毫秒级别。

漫游问题的技术根源

传统 Wi-Fi 漫游依赖客户端主动扫描并重新完成完整的四步握手认证(4-Way Handshake),这个过程通常耗时 200-500ms,足以让实时应用感知到卡顿。更严重的是 "粘滞客户端" 问题:部分设备为了节省电量,会大幅降低扫描频率,甚至忽略信号强度变化,导致用户已经移动到另一个 AP 附近,设备却迟迟不肯切换。

802.11r(Fast BSS Transition)通过预认证机制解决延迟问题,允许客户端在切换前就从当前 AP 获取目标 AP 的认证信息,实现 "先认证后切换"。而 802.11k(Radio Resource Management)和 802.11v(Network Discovery/Steering)则分别通过邻居报告和网络引导,帮助客户端更快发现优质 AP 并主动接受切换建议。

核心配置参数详解

在 OpenWRT 的 /etc/config/wireless 中,802.11r/k/v 的配置集中在 wifi-iface 段。以下参数需要在所有参与漫游的 AP 上保持一致:

Mobility Domain(移动域):这是一个 4 位十六进制值(如 2021),所有 AP 必须使用相同的值才能识别彼此属于同一漫游域。该参数决定了 PMK-R0 密钥的派生方式。

FT Protocol(快速切换协议)ft_over_ds 控制切换方式。设为 0 表示 FT Over the Air(客户端直接与目标 AP 通信),兼容性更好;设为 1 表示 FT Over DS(通过当前 AP 中继),切换过程更平滑但需要 AP 间二层互通。

Generate PMK Locally(本地生成 PMK):对于 WPA2-PSK 网络,启用 ft_psk_generate_local '1' 后,每个 AP 可以独立从 SSID 和 PSK 计算出 PMK-R0 和 PMK-R1,无需 AP 间实时交换密钥。这大幅简化了部署,是家庭环境的首选方案。

Reassociation Deadline(重关联截止时间):默认值 1000(约 1ms)对 iOS 和 macOS 设备过于激进,建议改为 20000(约 19.5ms)以确保兼容性。

典型配置示例(WPA2-PSK)

以下是一个双 AP 场景下的配置片段,假设使用相同的 SSID 和密码:

config wifi-iface 'default_radio0'
    option device 'radio0'
    option network 'lan'
    option mode 'ap'
    option ssid 'HomeWiFi'
    option key 'yourpassword'
    option encryption 'psk2+ccmp'
    option ieee80211r '1'
    option mobility_domain '2021'
    option ft_over_ds '0'
    option ft_psk_generate_local '1'
    option reassociation_deadline '20000'
    option ieee80211k '1'
    option ieee80211v '1'
    option bss_transition '1'

关键点在于:所有 AP 的 mobility_domainssidkeyencryption 必须完全一致;ft_psk_generate_local 仅在纯 WPA2-PSK 环境下可用;ieee80211kieee80211v 需要 wpad-fullhostapd-full 软件包支持。

非本地 PMK 场景的配置

如果使用 WPA3-SAE、WPA2-EAP 或 OWE,由于 MSK(Master Session Key)不是从 SSID+PSK 静态派生,无法使用本地 PMK 生成。此时需要配置 r0khr1kh 实现 AP 间密钥交换:

    option ft_psk_generate_local '0'
    option r1_key_holder 'E89F805D372B'
    list r0kh 'E8:9F:80:5D:37:2B,E8:9F:80:5D:37:2B,0000000000000000000000000000000000000000000000000000000000000000'
    list r0kh 'E4:C3:2A:47:4A:3B,E4:C3:2A:47:4A:3B,0000000000000000000000000000000000000000000000000000000000000000'
    list r1kh 'E8:9F:80:5D:37:2B,E8:9F:80:5D:37:2B,0000000000000000000000000000000000000000000000000000000000000000'
    list r1kh 'E4:C3:2A:47:4A:3B,E4:C3:2A:47:4A:3B,0000000000000000000000000000000000000000000000000000000000000000'

r1_key_holder 是当前 AP 的 BSSID(去掉冒号),r0khr1kh 需要列出所有参与漫游的 AP 的 MAC 地址和共享密钥(256 位十六进制字符串)。注意 OpenWRT 19.07.x 与 21.03+ 版本的 hostapd 密钥交换协议不兼容,混用会导致漫游失败。

验证与排障

配置完成后,可通过以下方式验证漫游是否生效:

  1. 日志观察:在 AP 上执行 logread -f | grep -i ft,正常漫游时应看到 FT authenticationFT association 日志。

  2. 延迟测试:使用 ping 持续测试,漫游时丢包应控制在 1-2 个以内,延迟不应出现数百毫秒的跳变。

  3. 客户端兼容性:部分老旧设备可能不支持 802.11r,表现为连接失败或频繁掉线。可尝试关闭 ieee80211r 仅保留 ieee80211k/v,或调整 reassociation_deadline

  4. WPA3 注意事项:OpenWRT 存在 802.11r 与 SAE(WPA3)的兼容性 bug,建议 WPA2-PSK 环境优先使用本地 PMK 方案,WPA3 环境关注官方 issue 进展。

粘滞客户端的额外优化

对于即使启用 802.11v BSS Transition 仍表现顽固的设备,可在 OpenWRT 中调整信号强度阈值强制踢出:

    option signal_connect '-75'
    option signal_stay '-80'
    option signal_strikes '3'

当信号低于 -80dBm 累计 3 次检测周期后,AP 将主动断开客户端连接,迫使其重新扫描并关联到更强的信号源。该策略与 802.11r 配合,可实现 "优雅退出 + 快速接入" 的完整漫游闭环。

参考资料

systems

内容声明:本文无广告投放、无付费植入。

如有事实性问题,欢迎发送勘误至 i@hotdrydog.com