WireGuard通过外部LAN网络无法连接但热点/5G可正常工作的问题排查求助
根据你描述的情况,结合你更新的IPv4/IPv6相关发现,大概率是IPv6优先级冲突导致的问题,具体分析和解决思路如下:
核心问题推测
当客户端处于同时支持IPv4和IPv6的网络(比如邻居家的WiFi)时,WireGuard客户端会优先尝试通过IPv6连接你的服务器,但目前你的ISP还没激活IPv6,服务器端实际上没有可用的IPv6接入能力,所以握手直接失败;而纯IPv4网络(朋友家、你的5G/热点)下,客户端只能走IPv4路径,自然能正常连接。
具体排查与解决步骤
强制客户端使用IPv4连接
打开你的WireGuard客户端配置文件,检查Endpoint字段:- 如果是用域名(比如
your-domain.com:51820),尝试把它替换成服务器的公网IPv4地址+端口(比如123.123.123.123:51820),避免客户端解析到无效的IPv6地址。 - 同时检查
AllowedIPs配置,如果包含了IPv6网段(比如::/0),可以暂时去掉,只保留IPv4的路由规则(比如0.0.0.0/0),强制客户端所有流量走IPv4隧道。
- 如果是用域名(比如
清理服务器端残留的IPv6配置
因为你之前的modem和WireGuard支持双栈,重装后可能残留了IPv6相关配置:- 登录到你的PiVPN服务器,打开WireGuard主配置文件(路径通常是
/etc/wireguard/wg0.conf) - 检查
Address字段,如果包含IPv6地址(比如fdxx:xxxx:xxxx:xxxx::1/64),可以暂时注释掉这一行;同时确认ListenPort没有绑定到IPv6接口(默认是绑定所有接口,没问题,但如果有明确的ListenPort = [::]:51820,可以改成ListenPort = 51820) - 修改后重启WireGuard服务:
sudo systemctl restart wg-quick@wg0
- 登录到你的PiVPN服务器,打开WireGuard主配置文件(路径通常是
验证域名解析问题
在双栈网络的客户端上,用命令行执行nslookup your-wireguard-domain.com,如果返回了IPv6地址,说明你的域名还关联着旧的IPv6记录,需要去域名解析后台删除对应的AAAA记录,只保留A记录(IPv4)。检查客户端网络优先级
部分系统会默认优先使用IPv6,你可以在客户端调整网络优先级:- Windows:打开「网络和共享中心」→ 更改适配器设置 → 右键WiFi属性 → 找到「Internet协议版本6 (TCP/IPv6)」,取消勾选(临时测试用,之后可以改回)
- Linux:执行
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1临时禁用IPv6,测试是否能连接
再次确认端口转发
虽然你改了端口,但还是要确认新的ISP modem上的端口转发规则是针对IPv4的,并且正确映射到了WireGuard服务器的内网IPv4地址,同时modem的防火墙没有阻止51820端口(或者你修改后的端口)的入站UDP流量。
验证方法
当你调整完配置后,在双栈网络的客户端上连接WireGuard,然后在服务器端执行wg show,如果看到客户端的peer有最新的握手记录,说明问题解决了。
备注:内容来源于stack exchange,提问作者anarchy

