WireGuard 已连接却无法上网?专家级排查与快速修复指南

真实场景:连上了 WireGuard,却无法访问外网

你打开客户端,显示已连接,Peer 也在线,甚至能 ping 到对端内网地址,但浏览器打不开网页、梯子工具提示“无网络”,这种情况常见且令人抓狂。本文从原理、常见原因、排查流程和快速修复策略逐一展开,帮助技术爱好者在 30–60 分钟内定位并解决大多数“已连接但无网”的问题。

先理解一个关键链路

WireGuard 的连通性至少依赖于三层关系:本地网络栈(接口与路由)、加密隧道(对等端握手与密钥)、以及远端路由/防火墙策略。只要任一环节配置或策略异常,就可能出现“显示已连接但无法上网”的情况。

最简化的检查思路

把问题拆成三步问:接口是否正常?路由是否正确?远端是否允许转发并有有效出口?按顺序排查通常能快速缩小范围。

常见成因与直观表现

下面按症状分组,给出直观的成因与快速判断方法。

1. 本地路由冲突或缺失

表现:客户端可以访问对端内网(例如内网服务器),但无法访问公网或某些目标 IP。原因通常是默认路由未通过 WireGuard 接口,或路由被本地策略覆盖。部分系统在启动后会自动恢复默认路由,导致隧道建立时未获得期望路由。

2. AllowedIPs 配置不匹配

表现:只在访问特定子网时通畅,其他请求无法走隧道。AllowedIPs 在客户端决定哪些流量发往隧道,服务端的 AllowedIPs 决定哪些对端路由如何转发。设置为单个子网或漏写 0.0.0.0/0 会导致无法走全局代理或反之。

3. 服务端未启用 IP 转发或 NAT

表现:客户端的请求达到了服务端(可见流量/握手),但服务端不把流量推到互联网。Linux 服务器若未启用 net.ipv4.ip_forward,或未配置 SNAT/MASQUERADE,会阻止客户端访问外网。

4. 防火墙规则阻断

表现:握手正常,但 TCP/UDP 会话被中断或被拒绝。服务器端或中间链路(VPC 安全组、云厂商 ACL、本地防火墙)可能阻止 WireGuard 隧道传出的流量或特定目的端口。

5. MTU 与分片问题

表现:大文件或 TLS 连接无法建立,加载网页卡住。WireGuard 报文被封装后包长增加,若 MTU 未相应调整,会导致分片丢包或 MSS 问题,表现为只在小包或 UDP 下可用。

6. DNS 不可用

表现:能 ping IP(如 8.8.8.8),但域名无法解析。客户端可能未使用隧道内的 DNS,或远端 DNS 被防火墙拦截。

逐步排查清单(按推荐顺序)

下面的步骤按从本地到远端的逻辑组织,便于快速缩小问题范围。

步骤 1 — 验证握手与基本连通性

确认客户端与服务端已交换密钥并建立握手。若握手失败,先解决密钥、端口和 NAT 问题;若握手成功,继续下一步。

步骤 2 — 测试对端内网与公网 IP

尝试 ping 服务端的内网隧道地址(例如 10.x.x.x)以及一个公网 IP(如 8.8.8.8)。能 ping 内网且不能 ping 公网,说明隧道本身有效,但出口或路由有问题;能 ping 公网但浏览器不能访问则可能为 DNS 问题。

步骤 3 — 检查本地路由表与默认路由

确认系统路由表中,目标流量是否指向 WireGuard 接口。注意操作系统在 VPN 连接后可能不会自动修改默认路由,或存在更高优先级的路由前缀覆盖。

步骤 4 — 查看 AllowedIPs 配置

检查客户端与服务端的 AllowedIPs:客户端若没有包含 0.0.0.0/0,默认流量不会通过隧道;服务端若为单个 IP 绑定,可能无法处理来自多个客户端的流量。

步骤 5 — 确认服务端 IP 转发与 NAT

在服务器上确认 IP 转发已启用(内核参数)并存在相应的 SNAT/MASQUERADE 规则,确保来自 WireGuard 子网的流量被替换为服务器公网 IP 后发出。

步骤 6 — 检查防火墙和云安全组

逐条审查防火墙规则,包括 INPUT/FORWARD/OUTPUT 链。云环境下额外检查安全组与网络 ACL,确保允许 WireGuard 端口(一般 UDP)和转发后的出站流量。

步骤 7 — 排查 MTU 与分片问题

尝试减小接口 MTU 或客户端的 MSS(TCP 最大报文长度),观察大文件或 TLS 会话是否恢复。MTU 问题常造成页面卡住或加载失败。

步骤 8 — 验证 DNS

直接尝试解析域名与访问 IP 地址,确认是否为 DNS 引起。若 DNS 在隧道内不可达,可以在客户端指定隧道内的 DNS 或使用可信的公共 DNS。

案例演练:一个真实故障与修复过程

某用户反馈:显示已连接且能访问内网 NAS(10.10.0.5),但无法访问外网。排查过程如下:

1) 按步骤 2,ping 8.8.8.8 不通;2) 检查路由表,发现默认路由仍指向本地网卡而非 WireGuard;3) 客户端配置显示 AllowedIPs=0.0.0.0/0,但本地策略未替换默认路由;4) 强制添加了指向 WireGuard 接口的默认路由后,公网访问恢复。根本问题是客户端的网络管理器在连接后未正确处理路由优先级。

快速修复捷径(常见场景)

以下是面对常见情形可尝试的“快刀”方法:

  • 默认路由问题:临时添加默认路由指向 WireGuard 接口,确认可行后调整客户端配置以持久化该路由策略。
  • 服务端无转发:在服务器上开启 IP 转发并添加 MASQUERADE 规则,让客户端流量可走公网。
  • DNS 问题:在客户端指定可用的 DNS(隧道内或公有 DNS),并测试域名解析。
  • MTU 问题:把接口 MTU 调低 20–40 字节测试,观察是否改善。
  • 防火墙拦截:短时间允许 WireGuard 子网通过 FORWARD 链以排除规则干扰,再收紧规则。

避免复发的配置建议

为减少再次遇到“已连接但无网”的概率,可以采取以下常规实践:

  • 在服务端统一负责 NAT 和转发,并记录必要的防火墙规则。
  • 在客户端配置明确的路由策略(0.0.0.0/0 或细分子网),并处理好本地网络管理器与 WireGuard 的交互。
  • 为不同用途设定不同的 AllowedIPs(如只访问内网 vs 全流量代理),避免误操作。
  • 把 MTU 和 MSS 作为部署验证项,尤其是当隧道穿越移动网络或双层 NAT 时。
  • 及时监控握手状态与流量统计,结合日志快速定位异常。

结论

“已连接但无法上网”通常不是单一原因,而是本地路由、AllowedIPs、服务端转发/NAT、防火墙或 MTU 等因素相互作用的结果。按从本地到远端、从握手到路由再到转发的顺序系统排查,能在较短时间内定位并修复问题。掌握这些要点后,你会发现 WireGuard 的稳定性与灵活性远超同类方案,只需把链路上的每一环都配置好即可。

© 版权声明
THE END
喜欢就支持一下吧
分享
评论 抢沙发

请登录后发表评论

    暂无评论内容