前言
WireGuard是新一代VPN协议,相比传统的OpenVPN和IPSec,WireGuard代码量极少(仅约4000行)、速度更快、延迟更低、配置更简单,已经被正式合入Linux内核主线。在VPS上搭建WireGuard,可以获得比传统方案更好的网络体验。本文教你从零开始在VPS上搭建WireGuard VPN。
一、WireGuard的优势
| 对比项 | WireGuard | OpenVPN | IPSec/L2TP |
|---|---|---|---|
| 代码量 | ~4000行 | ~100000行 | 非常庞大 |
| 速度 | 极快 | 较慢 | 中等 |
| 延迟 | 极低 | 较高 | 中等 |
| 配置难度 | 简单 | 复杂 | 复杂 |
| 内核支持 | Linux 5.6+原生 | 用户态 | 内核态 |
| 漫游支持 | 优秀 | 一般 | 一般 |
| 电池消耗 | 低(移动端友好) | 高 | 中等 |
二、安装WireGuard
Debian/Ubuntu
# 更新系统
sudo apt update && sudo apt upgrade -y
# 安装WireGuard
sudo apt install -y wireguard wireguard-tools
CentOS/AlmaLinux/Rocky
# 安装WireGuard
sudo dnf install -y epel-release
sudo dnf install -y wireguard-tools
检查安装
# 查看内核模块
lsmod | grep wireguard
# 或手动加载
modprobe wireguard
# 查看版本
wg version
三、生成密钥对
WireGuard使用公钥/私钥方式进行认证,服务端和客户端各需要一对密钥。
服务端生成密钥
# 创建WireGuard配置目录
sudo mkdir -p /etc/wireguard
cd /etc/wireguard
# 生成服务端密钥对
wg genkey | tee server_private.key | wg pubkey > server_public.key
# 设置权限
chmod 600 server_private.key
客户端生成密钥
# 生成客户端密钥对
wg genkey | tee client_private.key | wg pubkey > client_public.key
# 生成预共享密钥(增加安全性,可选但推荐)
wg genpsk > preshared.key
查看生成的密钥:
cat server_private.key
cat server_public.key
cat client_private.key
cat client_public.key
cat preshared.key
注意:后续配置中需要使用这些密钥,请妥善保存。
四、配置服务端
创建服务端配置文件:
sudo nano /etc/wireguard/wg0.conf
写入以下内容(请替换密钥和IP地址):
[Interface]
# 服务端私钥(server_private.key的内容)
PrivateKey = <服务端私钥>
# VPN虚拟网段的网关地址
Address = 10.0.0.1/24
# 监听端口
ListenPort = 51820
# 开启IP转发和NAT(ens33替换为你的网卡名,用 ip a 查看)
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens33 -j MASQUERADE
[Peer]
# 客户端公钥(client_public.key的内容)
PublicKey = <客户端公钥>
# 预共享密钥(可选)
PresharedKey = <预共享密钥>
# 客户端分配的VPN IP
AllowedIPs = 10.0.0.2/32
查看你的网卡名称:
ip -o link show | awk -F': ' '{print $2}' | grep -v lo
五、配置客户端
Linux客户端
创建客户端配置文件:
sudo nano /etc/wireguard/wg0.conf
[Interface]
# 客户端私钥(client_private.key的内容)
PrivateKey = <客户端私钥>
# 客户端VPN IP
Address = 10.0.0.2/24
# DNS服务器
DNS = 1.1.1.1, 8.8.8.8
[Peer]
# 服务端公钥(server_public.key的内容)
PublicKey = <服务端公钥>
# 预共享密钥(可选,需与服务端一致)
PresharedKey = <预共享密钥>
# VPS的公网IP和端口
Endpoint = <VPS公网IP>:51820
# 转发所有流量走VPN
AllowedIPs = 0.0.0.0/0, ::/0
# 保持连接(NAT穿透)
PersistentKeepalive = 25
Windows客户端
- 从 https://www.wireguard.com/install/ 下载Windows客户端
- 打开客户端,点击"新建隧道"
- 将上面的客户端配置粘贴进去,或手动填写
- 点击"激活"即可连接
macOS客户端
从App Store搜索"WireGuard"安装,或使用Homebrew:
brew install wireguard-tools
配置文件路径同Linux。
iOS/Android客户端
- iOS:App Store搜索"WireGuard"
- Android:Google Play或F-Droid搜索"WireGuard"
打开App后扫描电脑上生成的配置二维码,或手动导入配置文件。
生成二维码(方便手机扫码导入):
# 安装qrencode
sudo apt install -y qrencode
# 生成二维码(在终端显示)
qrencode -t ansiutf8 < /etc/wireguard/wg0.conf
# 生成二维码图片
qrencode -o wireguard-qr.png < /etc/wireguard/wg0.conf
六、启动与管理
服务端启动
# 开启IP转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf
sudo sysctl -p
# 启动WireGuard
sudo wg-quick up wg0
# 设为开机自启
sudo systemctl enable wg-quick@wg0
客户端启动
sudo wg-quick up wg0
常用管理命令
# 查看WireGuard状态
sudo wg show
# 停止WireGuard
sudo wg-quick down wg0
# 重启WireGuard
sudo wg-quick down wg0 && sudo wg-quick up wg0
七、添加更多客户端
如果有多个设备需要连接VPN,为每个设备添加一个Peer即可。
为新客户端生成密钥
cd /etc/wireguard
wg genkey | tee client2_private.key | wg pubkey > client2_public.key
在服务端添加Peer
# 使用wg命令动态添加(无需重启服务)
sudo wg set wg0 peer <新客户端公钥> allowed-ips 10.0.0.3/32
也可以直接编辑 /etc/wireguard/wg0.conf 添加新的 [Peer] 段:
[Peer]
PublicKey = <新客户端公钥>
AllowedIPs = 10.0.0.3/32
然后重启服务:
sudo wg-quick down wg0 && sudo wg-quick up wg0
每个客户端的VPN IP不能重复,建议按 10.0.0.2、10.0.0.3、10.0.0.4… 依次分配。
八、常见问题
连接后无法上网?
检查以下几项:
- 服务端IP转发是否开启:
sysctl net.ipv4.ip_forward应为1 - 防火墙是否放行了WireGuard端口:
sudo ufw allow 51820/udp - 网卡名称是否正确(PostUp/PostDown中的ens33要替换为实际网卡名)
WireGuard使用TCP还是UDP?
WireGuard原生只支持UDP。如果网络环境限制UDP,可以配合udp2raw等工具将UDP伪装成TCP,但会有性能损失。
如何修改WireGuard端口?
修改服务端配置中的 ListenPort 和客户端配置中的 Endpoint 端口号,然后重启WireGuard服务。记得同步修改防火墙规则。
手机切换WiFi/4G后断连怎么办?
WireGuard天然支持漫游,客户端配置中 PersistentKeepalive = 25 可以帮助维持连接。如果频繁断连,可能是运营商NAT超时导致的,可以尝试更换端口。
总结
WireGuard是目前最适合在VPS上搭建的VPN方案,配置简单、速度极快、安全性强。相比OpenVPN,WireGuard的性能优势非常明显,尤其是延迟和速度方面。如果你有一台便宜VPS,用WireGuard搭建一个私人VPN是非常值得尝试的。