一、目标与使用场景
本篇文章解决一个明确的问题:
在中转机与源站之间,建立一条稳定、安全、可长期运行的 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
四、生成密钥(安全、标准写法)
这一段是很多教程没写清楚的地方
设置安全的文件权限掩码
umask 077
含义:
- 新创建文件权限为
600 - 只有 root 可读写
- 避免私钥被误读(非常重要)
生成密钥(推荐固定路径)
在 中转机 执行:
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(避免残留接口)
启动前先清理(防止残留)
ip link delete wg0 2>/dev/null
启动接口
wg-quick up wg0
查看状态(非常重要)
wg show
正常状态应看到:
latest handshaketransfer: xx received, xx sent
八、验证内网连通性
在 中转机 执行:
ping 10.100.0.2
成功即说明:
WireGuard
密钥
AllowedIPs
全部正确
九、设置 systemd 开机自启(生产必做)
在 中转机 & 源站 都执行:
systemctl enable wg-quick@wg0
说明:
- 第一次 enable:可能显示
Created symlink - 已经 enable:可能无任何输出
都代表成功
验证是否已启用:
systemctl is-enabled wg-quick@wg0
输出应为:
enabled
查看运行状态:
systemctl status wg-quick@wg0
看到:
Active: active (exited)
这是正常状态,不是异常
十、重启后的最终自检(非常推荐)
服务器重启后,检查这 3 条即可:
ip a show wg0
wg show
ping 10.100.0.2
全部正常 = 隧道长期稳定运行
十一、常见问题与排坑总结
| 问题 | 原因 |
|---|---|
Required key not available |
AllowedIPs 写反 |
wg0 already exists |
接口残留 |
| 能 up 但不通 | 公钥/私钥对错 |
| 过一段时间断 | 没设 PersistentKeepalive |
| enable 没输出 | 已启用(正常) |
十二、小结
到这里你已经完成了一条:
自动启动
权限安全
可扩展
可维护
的 WireGuard 中转通道。
后续所有内容(Docker 回源 / Nginx / Discourse)都建立在这一条隧道之上。