WireGuard + Nginx 中转架构实战(二)WireGuard 中转机 ↔ 源站实战配置

一、目标与使用场景

本篇文章解决一个明确的问题:

在中转机与源站之间,建立一条稳定、安全、可长期运行的 WireGuard 内网通道

设计目标:

  • 中转机是唯一公网入口
  • 源站不暴露任何公网端口
  • 回源流量全部走 WireGuard
  • 服务器重启后 自动恢复连接
  • 配置简单、可排错、可维护

二、网络规划(先规划,后动手)

推荐一对一的最小可控规划:

角色 WireGuard IP
中转机 10.100.0.1/24
源站 10.100.0.2/32
WireGuard 端口 51820/UDP

设计原则:

  • 中转机使用 /24,方便以后扩展
  • 源站使用 /32最小授权
  • WireGuard 只做“点对点内网”,不做复杂路由

三、安装 WireGuard(两台机器都做)

apt update
apt install -y wireguard

确认版本:

wg --version

四、生成密钥(安全、标准写法)

:warning: 这一段是很多教程没写清楚的地方

:one: 设置安全的文件权限掩码

umask 077

含义:

  • 新创建文件权限为 600
  • 只有 root 可读写
  • 避免私钥被误读(非常重要)

:two: 生成密钥(推荐固定路径)

中转机 执行:

wg genkey | tee /etc/wireguard/server.key | wg pubkey > /etc/wireguard/server.pub

源站 执行:

wg genkey | tee /etc/wireguard/client.key | wg pubkey > /etc/wireguard/client.pub

生成结果:

/etc/wireguard/server.key   # 中转机私钥
/etc/wireguard/server.pub   # 中转机公钥

 cat /etc/wireguard/server.key
 cat /etc/wireguard/server.pub

/etc/wireguard/client.key   # 源站私钥
/etc/wireguard/client.pub   # 源站公钥

 cat /etc/wireguard/client.key
 cat  /etc/wireguard/client.pub 

检查权限(必须是 600):

ls -l /etc/wireguard/*.key

五、中转机配置(wg0.conf)

路径:

/etc/wireguard/wg0.conf

内容示例:

[Interface]
Address = 10.100.0.1/24
ListenPort = 51820
PrivateKey = <中转机 server.key 内容>
SaveConfig = false

[Peer]
PublicKey = <源站 client.pub 内容>
AllowedIPs = 10.100.0.2/32

说明:

  • AllowedIPs = 对端允许访问的 IP
  • 这里表示:源站只允许使用 10.100.0.2

六、源站配置(wg0.conf)

[Interface]
Address = 10.100.0.2/32
PrivateKey = <源站 client.key 内容>
SaveConfig = false

[Peer]
PublicKey = <中转机 server.pub 内容>
Endpoint = 中转机公网IP:51820
AllowedIPs = 10.100.0.0/24
PersistentKeepalive = 25

关键点:

  • PersistentKeepalive = 25 → 防止 NAT / 云厂商回收 UDP 映射
  • AllowedIPs = 10.100.0.0/24 → 允许访问整个 WireGuard 内网

七、启动 WireGuard(避免残留接口)

:one: 启动前先清理(防止残留)

ip link delete wg0 2>/dev/null

:two: 启动接口

wg-quick up wg0

:three: 查看状态(非常重要)

wg show

正常状态应看到:

  • latest handshake
  • transfer: xx received, xx sent

八、验证内网连通性

中转机 执行:

ping 10.100.0.2

成功即说明:

:white_check_mark: WireGuard :white_check_mark: 密钥 :white_check_mark: AllowedIPs 全部正确


九、设置 systemd 开机自启(生产必做)

中转机 & 源站 都执行:

systemctl enable wg-quick@wg0

说明:

  • 第一次 enable:可能显示 Created symlink
  • 已经 enable:可能无任何输出 :backhand_index_pointing_right: 都代表成功

验证是否已启用:

systemctl is-enabled wg-quick@wg0

输出应为:

enabled

查看运行状态:

systemctl status wg-quick@wg0

看到:

Active: active (exited)

:backhand_index_pointing_right: 这是正常状态,不是异常


十、重启后的最终自检(非常推荐)

服务器重启后,检查这 3 条即可:

ip a show wg0
wg show
ping 10.100.0.2

全部正常 = 隧道长期稳定运行


十一、常见问题与排坑总结

问题 原因
Required key not available AllowedIPs 写反
wg0 already exists 接口残留
能 up 但不通 公钥/私钥对错
过一段时间断 没设 PersistentKeepalive
enable 没输出 已启用(正常)

十二、小结

到这里你已经完成了一条:

  • :white_check_mark: 自动启动
  • :white_check_mark: 权限安全
  • :white_check_mark: 可扩展
  • :white_check_mark: 可维护

的 WireGuard 中转通道。

后续所有内容(Docker 回源 / Nginx / Discourse)都建立在这一条隧道之上