WireGuard 是一种现代 VPN 协议,速度快、体积小、配置简单。在 VPS 上运行你自己的 WireGuard,可以获得一条通往你所选国家服务器的加密隧道,中间没有第三方 VPN 公司。本指南使用 Ubuntu 24.04 或 Debian 12/13,并假定你已经加固了服务器。
1. 安装 WireGuard
sudo apt update
sudo apt install -y wireguard
2. 生成服务器密钥
cd /etc/wireguard
umask 077
wg genkey | tee server.key | wg pubkey > server.pub
umask 077 可确保密钥文件仅 root 可读。请保管好 server.key,不要泄露。
3. 创建客户端密钥
在服务器上为你的笔记本电脑或手机生成一对密钥,之后再把客户端配置复制过去:
wg genkey | tee client1.key | wg pubkey > client1.pub
4. 编写服务器配置
首先找到你的公网网络接口的名称:
ip route get 1.1.1.1 | awk '{print $5; exit}'
它通常是 eth0 或 ens3。创建 /etc/wireguard/wg0.conf,并将大写的值替换为你自己的:
[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 ETH_IF -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ETH_IF -j MASQUERADE
[Peer]
# client1
PublicKey = CLIENT1_PUBLIC_KEY
AllowedIPs = 10.8.0.2/32
将 server.key 和 client1.pub 的内容粘贴到标注的位置,并将 ETH_IF 替换为你的接口名称。
5. 开启 IP 转发
echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/99-wireguard.conf
sudo sysctl --system
6. 开放防火墙
sudo ufw allow 51820/udp
sudo ufw route allow in on wg0
sudo ufw reload
7. 启动隧道
sudo systemctl enable --now wg-quick@wg0
sudo wg show
你应该能看到该接口,并且在客户端连接后,还能看到其最近一次握手。
8. 配置客户端
在你的设备上创建如下配置(适用于 Windows、macOS、Linux、iOS 和 Android 的官方 WireGuard 应用可以从文件或二维码导入):
[Interface]
Address = 10.8.0.2/24
PrivateKey = CLIENT1_PRIVATE_KEY
DNS = 1.1.1.1
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = YOUR_SERVER_IP:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
使用 AllowedIPs = 0.0.0.0/0, ::/0 会让所有流量都通过隧道。如果只想访问你的私有网络,请改用 10.8.0.0/24。
9. 测试
- 在客户端上激活隧道。
- 在服务器上运行
sudo wg show,确认存在最近的握手。 - 在客户端上访问“我的 IP 是什么”类页面。它应该显示你服务器的地址。
- 如果以隐私为目标,请检查是否存在 DNS 泄漏;如果你的服务器有 IPv6,还要添加 IPv6 规则。
添加更多设备
对于每台新设备,生成一对密钥,再添加一个 [Peer] 块并使用新地址(例如 10.8.0.3/32),然后运行 sudo wg syncconf wg0 <(wg-quick strip wg0) 来应用,而不会中断现有连接。
选择位置
WireGuard 服务器可在我们的任何一个位置运行。选择离你近的位置以获得速度,或选择你希望流量出口 IP 地址所在的国家。参见 如何选择 VPS 位置。对于个人隧道来说,一台小型 VPS 绰绰有余。