WireGuard 服务端搭建:Ubuntu 网关配置与完整验证

WireGuard 服务端搭建:Ubuntu 网关配置与完整验证

Kevin Wu
2026年10月9日· 7 分钟阅读

WireGuard 服务端搭建不能只看近期握手。本文在 Ubuntu 24.04 LTS 上配置 IPv4 互联网网关,使用另一台 Ubuntu 24.04 LTS 客户端,分别核对转发、DNS、拒绝、撤销、重启及恢复。只使用自有或获授权的专用主机;命令是读者操作步骤,不是作者部署记录。

关键要点

  • peer 连接不等于互联网转发和 DNS 正常。
  • 保留独立管理连接和可恢复的防火墙基线。
  • 示例只覆盖 IPv4,有效的另一条 IPv6 路径需要单独处理。
  • 撤销要同时删除运行态 peer 和持久配置。
  • 限定任务与恢复检查通过后,才开启自动启动。

应该选择 WireGuard 服务端搭建还是托管出口?

先用自建规划指南确定谁管理主机、凭据、更新与停用。如果只代理一个明确设置的应用,VLESS/REALITY 部署教程提供另一条路线,不是本文前提。全隧道与应用代理比较解释流量覆盖选择。

只需日常公网连接、不想管理 peer 时,AethoVPN 提供受支持终端路线。Windows 上使用官方 .exe,通过邮箱验证码继续,在 App 选择实际可用位置后连接。用 出口 IP 核对工具核对这次请求的可见出口,再重复原浏览或上传任务。

租主机之前先比较 VPS 和 VPN 责任。Standard 支持一台移动设备;Pro 支持两台桌面加两台移动设备;Premium 支持八台设备,不区分类型。

该方法不创建你的主机,也不承诺兼容本文 WireGuard 配置。新用户仅有一次三天 Pro 试用,删除账户重新注册不会重置。试用托管日常出口。

准备 WireGuard Ubuntu 服务器与恢复路径

选择具有可达公网 IPv4 端点的专用 Ubuntu 24.04 LTS 服务端及另一台授权 Ubuntu 客户端。主机位于 NAT 后时,还需要获授权的上游 UDP 映射,只有私有地址不够。预留 UDP 51820、隧道网段 10.77.0.0/24、服务端 10.77.0.1 与客户端 10.77.0.2;与已有网络重叠时更换。WireGuard peer 机制说明两端关系。[1]

修改前,记录 ip address、ip route、ip rule、ip -6 address、ip -6 route、resolvectl status、sysctl net.ipv4.ip_forward 和相关防火墙配置,私下保存。通过独立供应商控制台或恢复路径建立一条新的管理连接;已经打开的终端不够。原配置备份不进入公开仓库。

此防火墙示例要求 iptables,且没有竞争的 UFW、firewalld 或独立 nftables 管理器。查看 sudo iptables-save 并明确规则所有者。其他管理器负责规则时,停止套用此示例,改由该管理器实现同一窄策略。绝不清空规则表。

用 ip -4 route get 1.1.1.1 记录真实出站接口;此命令显示路由选择,不发送探测。下文 EGRESS_IF 是占位符,不是实际接口名。

使用没有可用 IPv6 默认路径的受控客户端。基线检查发现有效路径时,停止本 IPv4 练习,独立设计 IPv6 路由与失败策略。不要为了结果好看而关闭共享主机 IPv6。本文也没有断网保护:隧道停止后恢复普通路由。

图中分开隧道、服务端转发/NAT 和公网目的地。隧道失败时管理路径仍须可用;这是解释图,不是实测流量证据。

步骤 1:安装工具并分别生成 peer 密钥

两台主机均从 Ubuntu 配置的可信软件源安装。项目的 Ubuntu 安装路线使用 apt。[2]

sudo apt update
sudo apt install wireguard iptables
sudo install -d -m 700 /etc/wireguard
sudo -i
cd /etc/wireguard
umask 077
wg genkey > wg-exit.private
wg pubkey < wg-exit.private > wg-exit.public
exit

每端分别生成。私钥只留在自己的主机,交换对应公钥。[1]

文件由 root 所有且权限私密;不发布可用配置、二维码、截图或密钥。下文名称是替换标记,不是示例秘密。把公钥添加到服务端之前,记录所属设备。

步骤 2:配置转发与 WireGuard 服务端防火墙

用私密编辑器创建服务端 /etc/wireguard/wg-exit.conf,替换密钥和 EGRESS_IF。钩子规则带识别注释,只服务这一个客户端;wg-quick 在接口生命周期中执行它们。[3]

[Interface]
Address = 10.77.0.1/24
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
PostUp = iptables -I INPUT 1 -p udp --dport 51820 -m comment --comment wg-exit-lab -j ACCEPT
PostUp = iptables -I FORWARD 1 -i %i -o EGRESS_IF -s 10.77.0.2/32 -m comment --comment wg-exit-lab -j ACCEPT
PostUp = iptables -I FORWARD 1 -i EGRESS_IF -o %i -d 10.77.0.2/32 -m conntrack --ctstate ESTABLISHED,RELATED -m comment --comment wg-exit-lab -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -s 10.77.0.2/32 -o EGRESS_IF -m comment --comment wg-exit-lab -j MASQUERADE
PreDown = iptables -D INPUT -p udp --dport 51820 -m comment --comment wg-exit-lab -j ACCEPT
PreDown = iptables -D FORWARD -i %i -o EGRESS_IF -s 10.77.0.2/32 -m comment --comment wg-exit-lab -j ACCEPT
PreDown = iptables -D FORWARD -i EGRESS_IF -o %i -d 10.77.0.2/32 -m conntrack --ctstate ESTABLISHED,RELATED -m comment --comment wg-exit-lab -j ACCEPT
PreDown = iptables -t nat -D POSTROUTING -s 10.77.0.2/32 -o EGRESS_IF -m comment --comment wg-exit-lab -j MASQUERADE

[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.77.0.2/32

供应商安全组放行同一 UDP 端口,并保留管理访问。客户端公网来源稳定时,应对 INPUT 规则和安全组增加来源限制;使用 -s CLIENT_PUBLIC_IPV4/32 时,添加与删除规则都必须包含相同限制。云安全组与主机防火墙不是同一层。

转发规则允许该客户端访问经 EGRESS_IF 可达的目的地。主机有私有路由时,可能包含内部服务:使用没有敏感内部目的地的专用主机,或先建立明确审查的目的地策略。认证不等于目的地访问控制。

NAT 提供公网回程,不授权其他 peer。Ubuntu 默认出口说明要求转发和地址转换。[4]

sudo chmod 600 /etc/wireguard/wg-exit.conf
sudo chown root:root /etc/wireguard/wg-exit.conf

先记录转发原值,并确认路径未占用,再新建专用 /etc/sysctl.d/70-wg-exit.conf,内容为 net.ipv4.ip_forward=1。只应用这一文件:

sudo sysctl -p /etc/sysctl.d/70-wg-exit.conf
sudo wg-quick up wg-exit
sudo wg show wg-exit

启动钩子执行一半失败时,重试前先查接口和规则状态;用准确匹配的删除命令移除遗留规则。重复插入会产生重复项。不要添加 SaveConfig=true:手册说明它会在关闭时将运行态写回,覆盖配置文件。[3]

步骤 3:配置客户端与 WireGuard 互联网网关 DNS

创建客户端私密 /etc/wireguard/wg-exit.conf:

[Interface]
Address = 10.77.0.2/32
PrivateKey = CLIENT_PRIVATE_KEY
PostUp = resolvectl dns %i AUTHORIZED_DNS_IPV4
PostUp = resolvectl domain %i ~.
PreDown = resolvectl revert %i

[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_PUBLIC_IPV4:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

替换公网端点,并选择自己获授权使用且可达的 DNS。文件设置 root 所有、模式 600,再运行 sudo wg-quick up wg-exit。

AllowedIPs 同时涉及路由与 peer 地址,服务端 /32 与客户端默认路由职责不同。修改前阅读AllowedIPs 指南。默认路由下 wg-quick 使用策略路由,不能只看主路由表,应核对 ip rule 和相关各表。[3]

Ubuntu systemd-resolved 可用 resolvectl 设置接口 DNS 和 ~. 路由域。[5]这里特意不填 DNS=,因为 wg-quick 会把它交给 resolvconf。应用钩子之前,确认客户端解析器确实使用 systemd-resolved。

应用自己的加密 DNS 需独立检查。Keepalive 对部分 NAT 映射有用,不是速度优化;没有必要时省略。[1]

步骤 4:验证、撤销、重启与恢复

按表验收,私下记录实际观察、版本和时间。下列是预期现象,不是作者结果。

检查项方法预期现象失败处理
接口与 peer两端运行 sudo wg show wg-exit 和 ip -4 address show dev wg-exit[6]公钥配对正确;服务端 10.77.0.1/24、客户端 10.77.0.2/32改路由前先修归属
认证发授权任务请求,查看握手时间请求之后出现近期握手查 UDP 可达性与密钥
数据与出口重复授权公网任务,比较计数及出口记录计数增加,看到预期服务端出口查转发、NAT 和回程
DNSresolvectl status wg-exit;resolvectl query TASK_HOST预期解析器/接口成功回答修解析范围,另查应用 DNS
IPv6 范围重查基线地址与路由客户端无另一条可用 IPv6 路径停止 IPv4 验收
未登记 peer服务端未登记的一次性新客户端密钥无认证握手及任务转发停止暴露,查有效 peer 表
撤销移除运行态与持久 peer,再尝试流量设备无法认证或继续隧道数据找重建 peer 的来源

撤销时,使用该设备真实公钥:

sudo wg set wg-exit peer CLIENT_PUBLIC_KEY remove

然后删除服务端文件中的 peer 块。不要用整个运行配置覆盖钩子。被撤销客户端重试,核对服务端有效 peer 表;后续授权测试使用替换凭据。只删除客户端配置不能撤销服务端权限。

恢复一个获授权的一次性 peer 并完成检查后,在各专用主机启用开机启动:

sudo systemctl enable wg-quick@wg-exit.service

只重启获准重启的主机。核对 systemctl status wg-quick@wg-exit.service、wg show、转发值、精确防火墙规则、解析范围和新任务请求。容器重启不能替代此整机生命周期。不能重启时,该验收项保持未验证。

失败分支与维护

没有握手先查密钥、端点、监听或 UDP 过滤。有握手没任务响应,再查客户端路由、服务端转发、NAT 与回程策略。IP 请求正常而名称失败,查 DNS。

按已连接但无法上网清单,一次改一层并重复同一任务。另一 VPN 正常不能定位此故障。

保持软件受支持,每台可撤销设备分配独立 peer,相关变化后重复拒绝与恢复检查。供应商网络变化也要记录。无法解释某规则、失去独立管理或需要改变共享生产策略时,应停止。

恢复基线

客户端执行 sudo wg-quick down wg-exit,启用过开机服务则再禁用。服务端若由活跃服务管理,用 sudo systemctl disable --now wg-quick@wg-exit.service;手动启动的接口用 sudo wg-quick down wg-exit。先看真实状态;禁用非活跃服务不会移除手动接口。钩子失败后检查遗留规则,只删除此次试验的准确条目,也移除自己增加的云规则。

删除专用 sysctl 文件,只有没有其他服务依赖转发时才恢复记录的原值。协调配置漂移,不整体覆盖旧防火墙备份。回读路由、解析器、规则与新管理连接,重复原日常任务。安全停用不用的密钥及所属文件;主机、地址、磁盘和快照费用需要分别在供应商处处理。

总结

  • 先完成一个 peer 和一个授权任务,再增加设备。
  • 分别验收握手、转发、DNS、范围、拒绝和生命周期。
  • 撤销有效及持久权限,并证明原基线恢复。

常见问题

需要公网服务器吗?

本互联网出口任务需要获授权的可达端点。NAT 后主机需要合适的上游映射;内网访问是另一种拓扑。

为什么握手不证明可以上网?

加密 peer 关系可以正常,但转发、NAT、回程或 DNS 仍失败。应重复授权公网任务并逐层核对。

怎样验证 DNS?

查看接口解析状态,查询任务主机名,再检查实际应用的解析行为。自行使用加密 DNS 的应用需要独立证据。

本配置覆盖 IPv6 吗?

不覆盖。它是没有另一条有效 IPv6 路径的受控客户端上的 IPv4 示例;有效 IPv6 默认路由需独立设计。

怎样撤销一台设备?

从运行 WireGuard 和持久服务端文件移除其 peer,再重试流量。只删除客户端配置仍保留服务端授权。

重启后检查什么?

核对服务、有效 peer、转发、精确规则、解析范围和新任务请求。服务运行本身不证明网关可用。

什么时候用托管服务?

只需受支持设备的公网访问而不需要服务端控制时,可考虑这条路线。核对设备条款与实际任务,不假定协议兼容。

适用范围:按 Ubuntu 24.04 LTS 官方资料整理,未进行作者完整端到端实测。此 IPv4 网关示例没有 IPv6 或断网保护验收。使用自有或获授权主机,遵守适用法律和服务规则。

来源:

  1. WireGuard, "Quick Start": https://www.wireguard.com/quickstart/
  2. WireGuard, "Installation": https://www.wireguard.com/install/
  3. Ubuntu Noble, "wg-quick(8)": https://manpages.ubuntu.com/manpages/noble/man8/wg-quick.8.html
  4. Ubuntu Server, "Using the VPN as the default gateway": https://ubuntu.com/server/docs/how-to/wireguard-vpn/vpn-as-the-default-gateway/
  5. Ubuntu Noble, "resolvectl(1)": https://manpages.ubuntu.com/manpages/noble/man1/resolvectl.1.html
  6. Ubuntu Noble, "ip-address(8)": https://manpages.ubuntu.com/manpages/noble/man8/ip-address.8.html

Sources checked 2026 年 10 月 9 日。


相关文章:

开启 3 天免费试用

注册即可免费体验全部高级功能。

*仅限新用户;每位用户只能获得一次试用。

WireGuard 服务端搭建:Ubuntu 网关配置与完整验证 | AethoVPN