如何在VPS上安装WireGuard VPN — 完整教程 [2026]
目录
如果您已经拥有一台VPS,并希望搭建一个快速、安全且易于配置的私人VPN,那么WireGuard是2026年的最佳选择。无论是在公共Wi-Fi上保护流量、突破地区限制,还是安全地连接多台私有服务器,本教程都将带您从零开始完成整个配置过程。
WireGuard是什么?
WireGuard是一种现代VPN协议,旨在比OpenVPN和IPsec等旧协议更快、更简单、更安全。主要特点如下:
- 代码量极少 — 约4,000行(OpenVPN超过10万行),更易于安全审计,攻击面更小。
- 运行在Linux内核空间 — 不经过用户空间,因此吞吐量显著优于OpenVPN。
- 现代密码学 — Curve25519(密钥交换)、ChaCha20(加密)、Poly1305(消息认证)、BLAKE2(哈希)。
- 完全前向保密 — 每次握手都会轮换会话密钥,即使私钥泄露,历史会话数据也无法被解密。
- 跨平台支持 — Linux、Windows、macOS、iOS、Android、BSD。
- 免费开源 — 内核组件采用GPLv2授权,无需支付任何授权费用。
WireGuard于2020年4月随Linux内核5.6版本正式合并入主线。任何现代Linux VPS都可以直接支持,无需安装额外的内核模块。
总结:为什么选择WireGuard?
对于拥有VPS、希望快速搭建私人VPN的用户来说,WireGuard是理想选择。部署简单、性能出色、经过安全审计。唯一的成本是VPS费用——无需每月支付VPN订阅费。
WireGuard vs OpenVPN vs IPsec/IKEv2
基于官方文档的客观对比(数据截至2026年9月,请以各项目官方网站为准):
| 特性 | WireGuard | OpenVPN | IPsec/IKEv2 |
|---|---|---|---|
| 传输协议 | 仅UDP | UDP或TCP | UDP / ESP |
| 默认端口 | UDP 51820 | UDP/TCP 1194 | UDP 500 / 4500 |
| 代码规模 | 约4,000行 | 约10万+行 | 非常复杂 |
| 性能 | 极快(内核空间) | 中等(用户空间) | 较快 |
| 配置难度 | 非常简单 | 中等 | 复杂 |
| 内核集成 | 是(Linux ≥5.6) | 否(用户空间) | 部分 |
| 加密算法 | ChaCha20 | AES-256 / ChaCha20 | AES-256 |
| 费用 | 免费(开源) | 免费(开源) | 免费(开源) |
WireGuard的主要局限是仅支持UDP。如果网络完全屏蔽UDP流量,WireGuard将无法连接。这种极端情况下,OpenVPN over TCP 443是备选方案。
准备工作
服务器端(VPS)
- 运行Ubuntu 22.04或24.04 LTS(推荐)或Debian 11/12的Linux VPS
- 至少512MB RAM — WireGuard资源占用极低
- 具有root或sudo权限的SSH访问
- 公网IP地址(所有VPS提供商均提供)
客户端(需要连接的设备)
- Windows 10/11 — 从 wireguard.com/install 下载安装程序
- macOS — 通过Mac App Store或Homebrew安装
- iOS / Android — App Store和Google Play均有官方应用
还没有VPS? 推荐 DigitalOcean(新加坡节点,每月6美元起)或 Bangmod Cloud(泰国本地服务器)。
第一步:在服务器上安装WireGuard
通过SSH登录VPS,运行以下命令:
# 更新软件包列表
sudo apt update && sudo apt upgrade -y
# 安装WireGuard
sudo apt install -y wireguard wireguard-tools
# 验证安装是否成功
wg --version
如果看到类似 wireguard-tools v1.0.xx 的输出,说明安装成功。在Ubuntu 22.04/24.04上,WireGuard已内置于内核,无需安装额外模块。
第二步:生成服务器密钥对
WireGuard使用公私钥密码学(类似SSH)。每个节点(服务器和每个客户端)都需要自己的密钥对。
# 生成服务器私钥
sudo wg genkey | sudo tee /etc/wireguard/server_private.key
# 从私钥生成公钥
sudo cat /etc/wireguard/server_private.key | sudo wg pubkey | sudo tee /etc/wireguard/server_public.key
# 设置安全权限
sudo chmod 600 /etc/wireguard/server_private.key
# 显示密钥(请保存服务器公钥,配置客户端时会用到)
echo "=== 服务器私钥 ===" && sudo cat /etc/wireguard/server_private.key
echo "=== 服务器公钥 ===" && sudo cat /etc/wireguard/server_public.key
请妥善保存服务器公钥,每个客户端配置文件中都需要用到它。
第三步:生成客户端密钥对
为每台需要连接的设备各生成一套密钥对:
sudo wg genkey | sudo tee /etc/wireguard/client1_private.key
sudo cat /etc/wireguard/client1_private.key | sudo wg pubkey | sudo tee /etc/wireguard/client1_public.key
sudo chmod 600 /etc/wireguard/client1_private.key
echo "=== 客户端1私钥 ===" && sudo cat /etc/wireguard/client1_private.key
echo "=== 客户端1公钥 ===" && sudo cat /etc/wireguard/client1_public.key
第四步:编写服务器配置文件
sudo nano /etc/wireguard/wg0.conf
粘贴以下内容(将占位符替换为您实际的密钥):
[Interface]
# WireGuard网络中服务器的IP
Address = 10.0.0.1/24
# WireGuard监听端口
ListenPort = 51820
# 粘贴第二步生成的服务器私钥
PrivateKey = <SERVER_PRIVATE_KEY>
# 全隧道NAT规则 — 将客户端流量路由到互联网
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
# ===== Peer:客户端1 =====
[Peer]
# 粘贴第三步生成的客户端1公钥
PublicKey = <CLIENT1_PUBLIC_KEY>
# 分配给此客户端的VPN IP
AllowedIPs = 10.0.0.2/32
注意: eth0 是大多数VPS上主网络接口的名称。部分VPS使用 ens3、ens18 等不同名称。运行 ip link show 确认正确的接口名称,并在PostUp/PostDown行中替换 eth0。
第五步:开启IP转发和配置防火墙
开启IP转发
# 立即启用
sudo sysctl -w net.ipv4.ip_forward=1
# 重启后持久生效
sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf
sudo sysctl -p
配置UFW防火墙
# 允许SSH — 非常重要!先执行此步,否则会把自己锁在外面
sudo ufw allow OpenSSH
# 允许WireGuard UDP端口
sudo ufw allow 51820/udp
# 启用UFW
sudo ufw --force enable
# 验证状态
sudo ufw status verbose
启动WireGuard
sudo wg-quick up wg0
sudo wg show
第六步:配置Windows客户端
- 从 wireguard.com/install 下载Windows安装程序并安装。
- 打开WireGuard → 点击 "Add Tunnel" → "Add empty tunnel"。
- 应用程序会自动生成密钥对 — 复制显示的公钥,需要将其添加到服务器配置的
[Peer]部分。 - 输入以下配置:
[Interface]
# 应用自动生成的私钥
PrivateKey = <客户端私钥(由应用生成)>
# 客户端VPN IP
Address = 10.0.0.2/32
# VPN连接期间使用的DNS
DNS = 1.1.1.1, 8.8.8.8
[Peer]
# 第二步生成的服务器公钥
PublicKey = <SERVER_PUBLIC_KEY>
# VPS公网IP和WireGuard端口
Endpoint = 您的VPS公网IP:51820
# 全隧道 — 所有流量通过VPN路由
AllowedIPs = 0.0.0.0/0, ::/0
# 保活,维持NAT穿透连接
PersistentKeepalive = 25
点击 保存,然后切换 激活 开关进行连接。
第七步:配置macOS客户端
方法A — Mac App Store(推荐):
- 打开App Store,搜索"WireGuard",安装官方应用。
- 点击 "+" → "Add Empty Tunnel"。
- 使用与Windows相同的配置结构,分配唯一IP(如10.0.0.3/32)。
- 保存并切换开关连接。
方法B — Homebrew(命令行):
brew install wireguard-tools
sudo mkdir -p /etc/wireguard
sudo nano /etc/wireguard/wg0.conf
# 粘贴客户端配置,然后:
sudo wg-quick up wg0
第八步:配置iOS和Android客户端
iOS
- 从App Store安装"WireGuard"官方应用。
- 点击 "+" → 选择 "从头创建" 或 "从二维码创建"。
- 分配IP 10.0.0.4/32(或下一个可用地址)。
Android
- 从Google Play安装"WireGuard"官方应用。
- 点击 "+" → "从头创建"。
- 使用IP 10.0.0.4/32填写配置。
二维码方式(手机配置更便捷)
# 在服务器上安装qrencode
sudo apt install -y qrencode
# 创建手机客户端配置文件
cat > /tmp/mobile_client.conf << EOF
[Interface]
PrivateKey = <手机客户端私钥>
Address = 10.0.0.4/32
DNS = 1.1.1.1
[Peer]
PublicKey = <SERVER_PUBLIC_KEY>
Endpoint = 您的VPS公网IP:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
EOF
# 在终端显示二维码
qrencode -t ansiutf8 < /tmp/mobile_client.conf
用手机上的WireGuard应用扫描终端中显示的二维码,即可一键导入配置。
第九步:测试连接
检查IP地址
VPN连接后,访问 whatismyipaddress.com — 显示的IP应该是您VPS的公网IP,而非本地网络IP。
在服务器上验证
sudo wg show
# 查找各Peer下的"latest handshake: X seconds ago"
# 看到此信息表示客户端已成功连接并完成密钥交换
Ping测试
# 从客户端ping服务器WireGuard IP
ping 10.0.0.1
# 从服务器ping客户端
ping 10.0.0.2
第十步:设置开机自动启动
# 使用systemd启用WireGuard服务
sudo systemctl enable wg-quick@wg0
# 立即启动
sudo systemctl start wg-quick@wg0
# 检查状态
sudo systemctl status wg-quick@wg0
完成后,每次VPS重启时WireGuard都会自动启动,无需手动操作。
常见问题排查
连接超时 / 无法握手
- 确认UFW已开放UDP 51820:
sudo ufw status | grep 51820 - 检查VPS控制面板中的网络防火墙(安全组/防火墙规则)是否也允许UDP 51820 — UFW单独不够
- 确认服务器
[Peer]中的公钥与客户端公钥完全一致 - 确认客户端配置中的Endpoint IP是VPS公网IP,而非内网IP
VPN连接后无法上网(全隧道模式)
- 验证IP转发已启用:
sysctl net.ipv4.ip_forward应返回1 - 检查PostUp/PostDown中的接口名称是否正确(运行
ip link show确认) - 查看iptables NAT规则:
sudo iptables -t nat -L -n应看到MASQUERADE规则
DNS泄漏
- 在 dnsleaktest.com 测试
- 在客户端配置的
[Interface]部分添加:DNS = 1.1.1.1, 8.8.8.8
不重启添加新Peer
# 实时添加 — 不影响现有连接
sudo wg set wg0 peer <新客户端公钥> allowed-ips 10.0.0.5/32
# 保存到配置文件
sudo wg-quick save wg0
常见问答
ListenPort 更改为任意端口。只需开放UDP,无需任何TCP端口。AllowedIPs = 0.0.0.0/0(全隧道)改为只需要路由的子网。例如 AllowedIPs = 10.0.0.0/24 表示只有发往WireGuard网络的流量走VPN,其他流量直连互联网。