核心概念
在开始之前,你需要了解几个角色:

- 服务器端:你将要搭建的、位于远程(VPS 或云主机)的虚拟专用网关。
- 客户端:你的个人设备,如笔记本电脑、手机、平板等,它们将通过 VPN 连接到服务器。
- 公网 IP:你的服务器在互联网上的唯一地址,
45.67.89。 - 私有 IP:服务器和客户端在 VPN 内部通信使用的地址,
0.0.1。
第一步:准备工作
-
一台云服务器 (VPS):
- 推荐服务商:DigitalOcean, Vultr, Linode, 阿里云, 腾讯云等。
- 推荐系统:Ubuntu 22.04 LTS 或 Debian 11,这些系统稳定且软件包丰富。
- 最低配置:1核 CPU / 512MB 内存 / 1GB 硬盘空间,对于 WireGuard 这个配置绰绰有余。
- 公网 IP:确保你的服务器有一个固定的公网 IP 地址。
-
基本命令行操作能力:
- 你需要会使用
ssh连接到服务器,并执行一些基本的 Linux 命令(如apt,vim,cd,ls等)。
- 你需要会使用
-
一台客户端设备:
可以是 Windows, macOS, Linux, Android, 或 iOS 设备。
(图片来源网络,侵删)
第二步:在服务器上安装和配置 WireGuard
我们将分步完成服务器端的配置。
连接到服务器并更新系统
使用 SSH 连接到你的服务器:
ssh root@你的服务器公网IP
更新软件包列表并升级已安装的包:
apt update && apt upgrade -y
安装 WireGuard
WireGuard 的内核模块已经包含在最新的 Linux 内核中,所以我们只需要安装用户空间的工具即可。

apt install wireguard -y
生成密钥对
WireGuard 使用公钥/私钥进行认证,我们需要为服务器生成一对密钥。
- 服务器私钥:必须保密,存放在服务器上。
- 服务器公钥:可以分享给客户端,用于建立连接。
运行以下命令生成密钥:
# 进入 /etc/wireguard 目录 cd /etc/wireguard # 生成私钥 wg genkey | tee server_private.key # 基于私钥生成公钥 cat server_private.key | wg pubkey | tee server_public.key
你会在 /etc/wireguard/ 目录下找到两个文件:
server_private.key:服务器私钥,不要泄露!server_public.key:服务器公钥,稍后会用到。
创建服务器配置文件
创建一个名为 wg0.conf 的配置文件:
nano /etc/wireguard/wg0.conf
粘贴进去,并根据你的需求进行修改:
[Interface] # VPN 服务器的私有 IP 地址,这是整个 VPN 网段的网关 Address = 10.0.0.1/24 # VPN 服务器所使用的 UDP 端口,建议使用 51820 (WireGuard 默认端口) 或其他高端口 # 确保在云服务商的控制台(安全组/防火墙)中开放这个端口 ListenPort = 51820 # 指定刚才生成的服务器私钥 PrivateKey = PASTE_YOUR_SERVER_PRIVATE_KEY_HERE # 启用 IP 转发,允许客户端通过服务器访问互联网 # 这一行是让客户端能够“翻墙”的关键 PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # 关闭 IP 转发 PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE # (可选) 如果服务器上启用了防火墙,可以使用 UFW 来管理规则 # PostUp = ufw route allow in on wg0 out on eth0 # PostDown = ufw route delete allow in on wg0 out on eth0
修改点说明:
PrivateKey:将PASTE_YOUR_SERVER_PRIVATE_KEY_HERE替换为cat /etc/wireguard/server_private.key的输出内容。ListenPort:保持51820即可,但务必去你的云服务商后台(如阿里云ECS的“安全组”设置)添加一条入站规则,允许 UDP 流量访问51820端口。PostUp和PostDown:这两行是 NAT 转发规则,它会把客户端的请求伪装成服务器的请求,从而访问互联网,这是实现全局代理的关键。
保存并退出 nano 编辑器(Ctrl+X,Y,Enter)。
启动并启用 WireGuard 服务
我们启动这个接口,并设置为开机自启。
# 启动 wg0 接口 wg-quick up wg0 # 设置为开机自启 systemctl enable wg0
检查 WireGuard 是否正常运行:
# 查看接口状态 ip a show wg0 # 查看密钥对和已连接的客户端(目前应该是空的) wg
wg 命令输出了服务器的公钥和 (none) 的对端,说明服务器端配置成功。
第三步:配置客户端
我们需要为每个客户端设备生成密钥并创建配置文件。
在服务器上为第一个客户端生成密钥
假设我们的第一个客户端是 laptop。
# 在服务器上执行 cd /etc/wireguard # 为客户端 laptop 生成私钥 wg genkey | tee client_laptop_private.key # 生成公钥 cat client_laptop_private.key | wg pubkey | tee client_laptop_public.key
更新服务器配置文件,添加客户端
回到 wg0.conf 文件:
nano /etc/wireguard/wg0.conf
在文件末尾添加以下内容:
# 在 [Interface] 段落后面添加一个新的 [Peer] 段 [Peer] # 客户端的公钥 PublicKey = PASTE_YOUR_CLIENT_LAPTOP_PUBLIC_KEY_HERE # 给客户端分配一个 VPN 内网的静态 IP 地址 AllowedIPs = 10.0.0.2/32
修改点说明:
PublicKey:将PASTE_YOUR_CLIENT_LAPTOP_PUBLIC_KEY_HERE替换为cat /etc/wireguard/client_laptop_public.key的输出内容。AllowedIPs = 10.0.0.2/32:这表示这个客户端只能使用0.0.2这个 IP 地址。/32是一个子网掩码,代表只有一个地址。
保存并退出。
为客户端生成配置文件
我们需要一个 .conf 文件,以便客户端设备可以连接到服务器。
# 创建客户端配置文件 cp /etc/wireguard/wg0.conf /etc/wireguard/client_laptop.conf
然后编辑这个新的客户端配置文件:
nano /etc/wireguard/client_laptop.conf
将其修改为以下格式:
[Interface] # 客户端的私有 IP 地址 Address = 10.0.0.2/24 # 客户端的私有密钥,这是客户端设备上需要配置的 PrivateKey = PASTE_YOUR_CLIENT_LAPTOP_PRIVATE_KEY_HERE # (可选) 设置一个 DNS 服务器,防止 DNS 泄露 DNS = 1.1.1.1, 8.8.8.8 [Peer] # 服务器的公钥 PublicKey = PASTE_YOUR_SERVER_PUBLIC_KEY_HERE # 服务器的公网 IP 和端口 Endpoint = 你的服务器公网IP:51820 # 允许客户端通过 VPN 访问的 IP 范围 # 0.0.0.0/0 表示所有流量都通过 VPN,这是全局代理 # 如果只想访问特定资源,可以写特定 IP 或网段,如 192.168.1.0/24 AllowedIPs = 0.0.0.0/0, ::/0 # 保持连接,5 分钟内没有数据传输,则发送一个 100 字节的包以保持会话活跃 PersistentKeepalive = 25
修改点说明:
PrivateKey:将PASTE_YOUR_CLIENT_LAPTOP_PRIVATE_KEY_HERE替换为cat /etc/wireguard/client_laptop_private.key的输出内容。PublicKey和Endpoint:填入你服务器的公钥和公网 IP 地址。AllowedIPs = 0.0.0.0/0, ::/0:这是关键,它告诉客户端将所有互联网流量都发送到 VPN 服务器。PersistentKeepalive:对于移动网络(如手机切换 Wi-Fi)非常有用,可以防止连接被 NAT 超时断开。
重启 WireGuard 服务以应用新配置
systemctl restart wg0
再次运行 wg 命令,你应该能看到客户端 laptop 已经连接上了。
第四步:在客户端设备上导入配置
你需要将刚刚生成的 /etc/wireguard/client_laptop.conf 文件从服务器下载到你的客户端设备上。
使用 scp (在本地电脑终端执行)
假设你的用户名是 root:
# 从服务器下载到本地当前目录 scp root@你的服务器公网IP:/etc/wireguard/client_laptop.conf ./
使用 cat 和 ssh 直接复制
ssh root@你的服务器公网IP "cat /etc/wireguard/client_laptop.conf"
然后直接复制终端中输出的所有内容,粘贴到一个新的文本文件中,并保存为 client.conf。
客户端软件安装和导入
- Windows: 下载并安装 WireGuard 官方客户端,将
.conf文件拖入客户端窗口,或点击 "Import tunnel(s) from file"。 - macOS: 同样使用官方客户端,方法与 Windows 类似。
- Android: 从 Google Play 商店下载 WireGuard 应用,点击 "+" 号,选择 "Import tunnel from file" 或 "Import tunnel from config"。
- iOS: 从 App Store 下载 WireGuard 应用,点击右上角的 "+" 号,选择 "Import from file" 或 "Import from archive"。
导入成功后,点击客户端列表中的该连接,点击 "Activate" 即可连接。
第五步:验证连接
连接成功后,打开浏览器访问 IPinfo.io 或 Google "what is my ip"。
- 如果你的 IP 地址变成了你服务器的 IP 地址,并且地理位置也匹配,那么恭喜你,VPN 搭建成功!
- 你可以访问一些之前被限制的网站来测试。
重要提示与进阶
- 安全:
- 保护好你的私钥:服务器和客户端的私钥都不要泄露。
- 防火墙:确保服务器的防火墙(如
ufw或云服务商的安全组)只开放了必要的端口(如 SSH 的 22 端口和 WireGuard 的 51820 端口)。
- 为更多客户端添加:如果你想为手机再添加一个客户端,只需重复 第三步 的过程,生成新的密钥对,在服务器
wg0.conf的[Peer]部分添加新的客户端配置(使用新的PublicKey和一个新的AllowedIPs,如0.0.3/32),然后为手机生成一个新的.conf文件即可。 - 故障排查:
- 连接不上:检查云服务商的安全组/防火墙是否开放了
51820(UDP) 端口。 - 能连但无法上网:检查服务器
wg0.conf中的PostUp和PostDown的 iptables 规则是否正确,检查客户端配置中的AllowedIPs是否为0.0.0/0。 - 使用
wg和wg show命令:这是排查连接问题的最佳工具,可以清晰地看到密钥交换和流量情况。
- 连接不上:检查云服务商的安全组/防火墙是否开放了
希望这份详细的指南能帮助你成功搭建属于自己的 VPN 服务器!
