WireGuard 公网 Peer 打通两个测试环境的私网

Shi Yi2026/8/18fixvpnwireguard

目前公司有两个测试环境,简单理解为:一个产品一个测试环境,服务器在阿里云的不同地域,所以他们的私网是不互通的。

有一个测试环境的域名直接解析到了它那个地域的私网 IP,从另一个环境根本访问不到。

之前的同事虽然在一台服务器上起过 VPN,但实在不好用 —— 不能两个人同时连,平常还得连着好几个 VPN 才能访问全部测试环境。

我们依旧是熟悉的 WireGuard,熟悉的 CentOS 7

INFO

之前讲过怎么在 CentOS 7 上装 WireGuard,这里就不重复了:VPN怎么又双叒叕掉了,我直接换方案 - WireGuard 部署实录

那个老 VPN 就是之前修了一整天的 L2TP:修公司的VPN修了一整天


📌 网络拓扑

先看整体结构:

Windows 客户端(10.66.0.2)
        |
        v  原有用户 VPN:wg0
中心服务器
  公网 EIP:<中心EIP>
  私网 IP:172.29.216.127
  wg0:10.66.0.1/24
  wg-site:10.68.0.1/30,UDP 51821
        |
        v  公网 WireGuard Peer 隧道
目标服务器
  公网 EIP:<目标服务器EIP>
  私网 IP:172.18.225.251
  wg-site:10.68.0.2/30,UDP 51821
        |
        v
目标业务站点:test.example.com -> 172.18.225.251

访问路径一句话:

10.66.0.2 -> <中心EIP> -> <目标服务器EIP> -> 172.18.225.251

WARNING

<目标服务器EIP>172.18.225.251同一台目标服务器的公网 EIP 和私网 IP,并非两台机器。

规划好的网段如下:

项目网段 / 地址
原有用户 VPN 网段10.66.0.0/24
中心服务器原有接口wg0 / 10.66.0.1
示例 Windows 用户10.66.0.2
站点隧道网段10.68.0.0/30
中心服务器新接口wg-site / 10.68.0.1
目标服务器新接口wg-site / 10.68.0.2
WireGuard UDP 端口51821
目标业务地址172.18.225.251/32

前置条件:

  • 中心服务器已运行原有用户 WireGuard 接口 wg0
  • 两台 ECS 均安装 wireguard 内核模块、wgwg-quick
  • 目标服务器 CentOS 7 使用外置 WireGuard 内核模块,不要求升级内核或重启服务器
  • 两台 ECS 分别有可用公网 EIP
  • 两端阿里云安全组放行 UDP 51821(测试阶段可临时允许 0.0.0.0/0,成功后应仅允许对端 EIP)

🔑 密钥生成

两台服务器各执行一次

install -d -m 700 /etc/wireguard
umask 077
wg genkey | tee /etc/wireguard/site.key | wg pubkey > /etc/wireguard/site.pub
cat /etc/wireguard/site.pub

只交换 site.pub

DANGER

私钥 site.key 不可发送、不可写入文档、不可出现在任何聊天和截图里


🛠️ 中心服务器配置

文件:/etc/wireguard/wg-site.conf

[Interface]
Address    = 10.68.0.1/30
ListenPort = 51821
PrivateKey = <中心服务器 site.key 内容>

PostUp   = sysctl -w net.ipv4.ip_forward=1
PostUp   = iptables -I INPUT 1 -p udp --dport 51821 -j ACCEPT
PostUp   = iptables -I FORWARD 1 -i wg0 -o wg-site -s 10.66.0.0/24 -d 172.18.225.251/32 -j ACCEPT
PostUp   = iptables -I FORWARD 1 -i wg-site -o wg0 -s 172.18.225.251/32 -d 10.66.0.0/24 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

PostDown = iptables -D INPUT -p udp --dport 51821 -j ACCEPT
PostDown = iptables -D FORWARD -i wg0 -o wg-site -s 10.66.0.0/24 -d 172.18.225.251/32 -j ACCEPT
PostDown = iptables -D FORWARD -i wg-site -o wg0 -s 172.18.225.251/32 -d 10.66.0.0/24 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

[Peer]
PublicKey    = <目标服务器 site.pub 内容>
AllowedIPs   = 10.68.0.2/32, 172.18.225.251/32

TIP

中心服务器无需配置目标 Endpoint。目标服务器使用 PersistentKeepalive 主动连接后,中心会自动学习对端公网 endpoint。


🛠️ 目标服务器配置

文件:/etc/wireguard/wg-site.conf

[Interface]
Address    = 10.68.0.2/30
ListenPort = 51821
PrivateKey = <目标服务器 site.key 内容>

# 允许原有用户 VPN 访问本机业务地址
PostUp   = iptables -I INPUT 1 -i wg-site -s 10.66.0.0/24 -d 172.18.225.251/32 -j ACCEPT
PostDown = iptables -D INPUT -i wg-site -s 10.66.0.0/24 -d 172.18.225.251/32 -j ACCEPT

[Peer]
PublicKey           = <中心服务器 site.pub 内容>
Endpoint            = <中心EIP>:51821
AllowedIPs          = 10.68.0.1/32, 10.66.0.0/24
PersistentKeepalive = 25

WARNING

目标服务器的 AllowedIPs 必须包含 10.66.0.0/24,否则 Windows 客户端的回包送不回中心服务器。


⚙️ 安全组与启动

两台 ECS 的阿里云安全组放行:

  • 协议:UDP
  • 端口51821

建议验证后收紧来源:

入方向服务器允许来源
中心服务器<目标服务器EIP>/32
目标服务器<中心EIP>/32

两端分别启动新接口:

chmod 600 /etc/wireguard/wg-site.conf
systemctl enable --now wg-quick@wg-site

DANGER

不得重启原有用户接口,会中断所有 Windows 用户:

# 错误:会中断 Windows 用户
systemctl restart wg-quick@wg0

站点隧道需要重启时,只操作 systemctl restart wg-quick@wg-site


✅ 验证

两端分别执行:

wg show wg-site
ip -4 addr show wg-site
systemctl status wg-quick@wg-site --no-pager

成功标志:

latest handshake: ... ago
transfer: ... received, ... sent

中心服务器上验证到业务地址的连通性:

ip route get 172.18.225.251
ping -c 3 172.18.225.251
curl -v --connect-timeout 5 http://172.18.225.251/

预期路由:

172.18.225.251 dev wg-site src 10.68.0.1

🖥️ Windows 客户端配置

Windows 客户端继续连接原有中心服务器,只需给原有 Peer 增加测试环境的业务地址:

AllowedIPs = 172.18.225.251/32, 172.29.216.126/32, 172.29.216.127/32

保存后执行「停用 -> 启用」,测试:

ping 172.18.225.251
curl.exe -v http://172.18.225.251/
curl.exe -v http://test.example.com/

如果业务端口不是 80,例如 83:

curl.exe -v http://test.example.com:83/

🔍 故障排查

Destination Host Unreachable

若中心服务器显示:

From 10.68.0.1 Destination Host Unreachable
ping: sendmsg: Destination address required

说明路由已指向 wg-site,但没有 Peer endpoint,即尚未完成握手。执行:

wg show wg-site

若无 endpoint、latest handshake、收发流量,先检查公网 UDP 放行和公钥。

目标服务器只有发送流量

transfer: 0 B received, 5.78 KiB sent

说明目标服务器已向中心发握手包,但没收到回包。优先检查中心服务器的阿里云安全组 UDP 51821。

中心服务器抓包:

tcpdump -nn -i any udp port 51821

目标服务器触发新握手:

systemctl restart wg-quick@wg-site

判断:

  • 无 UDP 包:检查阿里云安全组、EIP、出口策略和端口配置
  • 有 UDP 包但无握手:检查双方 Peer 公钥是否互填
  • 有握手但网站不通:检查中心 FORWARD、目标服务器 INPUT、业务端口和服务监听地址

active (exited) 是否正常

正常wg-quick 创建网络接口后退出,systemd 通常显示:

Active: active (exited)

实际运行状态以 wg show wg-site、接口地址和握手状态为准。


📝 总结

日常检查清单:

wg show wg-site
ip route get 172.18.225.251
ss -lunp | grep 51821
tcpdump -nn -i any udp port 51821

安全建议:

  1. 每台服务器、每位用户使用独立密钥对
  2. /etc/wireguard 权限建议为 700,配置和私钥文件权限为 600
  3. 安全组验证后限制为固定对端 EIP
  4. Windows 客户端仅配置必要的 AllowedIPs,避免无意接管全部互联网流量

DANGER

若任何 WireGuard 私钥曾出现在聊天、工单、截图或代码仓库中,应立即轮换该密钥对。

Last Updated 8/18/2026, 3:51:14 PM