WireGuard点到站点VPN连接成功后无法访问远端服务器的排查与解决
WireGuard分流模式VPN连通性问题排查与解决
问题背景
目标:搭建分流模式点到站点WireGuard VPN,让本地Windows PC访问远端10.0.0.0/24子网的云资源。
网络拓扑:
- 远端
10.0.0.0/24子网有两台Debian12服务器:Server1(WireGuard服务器,10.0.0.249/24,公网开放80/tcp、51820/udp)、Server2(测试服务器,10.0.0.248/24) - 远端防火墙允许
10.0.0.0/24和10.0.1.0/24子网的所有IPv4流量,其余仅允许出站互联网流量 - VPN服务器通过linuxserver/wireguard镜像配合WireGuard-UI的docker-compose部署,客户端导入配置后连接成功,路由表已指向WireGuard接口,但ping/访问Server1、Server2均超时
排查与解决步骤
1. 开启宿主机IP转发
Docker部署的WireGuard需要宿主机开启IP转发,否则流量无法从VPN子网转发到本地子网:
- 登录Server1执行:
sysctl net.ipv4.ip_forward - 若返回
net.ipv4.ip_forward = 0,临时开启:sysctl -w net.ipv4.ip_forward=1 - 永久开启:编辑
/etc/sysctl.conf,添加或修改:
执行net.ipv4.ip_forward=1sysctl -p生效。
2. 验证iptables转发规则
检查WireGuard服务器的wg0.conf中PostUp/PostDown脚本是否包含转发规则,确保流量能在VPN接口和物理网卡间转发:
- 确认配置中有类似规则:
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE - 执行以下命令验证规则生效:
iptables -L FORWARD -n iptables -t nat -L POSTROUTING -n
3. 添加远端服务器回程路由
Server2需要知道如何将流量发回VPN客户端所在的10.0.1.0/24子网:
- 登录Server2,查看路由表:
ip route show - 若无
10.0.1.0/24路由,临时添加:ip route add 10.0.1.0/24 via 10.0.0.249 dev eth0 - 永久添加(Debian12默认用netplan):编辑
/etc/netplan/00-installer-config.yaml,添加:
执行routes: - to: 10.0.1.0/24 via: 10.0.0.249netplan apply生效。
4. 检查Windows客户端防火墙
Windows自带防火墙可能拦截VPN接口流量:
- 临时关闭Windows Defender防火墙测试,若能ping通则调整规则,允许WireGuard Tunnel接口的入站/出站ICMP、TCP、UDP流量。
5. 确认WireGuard连接状态
- 在Server1执行:
查看客户端的wg show wg0latest handshake是否有更新,确认连接真实建立。 - 在Windows客户端执行:
同样验证握手状态。wg show
总结
最常见的问题是宿主机IP转发未开启、远端服务器缺少回程路由或iptables转发规则未配置,按上述步骤逐一排查即可解决。
内容的提问来源于stack exchange,提问作者SepSol
相关产品推荐
相关产品推荐

