如何在 Ubuntu 22.04 上安装 Wireguard VPN
Wireguard 是 IPSec、IKEv2 和 OpenVPN 的替代开源 VPN 协议。 Wiruguard 专为 Linux 和 Unix 操作系统而设计。它在Linux内核空间上运行,这使得wireguard更快、更可靠。 wireguard 用于在两台或多台计算机之间创建安全隧道连接。
Wireguard 旨在取代 IPSec、IKEv2 和 OpenVPN 等 VPN 协议。 Wireguard 更轻、更快、易于设置且更高效。同时,Wiregurad 并没有牺牲 VPN 协议的安全性。 wireguard 支持现代最先进的加密技术,例如 Noise 协议框架、Curve25519、ChaCha20、Poly1305、BLAKE2、SipHash24、HKDF 和安全可信结构。
与 OpenVPN、IPSec 和 IKEv2 等其他 VPN 协议相比,wireguard 是一种新的 VPN 协议。 Wireguard 由 Jason A. Donenfeld 于 2015 年发布,作为替代 VPN 协议。它于 2020 年被 Linus Torvalds 合并到 Linux 内核 v5.6 中,同年也移植到 FreeBSD 13 中。
本指南将引导您在 Ubuntu 22.04 服务器上安装wireguard。我们将向您展示如何设置 Linux 客户端计算机以连接到wireguard 服务器。
对于本示例,将使用的 Linux 客户端计算机是 Ubuntu 服务器 22.04。如果您有另一台基于 Debian 的计算机,也可以使用它。
先决条件
在开始安装 wireguard 之前,您必须满足以下要求:
- Ubuntu 22.04 服务器 - 本示例使用主机名为“wireguard-server”的 Ubuntu 计算机。
- 具有 sudo root 权限的非 root 用户。
如果这些要求已准备就绪,您就可以安装wireguard VPN 服务器了。
安装 Wireguard 服务器
Wireguard 运行在 Linux 系统的内核空间中。要设置wireguard VPN,您必须安装并启用wireguard 内核模块。在最新的 Ubuntu 22.04 服务器上,默认内核是 v
第一步是启用wireguard 内核模块并在Ubuntu 服务器上安装wireguard-tools。
运行以下 modprobe 命令以启用“wireguard”内核模块。然后,验证“wireguard”内核模块。
sudo modprobe wireguard
lsmod | grep wireguard
如果启用,您应该会收到与此类似的输出。
要使其永久化,您可以通过以下命令将“wireguard”添加到“/etc/modules”文件中。
sudo echo 'wireguard' >> /etc/modules
接下来,运行以下 apt 命令来更新您的 Ubuntu 软件包索引。
sudo apt update
更新软件包索引后,通过下面的 apt 命令安装wireguard-tools。
sudo apt install wireguard-tools
安装应该会自动开始。
启用wireguard内核模块并安装wireguard工具后,您现在就可以开始配置wireguard,第一阶段是为wireguard服务器和客户端生成密钥对。
生成服务器和客户端密钥对
在此步骤中,您将为wireguard 服务器和客户端生成密钥对。这可以通过wireguard-tools包提供的“wg”命令实用程序来完成。
以下是wireguard-tools 提供的两个实用程序:
- wg - 一个命令行实用程序,可用于设置wireguard隧道接口。使用此实用程序,您可以生成密钥对,验证当前的wireguard状态和接口,还可以设置wireguard隧道接口。
- wg-quick - 一个简单的命令行,可用于管理wireguard接口。您可以通过 wg-quick 命令启动、停止和重新启动任何wireguard 接口。
现在,让我们开始为wireguard 服务器和客户端生成密钥对。
为 Wireguard 服务器生成密钥对
要生成服务器私钥,请运行以下“wg genkey”命令。然后,将wireguard私钥的权限更改为0400。在此示例中,wireguard 服务器私钥为 '/etc/wireguard/server.key' 和权限“0400”将禁用访问对于团体和其他人。
wg genkey | sudo tee /etc/wireguard/server.key
sudo chmod 0400 /etc/wireguard/server.key
接下来,运行以下“wg pubkey”命令来生成wireguard 服务器公钥。在此示例中,wireguard 服务器公钥将在'/etc/wireguard/server.pub'处提供。此外,wireguard 公钥源自私钥“server.key”。
sudo cat /etc/wireguard/server.key | wg pubkey | sudo tee /etc/wireguard/server.pub
现在通过以下 cat 命令验证wireguard 服务器的密钥对。
cat /etc/wireguard/server.key
cat /etc/wireguard/server.pub
您的公钥和私钥可能有不同的密钥,但输出类似于以下内容:
生成客户端密钥对
生成客户端密钥对的方式与wireguard服务器密钥对相同。
首先,使用以下命令创建一个新目录'/etc/wireguard/clients'。该目录将用于存储客户端密钥对公钥和私钥。
mkdir -p /etc/wireguard/clients
接下来,运行以下“wg genkey”命令来生成客户端私钥'/etc/wireguard/clients/client1.key' 。然后,运行“wg pubkey”命令生成客户端公钥“/etc/wireguard/clients/client1.pub”,其中来自客户端的私钥。
wg genkey | tee /etc/wireguard/clients/client1.key
cat /etc/wireguard/clients/client1.key | wg pubkey | tee /etc/wireguard/clients/client1.pub
现在通过下面的 cat 命令验证客户端的公钥和私钥。
cat /etc/wireguard/clients/client1.key
cat /etc/wireguard/clients/client1.pub
您生成的公钥和私钥可能与此不同,密钥对类似于 Base64 编码。
生成wireguard 服务器和客户端密钥对后,您接下来将开始配置wireguard 服务器。
配置 Wireguard 服务器
在此步骤中,您将为wireguard 服务器创建一个新的配置文件,设置wireguard 接口,并为客户端连接设置对等连接。这包括wireguard VPN 子网的配置、wireguard 服务器的IP 地址以及对等客户端的IP 地址。
使用下面的 nano 编辑器创建一个新的wireguard 服务器配置文件'/etc/wireguard/wg0.conf'。
sudo nano /etc/wireguard/wg0.conf
将以下行添加到文件中。这样,您将把wireguard 服务器的IP 地址设置为“10.8.0.1”,并打开将用于客户端连接的UDP 端口51820。此外,您还需要启用SaveConfig参数以确保任何更改都保存到wireguard配置文件中。另外,请务必将“PrivateKey”参数更改为服务器私有“server.key”。
[Interface]
wireguard Server private key - server.key
PrivateKey = sGpPeFlQQ5a4reM12HZIV3oqD3t+h7S5qxniZ5EElEQ=
wireguard interface will be run at 10.8.0.1
Address = 10.8.0.1/24
Clients will connect to UDP port 51820
ListenPort = 51820
Ensure any changes will be saved to the wireguard config file
SaveConfig = true
接下来,添加以下行来定义客户端对等连接。请务必使用客户端公钥“client1.pub”更改“PublicKey”参数。使用“AllowedIPs”参数,您可以指定允许哪个wireguard 客户端访问此对等点。在此示例中,仅允许 IP 为“10.8.0.5” 的客户端访问此对等连接。此外,您还可以允许内部网络子网范围(例如“172.16.100.0/24”)访问wireguard 对等点。
[Peer]
wireguard client public key - client1.pub
PublicKey = nsxkCFGsLYTTZagXRx9Kkdh6wz1NOjbjWmZ9h9NBiR8=
clients' VPN IP addresses you allow to connect
possible to specify subnet ⇒ [172.16.100.0/24]
AllowedIPs = 10.8.0.5/24
完成后保存并退出文件。
现在您已经创建了wireguard 服务器配置并使用公钥“client1.pub”为客户端定义了wireguard 接口设置和对等连接。接下来,您将设置端口转发并设置 UFW 防火墙。
设置端口转发
配置wireguard 服务器后,您现在可以通过“/etc/sysctl.conf”文件在Ubuntu 系统上启用端口转发。
使用以下 nano 编辑器命令打开文件“/etc/sysctl.conf”。
sudo nano /etc/sysctl.conf
将以下行添加到该行的末尾。
Port Forwarding for IPv4
net.ipv4.ip_forward=1
Port forwarding for IPv6
net.ipv6.conf.all.forwarding=1
完成后保存文件并退出编辑器。
现在运行以下 sysctl 命令来应用更改。
sudo sysctl -p
输出 :
Ubuntu 服务器上的端口转发已启用,您已准备好设置 UFW 防火墙,该防火墙将用于将流量从客户端路由到您的wireguard 服务器上的特定网络接口。
设置 UFW 防火墙
在此步骤中,您将设置 ufw 防火墙,该防火墙将用于wireguard 服务器将客户端连接路由到用于访问互联网的正确网络接口。这也将允许wireguard 客户端通过wireguard 服务器上的特定接口访问互联网。
首先,运行以下 ip 命令来检查用于连接互联网的网络接口。
ip route list default
您可能会得到与此类似的输出,但具有不同的接口名称和 IP 地址 - 在此示例中,接口 eth0 是访问互联网的默认接口。接下来,此“eth0”将用于路由wireguard 客户端与互联网和外部网络的连接。
接下来,使用以下 nano 编辑器命令打开wireguard 服务器配置文件“/etc/wireguard/wg0.conf”。
sudo nano /etc/wireguard/wg0.conf
将以下行添加到“[Interface]”部分。
[Interface]
...
....
PostUp = ufw route allow in on wg0 out on eth0
PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
PostUp = ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
PreDown = ufw route delete allow in on wg0 out on eth0
PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
PreDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
完成后保存并退出文件。
- 每当 Wirguard 服务器启动 VPN 隧道时,都会执行“PostUp”参数。
- 每当wireguard 服务器停止VPN 隧道时,都会执行“PreDown”参数。
- 命令“ufw route allowed in on wg0 out on eth0”允许将来自 wg0 接口的流量转发到互联网接口 eth0。
- 命令'iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE'将启用伪装并重写来自wg0接口的IPv4流量,使其看起来像直接连接来自wireguard服务器。
- 命令“ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE”将启用伪装并重写来自 wg0 接口的 IPv46 流量,使其看起来像是来自线卫服务器。
将配置添加到wireguard服务器配置文件“/etc/wireguard/wg0.conf”后,您现在将设置并启用ufw防火墙。
在Ubuntu系统上,默认的防火墙是UFW,默认安装。现在,您将在配置wireguard 服务器之前启动并启用UFW 防火墙。
运行以下 ufw 命令将 OpenSSH 服务添加到 ufw。
sudo ufw allow OpenSSH
添加OpenSSH后,运行以下命令启动并启用ufw防火墙。出现提示时,输入 y 进行确认,然后按 ENTER 继续。
sudo ufw enable
启用 ufw 后,您应该会收到诸如“防火墙处于活动状态并在系统启动时启用”之类的输出。
接下来,您必须打开将用于wireguard 客户端连接的wireguard 服务器端口51820。运行以下 ufw 命令在 Ubuntu 系统上打开 UDP 端口 51820,然后重新加载 ufw 以应用更改。
sudo ufw allow 51820/udp
sudo ufw reload
现在使用以下命令验证 ufw 防火墙上启用的规则列表。
sudo ufw status
您应该收到如下输出 - ufw 防火墙的当前状态为“活动”,且启用了 OpenSSH 服务,并且wireguard 端口为“51820/udp<”' 添加到 ufw 防火墙。
此时,您已经通过 /etc/sysctl.conf 文件启用了端口转发,并在wireguard 服务器上配置了 ufw 防火墙。您现在已准备好启动wireguard 服务器。
启动 Wireguard 服务器
在此步骤中,您将启动并启用wireguard 服务器。您还将验证wireguard 服务器并验证wireguard 服务将创建的wg0 接口。
运行以下 systemctl 命令实用程序来启动并启用wireguard 服务。服务“[email ”将在您的wireguard 服务器上创建并启用wireguard 接口“wg0”。
sudo systemctl start [email
sudo systemctl enable [email
现在通过以下命令验证wireguard 服务。
sudo systemctl status [email
您将收到类似于以下屏幕截图的输出 -wireguard 服务“[email ”正在运行并且已启用。这也意味着“wg0”接口已创建并正在运行。
运行以下命令来验证您的wireguard 服务器上的“wg0”接口。
ip a show wg0
您应该收到如下输出:wireguard 接口 wg0 获取 IP 地址“10.8.0.1”,如wireguard 配置文件“/etc/wireguard/wg0.conf ”中所述'。
此外,您还可以通过“wg-quick”命令启动和停止wireguard,如下所示。 “wg-quick up”命令将启动wireguard 服务器,“wg-quick down”命令将停止wireguard 服务器。
sudo wg-quick up /etc/wireguard/wg0.conf
sudo wg-quick down /etc/wireguard/wg0.conf
当wireguard 服务器运行时,您接下来将设置客户端计算机并将其连接到wireguard 服务器。
将客户端连接到 Wireguard 服务器
在此步骤中,您将在 Linux 客户端计算机上设置wireguard,然后将客户端计算机连接到wireguard 服务器。此示例使用主机名为“client1”的 Ubuntu 计算机作为客户端计算机,但您也可以使用任何 Linux 发行版。
运行以下 apt 命令来更新和刷新您的客户端包索引。然后,通过以下命令安装wireguard-tools和resolvconf包。
sudo apt update
sudo apt install wireguard-tools resolvconf
当提示确认时输入 y,然后按 ENTER 继续。
安装wireguard-tools后,使用以下nano编辑器命令创建新的wireguard客户端配置文件“/etc/wireguard/wg-client1.conf”。
sudo nano /etc/wireguard/wg-client1.conf
将以下行添加到文件中。
[Interface]
Define the IP address for the client - must be matched with wg0 on the wireguard Server
Address = 10.8.0.5/24
specific DNS Server
DNS = 1.1.1.1
Private key for the client - client1.key
PrivateKey = EIM/iCAIeKRQvdL43Mezx1g1HG8ObnEXYaQPrzFlpks=
[Peer]
Public key of the wireguard server - server.pub
PublicKey =cs5YcuScSFYtoPUsTDvJtxERjR3V3kmksSlnnHhdlzY=
Allow all traffic to be routed via wireguard VPN
AllowedIPs = 0.0.0.0/0
Public IP address of the wireguard Server
Endpoint = SERVER-IP:51820
Sending Keepalive every 25 sec
PersistentKeepalive = 25
完成后保存文件并退出编辑器。
在“[Interface]”部分中,您必须定义以下内容:
- 客户端的IP地址必须与Wireguard服务器的子网匹配。在此示例中,Wireguard 客户端将获取 IP 地址“10.8.0.5”。
- 指定 DNS 服务器。
- 使用您生成的客户端私钥“client1.key”更改“PrivateKey”参数。
在“[Peer]”部分中,您必须添加以下内容:
- 将 Wireguard 服务器公钥“server.pub”添加到 PublicKey 参数。
- 指定“AllowedIPs”以限制对 VPN 对等方的访问,您可以指定网络子网,也可以仅输入 0.0.0.0/0 通过 VPN 传输所有流量。
- 使用 Wireguard 服务器的公共 IP 地址指定 Endpoint 参数,也可以使用域名。
创建wireguard客户端配置文件后,您就可以在客户端计算机上启动wireguard了。
运行以下“wg-quick up”命令以在客户端计算机上启动wireguard。
wg-quick up wg-client1
您应该收到如下输出 - 将创建新的 Wireguard 接口 'wg-client1',并且客户端计算机应连接到 Wireguard 服务器。
运行以下 ip 命令来验证wireguard 接口“wg-client1”。
ip a show wg-client1
您应该收到如下输出 - wg-client1 接口的 IP 地址为“10.8.0.5”,它是 Wireguard 服务器“10.8.0.0/24”子网的一部分'。
此外,您还可以通过“wg show”命令验证wireguard 连接状态。
在客户端计算机上运行以下“wg show”命令,您应该会收到如下输出。
wg show
您应该看到这样的输出 - '端点'部分应该是wireguard服务器的IP地址,对等点应该是服务器wireguard服务器公钥'server.pub'。
现在移至 Wireguard 服务器并运行“wg show”命令。
wg show
您应该收到与此类似的输出 - 在端点部分,您将看到客户端的公共 IP 地址,在对等部分,您将看到客户端公钥“client1.pub” '。
连接到wireguard 服务器后,您现在将通过wireguard IP 地址验证客户端计算机与wireguard 服务器之间的连接。您还将验证客户端计算机上的互联网连接,以确保客户端计算机可以访问互联网。
对客户端计算机运行以下 ping 命令。
ping -c5 10.8.0.1
ping -c5 1.1.1.1
ping -c5 duckduckgo.com
以下是您应该收到的输出:
客户端计算机可以连接到 IP 地址为“10.8.0.1”的 Wireguard 服务器。
客户端机器可以访问互联网。所有流量均通过 Wireguard 服务器的公共 IP 地址进行路由。
客户端机器可以访问互联网上的任何域名 - 确保域名已解析。
现在,您已在客户端计算机上配置了 Wirguard VPN。您还验证了客户端计算机与 Wireguard 服务器之间的连接。
结论
在本教程中,您已在 Ubuntu 22.04 服务器上安装并配置了 Wireguard VPN。您还配置了 Debian 计算机并成功连接到 Wireguard VPN 服务器。
具体来说,您已经安装了 Wireguard VPN 软件包,为服务器和客户端生成了密钥对公钥和私钥,配置了 UFW 防火墙以将 VPN 流量路由到特定网络接口,并通过 /etc/sysctl 启用了端口转发.conf 文件。
考虑到这一点,您现在可以通过为客户端生成另一个密钥对、在 Wireguard 服务器上定义对等连接,然后创建客户端计算机将使用的新 Wireguard 配置文件,将更多客户端添加到 Wireguard VPN 服务器。要了解有关 Wireguard 的更多信息,请访问 Wireguard 官方文档。