WireGuard 配完 ping 不通?手把手排查 AllowedIPs 与密钥
WireGuard 以配置简洁著称,但『配完却不通』的案例比比皆是。它不像传统 VPN 有详细协商日志,问题多半藏在 AllowedIPs、密钥、持久保活和防火墙里。下面按排查顺序一步步来。
一、先用 wg show 看握手是否发生
- 执行 wg show,重点看 latest handshake 字段。若一直为空,说明根本没建立握手,问题在连通性或公钥。
- 看 transfer 收发字节。若只有发没有收,说明对端没回包,通常是 AllowedIPs 或路由问题。
- 确认两端 ListenPort 一致且服务端端口在防火墙已放通 UDP。
二、核对密钥与对端配置
- 每个 peer 的 PublicKey 必须是对端的私钥对应的公钥,常见错误是填成了自己的公钥。
- 服务端 [Peer] 里的 PublicKey 应来自客户端的私钥匙对,别把客户端公钥和服务端公钥搞混。
- 确认 PrivateKey 未被截断,复制时少了末尾字符会导致握手静默失败。
三、AllowedIPs 是通断的关键
- 客户端 AllowedIPs 若只写对端隧道 IP(如 10.0.0.1/32),则只能访问该 IP;要全流量走隧道需写 0.0.0.0/0。
- 服务端 AllowedIPs 应写客户端隧道 IP(如 10.0.0.2/32),写错会导致回包不认。
- Linux 上确认 wg-quick 已自动添加了路由;用 ip route 验证目标网段指向 wg 接口。
四、NAT 后的持久保活
- 客户端在 NAT 后面时,务必加 PersistentKeepalive = 25,否则服务端发来的包会被 NAT 表丢弃。
- 检查中间防火墙/UDP 超时,部分运营商对 UDP 空闲连接回收很快,keepalive 能保活。
五、防火墙与 IP 转发
- 服务端确认 net.ipv4.ip_forward=1 已开启,否则转发不了。
- 用 iptables -A FORWARD 或 nftables 放通 wg 接口转发,并做 MASQUERADE 出网。
技术总结:WireGuard 不通先看 latest handshake,再看 AllowedIPs 与密钥配对。NAT 后记得 PersistentKeepalive,服务端别忘了开 ip_forward 和转发规则。