组网神器WireGuard安装与配置问题检查

0
76

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 的常见连接与访问问题几乎都能快速解决。

发布回复

请输入评论!
请输入你的名字