现象:无线每隔几分钟就被踢一次
一台跑 Arch Linux 的笔记本,用 iwd 作为无线后端(不是 wpa_supplicant,也不是 NetworkManager),通过 Wi-Fi 把麦克风音频以 UDP 推到局域网另一台机器。表现是:信号很强、距离很近,却每隔几分钟就断一次,推流程序报Network is unreachable后被 systemd 自动拉起,一天下来自动重启了上千次。
最开始容易往几个方向想:
- 信号差、距离远、隔墙太多
- 无线网卡省电模式把链路关了
- 被人用工具强制踢下线(伪造解除关联帧攻击)
逐个排除后发现都不是,真正的原因藏在加密协议协商里。
先看日志,别凭感觉猜
无线后端是 iwd,所有连接、协商、断开事件都进了 systemd 日志,直接实时跟踪:
sudojournalctl-uiwd-f反复出现两类记录:
SA Query timed out, connection is invalid. Disconnecting unprotected disconnect (reason=3 DEAUTH_LEAVING)其中SA Query timed out是关键线索。它不是信号问题,也不是省电,而是无线协商阶段的一个"安全查询"在规定时间内没等到回应,iwd 判定这条连接无效,主动断开。
这条线索指向 WPA3-SAE
SA Query和 SAE 是绑定在一起的。SAE(同时对等认证)是 WPA3 的握手方式,替代 WPA2 的 PSK 四次握手。WPA3 默认还强制开启 PMF(802.11w,受保护管理帧),用来防止伪造的解除关联帧把设备踢下去。
问题就出在这台家用光猫和 iwd 之间的 WPA3 兼容协商上:
- 光猫 5G 频段认证方式是
WPA3-SAE,加密 AES - iwd 在和光猫做 SAE / PMF 交互时,偶发 SA Query 超时
- 超时后 iwd 主动断开,随即自动重连,于是形成"连上—几分钟—被踢—重连"的循环
可以用下面这句统计当天这类报错的规模,确认是不是高频反复:
sudojournalctl-uiwd --no-pager|grep-c"SA Query timed out"数字如果是几百上千,且时间均匀分布,基本就是这个问题,而不是偶发掉线。
PMF 是什么,跟这次有没有关系
PMF(Protected Management Frames,受保护管理帧,标准号 802.11w)本意是安全功能:给解除关联、解除认证这类管理帧加上密码学保护,防止第三方伪造帧把别人从网上踢下去、再跑包破解。它是防守锁,不是攻击手段。
这次不是有人攻击,而是光猫在 WPA3-SAE 下强制 PMF,与本机 iwd 的协商实现存在兼容超时。很多家用光猫的后台并不单独暴露 PMF 开关,5G 的基本配置和高级配置里只有信道、带宽、功率、WMM 这些,找不到独立的"管理帧保护 / 802.11w"选项,所以没法单独把 PMF 关掉。
解决:把 5G 从 WPA3-SAE 降到 WPA/WPA2-PSK
既然根因是 SAE/PMF 协商,最直接的办法就是绕开 SAE:在光猫后台把该 SSID 的认证方式从WPA3-SAE改成WPA/WPA2-PSK,加密算法保持 AES。
WPA/WPA2-PSK是混合模式,走传统 PSK,不带 SAE,也不强制 PMF,新旧设备都能连,容错最好- 不要选
WPA3-SAE Transition,它是过渡模式,里面仍然带 SAE,问题可能还在 - 也可以直接选纯
WPA2-PSK,但混合模式更保险
改完之后,连这个 Wi-Fi 的设备都要重新输一次密码。安全性从 WPA3 降到 WPA2,家用自用足够,换来的是稳定不掉线。
顺手清理本机 iwd 的 SAE 残留
只改路由还不够,iwd 本地保存的配置里会残留上次 WPA3 生成的 SAE 材料。配置文件在:
/var/lib/iwd/<你的SSID>.psk里面可能有两行 SAE 专用的密钥派生记录:
SAE-PT-Group19=... SAE-PT-Group20=...把这两行删掉,只保留密码段,IP 地址交给 networkd 管理即可:
[Security] Passphrase=你的Wi-Fi密码改完重启无线后端让它重新按 PSK 关联:
sudosystemctl restart iwd重启后用networkctl status wlan0(把 wlan0 换成自己的无线接口名)确认:
- State 是 routable / configured
- Wi-Fi access point 显示目标 SSID
- 拿到了正确的 IPv4 地址
再统计一次改完之后的SA Query timed out数量,应该归零,推流服务也不再刷Network is unreachable。
备选方案
如果不方便改路由认证,还有两条路:
- 让这台设备改连 2.4G 的 SSID。多数家用光猫的 2.4G 默认就是 WPA/WPA2-PSK,没有 SAE 问题,推单声道语音带宽绰绰有余,代价只是网速变慢,对录音零影响
- 在本机无线后端侧微调 SAE/PMF 参数缓解,但属于兼容问题,效果不保证,不如直接绕开 SAE 来得干净
排障小结
遇到 Linux 无线反复掉线,先别默认是信号或省电:
- 抓
journalctl -u iwd(或 wpa_supplicant 对应日志)看断开原因 - 看到
SA Query timed out这类字样,往 WPA3-SAE / PMF 兼容方向查 - 光猫找不到独立 PMF 开关时,直接把认证降到 WPA/WPA2-PSK 绕开 SAE
- 路由改完,记得清理本机保存的 SAE 残留再重启无线后端
稳定的家庭内网,比追最新加密协议更重要。