WireGuard 是目前最轻量、高效、安全的组网方案之一。但在实际配置过程中,常见的网络、防火墙、NAT 配置不正确,往往导致客户端能连接却无法访问网络。
本指南帮助你系统性排查 WireGuard 的监听端口、防火墙规则、NAT 配置与 IP 转发状态。
一、确认 WireGuard 服务器是否正在监听端口
执行:
sudo wg show
正常输出示例:
interface: wg0
listening port: 51820
如果看到:
- 网卡:
wg0 - 端口:
51820
说明 WireGuard 服务已正常监听。
如果没有看到端口,请检查:
- 是否启动 wg-quick
- 配置文件
/etc/wireguard/wg0.conf是否正确 - 是否被 SELinux / 防火墙阻挡
二、检查 iptables 防火墙规则是否正确
下面这些规则用于:
- 放行 WireGuard 端口
- 放行 wg0 虚拟网卡
- 启用 NAT,让客户端能访问互联网
(1)基础防火墙规则
sudo iptables -A INPUT -p udp --dport 51820 -j ACCEPT
sudo iptables -A INPUT -i wg0 -j ACCEPT
sudo iptables -A FORWARD -i wg0 -j ACCEPT
sudo iptables -A FORWARD -o wg0 -j ACCEPT
注意: 如你使用非默认端口,请修改
--dport 51820。
(2)启用 NAT 出口(让客户端能上网)
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
⚠ eth0 需要替换为你的实际外网接口
查看外网接口:
ip a
或:
ip -o -4 route show to default | awk '{print $5}'
(3)使用 UFW 管理防火墙时
若系统启用了 UFW,请额外执行:
sudo ufw allow 51820/udp
sudo ufw allow from 192.168.6.0/24
请按实际 WireGuard 网段自行调整 192.168.6.0/24。
三、iptables 规则详细解释
以下内容帮助你理解规则的作用,排查时可对照检查。
1. 允许 WireGuard 端口(51820)接收连接
sudo iptables -A INPUT -p udp --dport 51820 -j ACCEPT
作用:
- 允许客户端使用 UDP 51820 端口连接服务器
- 若你修改了服务器端口,需要对应调整
2. 允许来自 wg0 的流量进入本机
sudo iptables -A INPUT -i wg0 -j ACCEPT
作用:
- 放行通过 WireGuard 隧道来的数据
- 若缺失此规则,客户端访问服务器本机的服务会失败
3. 允许 WireGuard 客户端的流量被服务器转发至其他网络
sudo iptables -A FORWARD -i wg0 -j ACCEPT
作用:
- 放行进入 wg0 的数据,使其能被路由到局域网或互联网
4. 允许服务器将其他网络的数据返回给 wg0 客户端
sudo iptables -A FORWARD -o wg0 -j ACCEPT
作用:
- 放行服务器返回给客户端的数据
- 若缺失该规则,会造成“能连 VPN,但无法访问互联网或局域网”
5. 启用 NAT,让 WireGuard 客户端共享服务器的网络
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
作用:
- 让客户端使用服务器的 IP 上网
- 若缺失,会出现“可以 handshake,但无法访问外网”
四、持久化 iptables 规则
iptables 默认 重启会失效,请务必持久化。
方法 1:手动保存
sudo iptables-save > /etc/iptables.rules
在 /etc/rc.local 或 /etc/crontab 添加:
iptables-restore < /etc/iptables.rules
方法 2:使用 iptables-persistent(推荐)
sudo apt install iptables-persistent -y
sudo netfilter-persistent save
sudo netfilter-persistent reload
验证规则:
sudo iptables -L -v -n
sudo iptables -t nat -L -v -n
五、确保 IP 转发已启用
若 iptables 无误但仍无法访问互联网,问题可能出在 IP 转发未开启。
启用:
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
确认:
cat /proc/sys/net/ipv4/ip_forward
返回 1 即可。
六、检查客户端是否成功握手(handshake)
执行:
sudo wg show
检查:
- 是否有 latest handshake
- 是否有流量 transfer: x received / x sent
若无 handshake:
- 客户端 Endpoint 是否填写对?
- 你的公网 IP 是否被防火墙/ISP 阻挡?
- 服务器端口是否放行?
🏁 WireGuard 不通网的关键排查流程
1. wg show → 是否已监听端口?
2. iptables → 防火墙是否放行?
3. NAT → 是否设置 MASQUERADE?
4. FORWARD → 是否允许流量转发?
5. IP 转发 → 是否开启?
6. 客户端 → 是否 handshake?
只要按以上检查流程逐步排查,WireGuard 的常见连接与访问问题几乎都能快速解决。








