WireGuard 空闲后收不到数据?PersistentKeepalive 与 NAT 排查
WireGuard 空闲一段时间后,远端发起访问失败,而本机主动发送后又恢复,可以优先检查 NAT 或有状态防火墙的映射是否失效。PersistentKeepalive 用于在适用场景中维持这类状态;它不是提速开关,也不能修复错误密钥、路由或被阻断的 UDP。先确认故障确实由静默触发,再做保活对照。
作者:小仓 · 资料核对日期:2026-10-05
本文面向能够查看和管理自己 WireGuard 配置的读者,尤其是 NAT 后需要接收入站流量的设备。托管服务的字段不可随意改动,客户端菜单与配置导入方式应以安装版本为准。
空闲不可达与“隧道坏了”不是同一个判断
WireGuard 平时可以保持安静。官方快速入门说明,在 NAT 或防火墙后、又需要在长时间静默后接收入站连接时,可以使用持续保活;多数用户并不需要开启。WireGuard Persistent Keepalive 说明
先分别观察两种动作:远端主动访问 NAT 内设备的隧道地址,和该设备主动访问远端。只有前者在空闲后失败、后者触发后恢复,是值得调查映射状态的线索,但还不能单独证明某一台路由器的超时设置。
| 现象 | 优先核对的方向 |
|---|---|
| 从首次启动起一直不通 | Endpoint、UDP、密钥及路由 |
| 静默后远端访问失败,本机发起后恢复 | NAT/防火墙状态与持续保活 |
| 仅设备睡眠后失败 | 设备是否还有运行和发送能力 |
| 握手存在,只有某个目标不能访问 | AllowedIPs、目标服务与返回路径 |
比较协议的基本能力可看本站WireGuard、OpenVPN 与 Shadowsocks 的区别,不要把本题的单项现象扩大成协议性能排名。
第一步:建立一个受控的空闲测试
选自有或获准使用的远端设备,以及确实运行着的测试服务。记录网络类型、隧道地址、应用端口和成功请求时间;不要用一个本来不响应的目标判断恢复情况。
保持设备唤醒、当前网络不变,暂停会周期发请求的测试工具。静默一段时间后先从远端发起访问,记录结果,再从 NAT 后的设备主动发送一次,观察远端访问是否恢复。
每轮采用相同的等待时间,并重复一次。没有适用于所有家庭路由器或移动网络的统一超时值;教程中的等待时间只能是测试条件,不能当作运营商参数。
第二步:结合握手与数据计数
有 wg 工具和相应权限的 Linux 设备,可以查看特定接口的运行信息。wg0 是示例接口名,需替换成自己的接口:
sudo wg show wg0 latest-handshakes
sudo wg show wg0 transfer
sudo wg show wg0 persistent-keepalive
三项分别提供最近握手信息、接收/发送计数和有效保活设置。记录请求前后对应 peer 的变化;累计计数不是即时带宽,最近一次握手也不是整个目标应用的健康检查。wireguard-tools 的 wg 手册
WireGuard 的握手与空数据包具有不同计时机制,保活间隔不能直接解释成“每隔同样秒数重新握手”。空闲时握手时间较旧,单凭这一点不能判断设备已经离线。WireGuard 协议与计时机制
不要为收集信息公开整个配置或 dump 输出:它可能包含私钥和预共享密钥。通常只需分享脱敏后的时间、计数与错误;也应去除可以关联设备的标识。
第三步:把保活放在适用的 peer 上
对于处于 NAT 后、需要保留接收能力的设备,在它指向相关远端的 [Peer] 配置中核对该字段。下面只有字段示例,不是一份可直接导入的完整配置:
[Peer]
PersistentKeepalive = 25
官方给出的广泛适用参考间隔为 25 秒;设为 0 表示关闭,默认关闭。这个数字不是本站对你网络的实测结果,也无需给所有 peer 一律添加。官方快速入门的设置建议
修改前备份原配置,只改这一项,再通过客户端提供的正常应用方式使它生效;随后查看有效设置,重复前面的静默和入站测试。不要同时改 Endpoint、AllowedIPs、MTU 与 DNS,否则难以判断恢复来自哪一步。
结果怎样解释
| 保活前后对照 | 可以得出的有限结论 |
|---|---|
| 多次静默后入站访问由失败变为成功 | 保活与该条件下可达性改善有关 |
| 首次连接仍完全失败 | 应回到端点、UDP 与身份配置检查 |
| 握手与部分流量正常,单个服务失败 | 继续核对服务、路由和返回路径 |
| 锁屏/睡眠后仍失败 | 检查系统是否停止服务或网络活动 |
保活让设备定期发包,不能强迫睡眠系统持续工作;也无法让本来没有可用路径的两个端点自动可达。若“已连接却不能访问”涉及 Windows,可以继续按VPN 联网排查清单定位接入层。
常见问题
值越小,延迟越低吗?
它控制保活发送间隔,不是传输速度或延迟目标。无必要地缩短会增加通信,不能据此承诺更快;移动设备还应观察自己的后台与电量表现。
每次主动发包能恢复,是否已经定位根因?
这是一个可重复的行为线索,仍需排除网络切换、服务重启和路由变化。记录触发顺序比只保存“已连接”截图更有用。
测试记录模板
| 时间/网络 | 静默时长/设备状态 | 原保活值 | 远端先发结果 | 本机发送后结果/计数变化 |
|---|---|---|---|---|
| 待填写 | 待填写 | 待填写 | 待填写 | 待填写 |
保留修改前后的原始条件和恢复方法。只有在明确的场景中持续改善,才能把这一设置作为自己的有效配置,而不是对所有 WireGuard 用户的统一要求。
评论