前言

WireGuard是新一代VPN协议,相比传统的OpenVPN和IPSec,WireGuard代码量极少(仅约4000行)、速度更快、延迟更低、配置更简单,已经被正式合入Linux内核主线。在VPS上搭建WireGuard,可以获得比传统方案更好的网络体验。本文教你从零开始在VPS上搭建WireGuard VPN。

一、WireGuard的优势

对比项WireGuardOpenVPNIPSec/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客户端

  1. https://www.wireguard.com/install/ 下载Windows客户端
  2. 打开客户端,点击"新建隧道"
  3. 将上面的客户端配置粘贴进去,或手动填写
  4. 点击"激活"即可连接

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… 依次分配。

八、常见问题

连接后无法上网?

检查以下几项:

  1. 服务端IP转发是否开启:sysctl net.ipv4.ip_forward 应为1
  2. 防火墙是否放行了WireGuard端口:sudo ufw allow 51820/udp
  3. 网卡名称是否正确(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是非常值得尝试的。