Linux 上的 WireGuard 服务器设置(wg0、NAT、对等节点)

12 分钟阅读 - 2026年6月22日

hero section cover
目录
  • 何时使用 WireGuard 服务器
  • 服务器配置
  • 添加和移除对等方
  • 故障排除
  • 密钥轮换与预共享密钥
分享

Linux 系统 WireGuard 服务器的实用配置指南:密钥、wg0.conf、NAT、使用 syncconf 进行对等节点管理,以及系统管理员实际使用的故障排除命令。

当您希望私下访问托管基础设施,同时又不将管理端口暴露在公共互联网上时,请运行 WireGuard 服务器。它采用公钥认证,自 Linux 5.6 内核起便内置于内核中,且一旦启动便不会干扰系统运行。本文介绍了何时使用 WireGuard 服务器、如何启动 wg0,以及如何确保对等节点在日常运行中保持正常工作。

何时使用 WireGuard 服务器

三种模式涵盖了大多数部署场景:远程访问、服务器间连接以及站点间路由。

对于远程访问,请在VPS或专用主机上运行服务器,并将管理流量通过隧道路由。将 AllowedIPs 每个对等节点指向私有管理子网(例如 10.0.0.0/24),这样只有针对内部系统的流量才会使用隧道。其余所有流量仍通过用户的本地连接传输。如果用户从家庭或移动网络连接,请在 PersistentKeepalive = 25 ,以防止 NAT 会话被中断。

对于服务器间连接,请将 AllowedIPs 窄。通常只需一个 /32 或一个较小的后端子网。这样可以避免将无关流量拉入隧道,并保持路由的可预测性。

站点间连接则有所不同。WireGuard 主机充当子网之间的网关,因此必须启用 IP 转发,且 NAT 规则必须将回程流量发送到正确的接口。

模式AllowedIPs 范围最适合配置复杂度
远程访问私有子网,例如 10.0.0.0/24管理员和开发人员访问权限
服务器到服务器特定 IP 或后端子网点对点主机链接低至中
站点到站点整个远程局域网,例如 /24网关到网关路由中至高
专用服务访问仅限内部子网(分流隧道)后端服务隔离中等

服务器配置

该服务器保存私钥,默认监听 UDP 51820 ,并终止隧道。上述三种模式均可采用相同的基准配置。

密钥和 wg0.conf

生成服务器密钥对:

wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key

保护私钥安全:

sudo chmod 600 /etc/wireguard/server_private.key

私钥保留在服务器上。公钥则是您提供给对等节点的。

创建 /etc/wireguard/wg0.conf:

[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = <SERVER_PRIVATE_KEY>
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o <PUBLIC_IFACE> -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o <PUBLIC_IFACE> -j MASQUERADE
 
[Peer]
PublicKey = <CLIENT_PUBLIC_KEY>
AllowedIPs = 10.8.0.2/32

查找要将流量转入的出站接口 <PUBLIC_IFACE>

ip -o -4 route show to default | awk '{print $5}'

转发、防火墙和NAT

打开监听端口:

sudo ufw allow 51820/udp

通过在 /etc/sysctl.conf:

net.ipv4.ip_forward = 1

无需重启即可应用:

sudo sysctl -p

PostUpPostDownwg0.conf 中的和两行代码会在接口启用或停用时添加或移除 NAT 伪装规则。如果没有这两行代码,来自 LAN 的返回流量将无法返回对等端。

启动隧道

wg-quick 这一操作同时处理了接口、路由以及 PostUp/PostDown 挂钩:

sudo wg-quick up wg0

若要在重启后自动启动,请启用 systemd 单元:

sudo systemctl enable --now wg-quick@wg0

使用以下命令检查状态:

sudo wg show

最近的 latest handshake 行可确认隧道正在运行。如果该行内容过时或为空,请检查防火墙、双方的密钥以及对端的 AllowedIPs.

添加和移除对等方

每个对等方都需要自己的密钥对。请在客户端生成密钥对,然后将对等方的公钥添加到 wg0.conf[Peer] 块中,并添加一个 AllowedIPs 条目,用于分配其隧道 IP。

使用 /32 配置单个设备:

AllowedIPs = 10.8.0.3/32

这样可以防止一个对等方占用分配给另一个对等方的地址。对于分流隧道访问,仅列出应通过隧道传输的私有子网,例如 AllowedIPs = 10.8.0.0/24.

应用配置更改而不中断活动会话:

sudo wg syncconf wg0 <(wg-quick strip wg0)

删除对等节点的方法与此相同。删除其 [Peer] block 块,并 wg0.conf 并再次运行 syncconf

故障排除

如果对等方已连接但无法访问对端任何资源,原因通常有以下四种之一:

  • IP转发功能已关闭
  • 缺少NAT伪装规则
  • NAT规则中的出站接口有误
  • AllowedIPs 未包含目标地址

检查转发设置:

cat /proc/sys/net/ipv4/ip_forward

应返回 1。如果返回 0,则表示 sysctl 更改未生效或未被保存。

检查 NAT 规则和出站接口:

sudo iptables -t nat -L POSTROUTING
ip route get 1.1.1.1

第二个命令会显示实际的出站接口名称,例如 ens3, enp1s0,或 eth0。该名称必须与 MASQUERADE 规则中的接口名称一致。

如果握手过程本身缺失,请检查 UDP 51820 在防火墙及任何上游服务商处是否已开放,并确保双方拥有对方的正确公钥。

对于位于会丢弃空闲 UDP 会话的住宅或移动 NAT 后方的对等方,请在 PersistentKeepalive = 25

密钥轮换与预共享密钥

对于持续运行数月的隧道,建议每年左右轮换一次密钥。生成新的密钥对,更新两端,并使用 wg syncconf。切勿在两个对等节点间重复使用同一私钥,否则会导致路由冲突并中断两者之间的数据传输。

若要在公钥认证基础上增加额外安全层,请为每个对等方添加一个预共享密钥:

wg genpsk

将结果添加为 PresharedKey = <PSK> 添加到 [Peer] 块中。WireGuard 会将预共享密钥(PSK)混入握手过程中,因此即使攻击者以某种方式获取了其中一个非对称密钥,若没有该密钥,仍无法解密流量。

日常实用命令:

命令用途
wg show对等节点、握手、流量计数器
wg show wg0 transfer字节计数器用于 wg0
wg show all dump用于监控脚本的机器可解析输出
wg syncconf wg0 <(wg-quick strip wg0)在不终止会话的情况下应用配置更改
wg genpsk生成预共享密钥

如果您需要一个稳定且可从互联网访问的主机来终止 WireGuard 隧道并将私有流量路由到您的基础设施中,不妨看看 FDC 的不限流量 VPS 套餐

博客

本周特色

更多文章
数字眼疲劳:在屏幕无处不在的世界中如何保护视力

数字眼疲劳:在屏幕无处不在的世界中如何保护视力

整天盯着屏幕?了解如何通过行之有效的技巧和工具缓解数字眼疲劳。本指南对远程办公人员、开发人员以及所有科技从业者而言必不可少。

4 分钟阅读 - 2025年5月21日

为何拥有性能强劲且不限流量的 VPS 至关重要

8 分钟阅读 - 2025年5月9日

更多文章