如何在您的VPS上设置WireGuard VPN
ApexVPS 团队撰写 • 最后更新:2026 年 7 月 • 9 分钟阅读
本WireGuard VPS设置教程将向您展示如何在Ubuntu或Debian服务器上构建自己的私有、快速、现代的VPN。WireGuard是一个轻量级VPN协议,集成在Linux内核中,比OpenVPN或IPsec简单得多,同时仍提供强大、现代的加密。通过本文,您将拥有运行中的服务器、至少一个连接的客户端,以及对自己加密隧道的完全控制——无需第三方VPN订阅。
在自己的机器上运行WireGuard意味着流量终止于您租用的硬件,而不是拥挤的消费级VPN端点。如果您想更深入了解为何私有盒子是更好的基础,请在开始前阅读我们关于选择个人VPN的VPS的指南。
开始前需要准备什么
- 一台运行Ubuntu 20.04+或Debian 11+的VPS,带有WireGuard内核模块(两者均内置)。
- 通过SSH的root或sudo访问权限。以下每条命令均假定您可以使用
sudo。 - 服务器的公网IP地址以及其默认网络接口的名称。
- UDP端口51820可达——WireGuard的默认端口。您需要在防火墙中开放它。
稳定的、无争用的端点对于VPN至关重要,这就是为什么真正的专用资源优于超售的共享托管。ApexVPS Business和Enterprise计划提供专用IPv4,使您的隧道拥有不与任何人共享的地址。
步骤1:更新系统并安装WireGuard
首先刷新包索引并安装WireGuard用户空间工具。在现代内核上,这是您唯一需要的包。
sudo apt update
sudo apt install wireguard -y
这将安装wg和wg-quick,这两个命令管理密钥、接口和配置。您可以使用wg --version确认安装。
步骤2:生成服务器密钥
WireGuard 使用公钥/私钥对验证对等体,类似于 SSH。进入配置目录,使用 umask 收紧文件权限,然后一步生成密钥。
cd /etc/wireguard
umask 077
wg genkey | sudo tee server_private.key | wg pubkey | sudo tee server_public.key
umask 077 行确保私钥仅对 root 可读。打印这两个值,以便粘贴到后续配置中。
sudo cat /etc/wireguard/server_private.key
sudo cat /etc/wireguard/server_public.key
请保密私钥。任何持有它的人都可以冒充您的服务器。
步骤 3:创建服务器配置(wg0.conf)
服务器接口在单个文件 /etc/wireguard/wg0.conf 中描述。使用您喜欢的编辑器创建它:
sudo nano /etc/wireguard/wg0.conf
粘贴以下片段,将 <SERVER_PRIVATE_KEY> 替换为步骤 2 中的私钥,如果接口名称不同,也替换 eth0。
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = <SERVER_PRIVATE_KEY>
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
此处 10.8.0.1/24 是私有 VPN 子网,51820/udp 是监听端口,PostUp/PostDown 规则添加和移除 NAT,以便客户端流量通过服务器的公共接口伪装发送。要查找您的接口名称,请运行:
ip route list default
输出中 dev 后面的单词(通常是 eth0、ens3 或 enp1s0)是上述两条防火墙规则中要使用的接口。
步骤 4:启用 IP 转发和 NAT
默认情况下,Linux 不会在接口之间路由数据包,因此必须告知内核进行转发。使用 sysctl 配置文件持久启用它。
echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/99-wireguard.conf
sudo sysctl -p /etc/sysctl.d/99-wireguard.conf
如果您还通过隧道路由 IPv6,请将 net.ipv6.conf.all.forwarding = 1 添加到同一文件。步骤 3 中的 MASQUERADE 规则处理 NAT 本身,因此一旦转发开启,路由路径即完成。
开放防火墙端口
允许 WireGuard UDP 端口。如果您使用 ufw,请运行以下命令,并确保保持 SSH 开启,以免将自己锁在外面。
sudo ufw allow 51820/udp
sudo ufw allow OpenSSH
sudo ufw enable
如果您直接使用 iptables 而非 ufw 管理规则,PostUp 行已经添加了转发和 NAT 规则;您只需确保任何主机防火墙或提供商安全组允许入站 UDP 51820。
步骤 5:使用 systemd 启动 WireGuard
wg-quick 附带 systemd 服务模板,因此您可以立即启动隧道,并在重启后自动恢复。
sudo systemctl enable --now wg-quick@wg0
sudo systemctl status wg-quick@wg0
enable --now 标志既启动接口又设置开机自启。快速检查确认接口已启动:
sudo wg show
您应该看到带有公钥和监听端口的 wg0 接口。目前还没有对等体——这是下一步。
步骤 6:添加客户端(对等体)
每个连接的设备都是一个对等体,拥有自己的密钥对。为您的第一个客户端生成密钥对:
wg genkey | sudo tee client1_private.key | wg pubkey | sudo tee client1_public.key
现在在服务器上注册客户端。在 /etc/wireguard/wg0.conf 中添加一个 [Peer] 块,使用 客户端的公钥 和 VPN 子网中的下一个空闲地址。
[Peer]
PublicKey = <CLIENT1_PUBLIC_KEY>
AllowedIPs = 10.8.0.2/32
重新加载接口以使新对等体生效:
sudo systemctl restart wg-quick@wg0
不想中断隧道?您可以热添加对等体而无需重启:
sudo wg set wg0 peer <CLIENT1_PUBLIC_KEY> allowed-ips 10.8.0.2/32
步骤 7:构建客户端配置和二维码
在服务器上组装客户端配置文件。这是设备(笔记本电脑或手机)将加载的内容。将占位符替换为客户端私钥以及服务器公钥和公共 IP。
[Interface]
PrivateKey = <CLIENT1_PRIVATE_KEY>
Address = 10.8.0.2/24
DNS = 1.1.1.1
[Peer]
PublicKey = <SERVER_PUBLIC_KEY>
Endpoint = <SERVER_PUBLIC_IP>:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
设置 AllowedIPs = 0.0.0.0/0, ::/0 会将客户端的全部流量路由通过隧道——这是经典的完整 VPN 行为。 PersistentKeepalive = 25 通过 NAT 和防火墙保持连接活动。将其保存为 client1.conf。
对于桌面端,将 client1.conf 复制到机器并导入官方 WireGuard 客户端。对于手机,直接在终端中将文件渲染为可扫描的二维码:
sudo apt install qrencode -y
qrencode -t ansiutf8 < client1.conf
在 Android 或 iOS 上打开 WireGuard 应用,选择“添加隧道”然后“扫描二维码”,隧道便会在几秒内导入。官方应用和客户端均链接自 wireguard.com。
步骤 8:验证隧道
在客户端激活隧道,然后在服务器上确认握手。健康的连接会显示最近的握手和持续增长的传输计数器。
sudo wg show
在您的对等点下查找 latest handshake 时间戳和非零的 transfer 值。最后,从客户端验证您的公共 IP 现在是服务器的 IP:
curl ifconfig.me
如果返回 VPS 地址,您的流量正在通过隧道传输,WireGuard VPS 设置已完成。要添加更多设备,请使用新的密钥对和 10.8.0.0/24 范围内的下一个地址重复步骤 6 和 7。
排查无法建立的连接
如果 wg show 从未报告握手,请按顺序排查常见问题。首先,确认端口实际上是否打开:从另一台机器运行 nc -uzv <SERVER_PUBLIC_IP> 51820,并检查您的提供商的安全组或防火墙是否允许入站 UDP 51820,而不仅仅是 TCP。其次,确保已真正启用 IP 转发,使用 sysctl net.ipv4.ip_forward 检查 — 应返回 1。第三,再次检查 PostUp NAT 规则中的接口名称是否与 ip route list default 的输出匹配;不匹配是流量通过身份验证但无法到达互联网的最常见原因。最后,验证密钥没有调换:服务器配置包含 服务器的 私钥和 客户端的 公钥,而客户端配置则相反。任何一对调换的密钥都会静默阻止握手。
为 WireGuard 选择正确的 VPS
WireGuard 本身非常小巧 — 协议几乎不消耗 CPU — 因此即使是入门级方案也能轻松运行个人 VPN。真正影响体验的是网络:带宽、到您所在地区的延迟,以及 IP 是否独立。ApexVPS 在 39 个地点提供真正专用的 vCPU、RAM 和 NVMe 存储,主要地区延迟低,因此吞吐量保持可预测,不会因邻居嘈杂而下降。
如果您希望隧道拥有稳定且不共享的地址,Business 和 Enterprise 方案 包含专用 IPv4。而且,由于隐私通常是自托管 VPN 的核心目的,注册方式值得一提:ApexVPS 是 无需 KYC 的 VPS,仅需邮箱注册,并通过 OxaPay 进行仅加密货币支付,接受 Bitcoin、Ethereum、USDT 和 30 多种加密货币 — 无需姓名、地址、信用卡或银行账户。
常见问题
在 VPS 上设置 WireGuard 难吗?
不难。WireGuard 使用小而可读的配置文件和几个标准命令。在全新的 Ubuntu 或 Debian VPS 上,您可以安装它、生成密钥、编写 wg0.conf,并在大约十到十五分钟内连接您的第一个客户端。
WireGuard VPN 需要专用 IP 吗?
专用 IP 并非严格必需,但它为您的隧道提供了稳定的端点,不会与其他客户共享。在 ApexVPS,Business 方案包含专用 IPv4,Enterprise 方案包含两个。
哪些 Ubuntu 和 Debian 版本支持 WireGuard?
WireGuard 自 Linux 内核 5.6 版本起内置,因此 Ubuntu 20.04 及更高版本、Debian 11 及更高版本均原生包含。您只需使用 apt 安装用户空间工具。
我可以在手机上使用同一个服务器吗?
可以。为手机添加第二个对等点,生成客户端配置,并使用 qrencode 将其渲染为二维码。Android 和 iOS 的官方 WireGuard 应用扫描代码后即可立即连接。
我可以不用信用卡支付 VPS 吗?
可以。ApexVPS 结账仅支持加密货币,接受 Bitcoin、Ethereum、USDT 和 30 多种加密货币。注册仅需邮箱以便我们发送访问详情 — 无需姓名、地址或身份证明。