本文目录导读:

针对 QuickQ 的 WireGuard 对等节点(Peers)失联的问题,通常与网络环境、配置一致性、防火墙规则或协议特性有关,以下是系统性的排查步骤和常见原因分析:
核心排查步骤
1 检查 WireGuard 服务状态(两端)
- 服务是否运行:在 QuickQ 和 Peer 端检查 WireGuard 接口状态。
- 命令:
wg show或systemctl status wg-quick@<接口名>。 - 如果服务未运行,启动并设置开机自启。
- 命令:
- 接口是否 UP:
ip link show wg0,确保状态不是DOWN。
2 验证关键配置项(QuickQ 端 & Peer 端)
- 私钥与公钥是否匹配:
- 检查每个 Peer 的配置中,
PrivateKey是否正确,PublicKey是否确实是该 Peer 的私钥对应的公钥。最易犯的错误:将 QuickQ 自身的公钥写在了 Peer 的公钥位置。
- 检查每个 Peer 的配置中,
- Endpoint 地址与端口:
- Peer 是客户端(如手机、移动设备),QuickQ 作为服务端,Peer 端的 Endpoint 必须填写 QuickQ 的公网 IP/域名和端口。
- Peer 是另一台服务器,两端的 Endpoint 都可能需要填写(取决于谁主动发起连接)。
- 端口冲突:检查 QuickQ 的监听端口(默认 51820)是否被其他进程或防火墙占用。
- AllowedIPs 规则:
- 这是最常见的失联原因。
- QuickQ 端的 Peer 配置中,
AllowedIPs决定了哪些流量要发往该 Peer。 - Peer 端的
AllowedIPs决定了哪些目的 IP 的流量要通过隧道。 - 规则冲突:如果两个 Peer 的
AllowedIPs有重叠(例如都包含0.0.0/0),WireGuard 会优先使用第一个匹配的规则,导致第二个 Peer 的流量(包括握手包)被错误路由或丢弃。 - 建议:对于服务端(QuickQ),每个 Peer 的
AllowedIPs应该是该 Peer 的隧道 IP(0.0.2/32),不要写0.0.0/0。
3 检查网络连通性与防火墙
- UDP 封锁:WireGuard 使用的是 UDP 协议(默认 51820 端口),部分网络(如企业防火墙、校园网、运营商 NAT 环境)可能禁止或限制 UDP 流量。
- 排查方法:从 Peer 端 telnet 或 nc 测试 QuickQ 的 UDP 端口是否可达(
nc -uz <QuickQ_IP> 51820)。
- 排查方法:从 Peer 端 telnet 或 nc 测试 QuickQ 的 UDP 端口是否可达(
- 防火墙规则:
- QuickQ 所在设备(路由器/服务器)的防火墙必须放行 UDP 51820 端口(入站)。
- 检查 iptables、nftables 或云安全组规则。
- NAT 穿透问题:Peer 在 NAT 后(如家庭宽带、手机热点),而 QuickQ 也在 NAT 或无法直接访问的环境(如无公网 IP),需要配置 UDP 打孔 或使用 STUN/TURN 中继,QuickQ 如果作为服务端,需要有公网 IP 或端口映射。
4 查看 WireGuard 日志
- 启用日志:在 QuickQ 上运行
wg-quick up wg0查看启动日志,或查看系统日志:journalctl -u wg-quick@wg0(Systemd 环境)dmesg | grep wireguard
- 重点关注:
- 是否有
Noise invalid handshake(无效握手,通常是公钥错误)。 - 是否有
Peer is not responding(对方无响应,可能是网络不通或防火墙屏蔽)。 - 是否有
Packet dropped: no matching peer(没有匹配的对等体,通常是AllowedIPs配置错误)。
- 是否有
常见具体场景与解决方案
| 场景 | 表现 | 根本原因 | 解决方案 |
|---|---|---|---|
| 手机端连接正常,但 QuickQ 看不到状态 | 手机能上网,但 QuickQ 上 wg show 显示 Peer 一直没握手。 |
手机端没有向 QuickQ 发起连接请求。 | 检查手机端的 Endpoint 是否填写了 QuickQ 的公网 IP/域名。 |
| 双方都能 ping 通隧道 IP,但几分钟后断开 | 连接不稳定,周期性失联。 | WireGuard 默认无保活机制,过长的静默期导致 NAT 网关关闭了端口映射。 | 在客户端(位于 NAT 后的 Peer)配置 PersistentKeepalive = 25(每 25 秒发一个空包)。 |
| QuickQ 作为服务端,多个客户端中只有一个能通 | 部分 Peer 失联,部分正常。 | AllowedIPs 配置冲突,所有 Peer 都包含了 0.0.0/0。 |
服务端每个 Peer 只分配其隧道 IP(如 0.0.2/32、0.0.3/32)。客户端按需配置路由。 |
| 新加入的 Peer 一直握手失败 | 配置无误,但日志显示握手包被丢弃或无回复。 | 公钥/私钥粘贴错误(如含多余空格、换行符),或 PreSharedKey(预共享密钥)不匹配。 |
重新生成并粘贴密钥,确保无格式错误,使用 wg genkey 在新环境中生成并复制。 |
| QuickQ 重启后所有 Peer 失联 | 重启前正常,重启后长时间无法连接。 | WireGuard 接口需要手动恢复,或防火墙规则重启后未加载。 | 确保 wg-quick@wg0 服务已启用自启。systemctl enable wg-quick@wg0。 |
快速诊断命令(在 QuickQ 上执行)
# 1. 查看当前所有 Peer 的状态(最新握手指时间) wg show # 2. 查看接口详细信息(包括配置的对等体信息) ip link show wg0 ip addr show wg0 # 3. 查看系统日志中与 wireguard 相关的错误 dmesg | grep -i wireguard | tail -20 # 4. 测试从 QuickQ 到 Peer 的 UDP 端口是否可达(假设 Peer 是公网可达的) # Peer 也配置了 WireGuard,可以用这个测试双向 UDP nc -uz <Peer_公网IP> <Peer_端口> # 5. 检查防火墙是否放行 UDP 端口 iptables -L -n -v | grep 51820
最终建议与工作流
- 从最基本配置开始:只配置一个 Peer(如手机),使用最简单的
AllowedIPs(服务端只填/32,客户端只填0.0.0/0用于全流量代理)。 - 逐步增加复杂性:当单个 Peer 稳定后,再添加第二个。
- 注意时间同步:WireGuard 依赖系统时间进行密钥协商,确保 QuickQ 和 Peer 的 NTP 时间同步(误差超过几分钟会导致握手失败)。
- 区分客户端与服务端角色:
- 服务端(QuickQ):需要公网 IP 或端口映射,
ListenPort固定,无需PersistentKeepalive(因为它是被连接方)。 - 客户端:需要配置
Endpoint(指向 QuickQ 公网 IP),建议开启PersistentKeepalive。
- 服务端(QuickQ):需要公网 IP 或端口映射,
如果以上步骤全部检查无误但仍失联,请提供:
- QuickQ 上
wg show的输出(隐藏私钥)。 - 客户端配置(隐藏私钥和公钥)。
- 网络拓扑(QuickQ 是否有公网 IP,是否在 NAT 后,客户端是手机还是服务器)。
这将有助于更精确地定位问题。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。