
本教程将向您展示如何在Ubuntu上设置自己的WireGuard VPN服务器。WireGuard专为Linux内核而设计,能够在Linux内核内部运行,允许您创建快速、现代且安全的VPN隧道。
WireGuard VPN的特点
- 轻量级和超高速:WireGuard的速度远超OpenVPN。
- 跨平台支持:WireGuard可以在Linux、BSD、macOS、Windows、Android、iOS和OpenWRT上运行。
- 用户身份验证:通过交换公钥进行身份验证,类似于SSH密钥。
- 静态隧道IP地址:为VPN客户端分配静态隧道IP地址,这在某些情况下非常有用。
- 无缝切换:移动设备可以在Wi-Fi和移动网络之间无缝切换,而不会中断连接。
- 替代方案:旨在替代大多数用例中的OpenVPN和IPSec。
- 简化TLS加密:WireGuard是我选择的VPN协议,消除了为私有网络设置TLS加密的需求。
基本要求
要遵循本教程,您需要一个可以自由访问被阻止网站的VPS(虚拟专用服务器)(位于您的国家或互联网过滤系统之外)。我推荐使用Kamatera VPS,其特点包括:
- 30天免费试用。
- 价格从$4/月起(1GB RAM)。
- 高性能的KVM基础VPS。
- 在全球拥有9个数据中心,包括美国、加拿大、英国、德国、荷兰、香港和以色列。
请按照以下链接的教程创建您的Linux VPS服务器: 如何在Kamatera上创建Linux VPS服务器
设置步骤
一旦您有了运行Ubuntu的VPS,请按照以下说明进行操作。本教程假设VPN服务器和VPN客户端都在运行Ubuntu操作系统。
第1步:在Ubuntu服务器和桌面上安装WireGuard
登录到您的Ubuntu服务器,然后运行以下命令以安装WireGuard。
Ubuntu 24.04/22.04/20.04
这些版本的Ubuntu自带内置的WireGuard模块,只需运行以下命令:
bash
sudo apt update
sudo apt install wireguard wireguard-tools
Ubuntu 18.04
对于Ubuntu 18.04,您需要先安装硬件启用内核(HWE),这将安装内核5.4:
bash
sudo apt update
sudo apt install linux-generic-hwe-18.04-edge
重启您的Ubuntu 18.04服务器并安装WireGuard:
bash
sudo shutdown -r now
sudo apt install wireguard wireguard-tools wireguard-dkms
在客户端上安装WireGuard
在本地Ubuntu计算机(VPN客户端)上使用相同的命令安装WireGuard。请注意,您还需要在客户端上安装openresolv软件包以配置DNS服务器:
bash
sudo apt install openresolv
第2步:生成公/私钥对
服务器
在Ubuntu服务器上运行以下命令以创建公/私钥对,密钥将保存在/etc/wireguard/
目录下:
bash
wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key
客户端
在本地Ubuntu计算机(VPN客户端)上运行以下命令以创建公/私钥对:
bash
wg genkey | sudo tee /etc/wireguard/client_private.key | wg pubkey | sudo tee /etc/wireguard/client_public.key
第3步:创建WireGuard配置文件
服务器
使用命令行文本编辑器(如Nano)在Ubuntu服务器上创建WireGuard配置文件。wg0
将是网络接口名称:
bash
sudo nano /etc/wireguard/wg0.conf
将以下文本复制并粘贴到配置文件中。您需要使用自己的服务器私钥和客户端公钥:
``` [Interface] Address = 10.10.10.1/24 ListenPort = 51820 PrivateKey = cD+ZjXiVIX+0iSX1PNijl4a+88lCbDgw7kO78oXXLEc=
[Peer] PublicKey = AYQJf6HbkQ0X0Xyt+cTMTuJe3RFwbuCMF46LKgTwzz4= AllowedIPs = 10.10.10.2/32 ```
- Address:指定VPN服务器的私有IP地址。这里我使用的是10.10.10.0/24网络范围,以避免与家庭网络范围冲突。
-
PrivateKey:VPN服务器的私钥,可以在
/etc/wireguard/server_private.key
文件中找到。 - ListenPort:WireGuard VPN服务器将监听UDP 51820端口,这是默认端口。
-
PublicKey:VPN客户端的公钥,可以在
/etc/wireguard/client_public.key
文件中找到。 - AllowedIPs:VPN客户端被允许使用的IP地址。在此示例中,客户端只能在VPN隧道内使用10.10.10.2 IP地址。
保存并关闭文件(在Nano文本编辑器中,按Ctrl + O
,然后按Enter
确认,按Ctrl + X
退出)。
更改文件权限模式,使只有root用户可以读取文件:
bash
sudo chmod 600 /etc/wireguard/ -R
客户端
在本地Ubuntu计算机上使用命令行文本编辑器(如Nano)创建WireGuard配置文件。wg-client0
将是网络接口名称:
bash
sudo nano /etc/wireguard/wg-client0.conf
将以下文本复制并粘贴到配置文件中。您需要使用自己的客户端私钥和服务器公钥:
``` [Interface] Address = 10.10.10.2/24 DNS = 10.10.10.1 PrivateKey = cOFA+x5UvHF+a3xJ6enLatG+DoE3I5PhMgKrMKkUyXI=
[Peer] PublicKey = RaoAdsIEIwgV9DHNSubxWVG+nZ1GP/c3OU6A/efBJ0I= AllowedIPs = 0.0.0.0/0 Endpoint = 12.34.56.78:51820 PersistentKeepalive = 25 ```
- Address:指定VPN客户端的私有IP地址。
- DNS:指定10.10.10.1(VPN服务器)作为DNS服务器。
-
PrivateKey:客户端的私钥,可以在
/etc/wireguard/client_private.key
文件中找到。 -
PublicKey:服务器的公钥,可以在
/etc/wireguard/server_public.key
文件中找到。 - AllowedIPs:0.0.0.0/0代表整个互联网,意味着所有流量都应通过VPN路由。
- Endpoint:VPN服务器的公共IP地址和端口号。将12.34.56.78替换为您的服务器的实际公共IP地址。
- PersistentKeepalive:每25秒向对等体发送一个经过身份验证的空数据包,以保持连接活跃。
保存并关闭文件。
更改文件模式,使只有root用户可以读取文件:
bash
sudo chmod 600 /etc/wireguard/ -R
第4步:在服务器上启用IP转发
为了使VPN服务器能够在VPN客户端和互联网之间路由数据包,我们需要启用IP转发。编辑sysctl.conf
文件:
bash
sudo nano /etc/sysctl.conf
在文件末尾添加以下行:
net.ipv4.ip_forward = 1
保存并关闭文件。然后使用以下命令应用更改。-p
选项将从/etc/sysctl.conf
文件加载sysctl设置。此命令将保留我们的更改以便在系统重启后生效:
bash
sudo sysctl -p
第5步:在服务器上配置IP伪装
我们需要在服务器防火墙中设置IP伪装,以便服务器成为VPN客户端的虚拟路由器。我将使用UFW,这是iptables防火墙的前端。使用以下命令在Ubuntu上安装UFW:
bash
sudo apt install ufw
首先,您需要允许SSH流量:
bash
sudo ufw allow 22/tcp
接下来,找出您服务器的主要网络接口名称:
bash
ip -c a
在我的Ubuntu服务器上,它的名称是enp3s0
。
编辑UFW的规则文件:
bash
sudo nano /etc/ufw/before.rules
默认情况下,过滤器表中有一些规则。在该文件末尾添加以下行。将enp3s0
替换为您自己的网络接口名称:
```
*nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 10.10.10.0/24 -o enp3s0 -j MASQUERADE
COMMIT ```
在Nano文本编辑器中,您可以通过按Ctrl + W
,然后按Ctrl + V
跳转到文件末尾。
上述行将在nat表的POSTROUTING链的末尾附加(-A)一个规则。它将把您的虚拟路由器连接到互联网。
总结
通过以上步骤,您已经成功在Ubuntu上设置了WireGuard VPN服务器。您现在可以通过VPN安全地浏览互联网,保护您的隐私和数据安全。如果您有任何问题或需要进一步的帮助,请随时与我们联系!