如何在Ubuntu 20.04上设置WireGuard VPN
原文地址:如何在Ubuntu 20.04上设置WireGuard VPN
WireGuard是一种现代VPN(虚拟专用网)技术,它利用最新的加密技术,比OpenVPN更快并且是跨平台的。在本文中,我们将讨论如何在充当VPN服务器的Ubuntu 20.04上设置WireGuard VPN。我们还将向您展示如何将WireGuard配置为客户端。客户端的流量将通过Ubuntu 20.04服务器进行路由。
WireGuard是一种现代VPN(虚拟专用网)技术,它利用最新的加密技术。与IPsec和OpenVPN等其他流行的VPN解决方案相比,WireGuard更快,更易于配置且占地面积更小。它是跨平台的,几乎可以在任何地方运行,包括Linux,Windows,Android和macOS。
Wireguard是对等VPN。它不使用客户端-服务器模型。根据其配置,对等方可以充当传统的服务器或客户端。它通过在充当隧道的每个对等设备上创建网络接口来工作。对等方通过交换和验证公共密钥(类似于SSH模型)来相互认证。公钥与隧道中允许的IP地址列表进行映射。VPN流量封装在UDP中。
在本文中,我们将讨论如何在充当VPN服务器的Ubuntu 20.04上设置WireGuard VPN。我们还将向您展示如何将WireGuard配置为客户端。客户端的流量将通过Ubuntu 20.04服务器进行路由。
此设置可用于防御中间人攻击,匿名浏览网络,绕过受地域限制的内容或允许在家工作的同事安全地连接到公司网络。
先决条件
要遵循本指南,您将需要具有root或sudo访问权限的Ubuntu 20.04服务器。
设置WireGuard服务器
我们首先在Ubuntu计算机上安装WireGuard,然后将其设置为服务器。我们还将配置系统以通过它路由客户端的流量。
在Ubuntu 20.04上安装WireGuard
WireGuard可从默认的Ubuntu存储库中获得。要安装它,请运行以下命令:
sudo apt update
sudo apt install wireguard
这将安装WireGuard模块和工具。
WireGuard作为内核模块运行。
配置WireGuard
在wg
和wg-quick
命令行工具允许您配置和管理WireGuard接口。
WireGuard VPN网络中的每个设备都必须具有私钥和公钥。运行以下命令以生成密钥对:
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
文件将在/etc/wireguard
目录中生成。您可以使用cat
或来查看文件的内容less
。私钥绝不应与任何人共享,并且应始终保持安全。
Wireguard还支持预共享密钥,这增加了对称密钥加密的附加层。该密钥是可选的,并且对于每个对等对必须唯一。
下一步是配置将路由VPN流量的隧道设备。
可以使用ip
和wg
命令从命令行设置设备,也可以使用文本编辑器创建配置文件。
创建一个名为的新文件,wg0.conf
并添加以下内容:
sudo nano /etc/wireguard/wg0.conf
/etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
该接口可以命名为任何名称,但是建议使用诸如includewg0
或的名称wgvpn0
。界面部分中的设置具有以下含义:
-
地址-
wg0
接口的v4或v6 IP地址的逗号分隔列表。使用专用于专用网络的范围内的IP(10.0.0.0/8、172.16.0.0/12或192.168.0.0/16)。 -
ListenPort-监听端口。
-
PrivateKey-
wg genkey
命令生成的私钥。(要查看的文件类型的内容:sudo cat /etc/wireguard/privatekey
) -
SaveConfig-设置为true时,关闭时接口的当前状态将保存到配置文件中。
-
PostUp-在启动界面之前执行的命令或脚本。在此示例中,我们使用iptables启用伪装。这允许流量离开服务器,从而使VPN客户端可以访问Internet。
确保在
ens3
之后替换-A POSTROUTING
以匹配您的公共网络接口的名称。您可以使用以下命令轻松找到该接口:
ip -o -4 route show to default | awk '{print $5}'
-
PostDown-在关闭接口之前执行的命令或脚本。接口关闭后,iptables规则将被删除。
该wg0.conf
和privatekey
文件不应该是普通用户可访问的。所以使用chmod命令
将权限设置为600
:
sudo chmod 600 /etc/wireguard/{privatekey,wg0.conf}
完成后,wg0
使用配置文件中指定的属性启动接口:
sudo wg-quick up wg0
该命令将产生类似于以下内容的输出:
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.0.1/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
要检查接口状态和配置,请输入:
sudo wg show wg0
输出:
interface: wg0
public key: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg=
private key: (hidden)
listening port: 51820
您还可以运行ip a show wg0
以验证接口状态:
ip a show wg0
输出:
4: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
inet 10.0.0.1/24 scope global wg0
valid_lft forever preferred_lft forever
WireGuard也可以通过Systemd进行管理。
要在启动时启用WireGuard接口,请运行以下命令:
sudo systemctl enable wg-quick@wg0
服务器网络和防火墙配置
必须启用IP转发,NAT才能正常工作。打开/etc/sysctl.conf
文件并添加或取消注释以下行:
sudo nano /etc/sysctl.conf
/etc/sysctl.conf
net.ipv4.ip_forward=1
保存文件并应用更改:
sudo sysctl -p
输出:
net.ipv4.ip_forward = 1
如果使用UFW管理防火墙,则需要在以下端口打开UDP通信51820
:
sudo ufw allow 51820/udp
作为服务器的Ubuntu对等点已经设置好了。
Linux和macOS客户端设置
有关所有受支持平台的安装说明,请访问https://wireguard.com/install/。在Linux系统上,您可以使用分发软件包管理器来安装软件包,而在macOS上可以使用进行安装brew
。
安装完成后,请按照以下步骤配置客户端设备。
设置Linux和macOS客户端的过程几乎与服务器相同。首先生成公钥和私钥:
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
创建文件wg0.conf
并添加以下内容:
sudo nano /etc/wireguard/wg0.conf
/etc/wireguard/wg0.conf
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP_ADDRESS:51820
AllowedIPs = 0.0.0.0/0
接口部分中的设置与设置服务器时的含义相同:
- 地址-
wg0
接口的v4或v6 IP地址的逗号分隔列表。 - PrivateKey-要在客户端计算机上查看文件的内容,请运行:
sudo cat /etc/wireguard/privatekey
对等部分包含以下字段:
- PublicKey-您要连接的对等方的公共密钥。(服务器
/etc/wireguard/publickey
文件的内容)。 - 端点-您要连接的对等方的IP或主机名,后跟冒号,然后是远程对等方侦听的端口号。
- AllowedIPs-v4或v6 IP地址的逗号分隔列表,从该列表允许对等方的传入流量,并定向到该对等方的传出流量。我们使用0.0.0.0/0是因为我们正在路由流量,并希望服务器对等方发送具有任何源IP的数据包。
如果您需要配置其他客户端,只需使用其他专用IP地址重复相同的步骤即可。
Windows客户端安装程序
从WireGuard网站下载并安装Windows msi软件包。
安装后,打开WireGuard应用程序,然后单击“Add Tunnel”->“Add empty tunnel…”,如下图所示:
将自动创建一个公钥对并将其显示在屏幕上。'
输入隧道的名称并按如下所示编辑配置:
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP_ADDRESS:51820
AllowedIPs = 0.0.0.0/0
在接口部分,添加新行以定义客户端隧道地址。
在对等部分中,添加以下字段:
- PublicKey-Ubuntu服务器的公共密钥(
/etc/wireguard/publickey
文件)。 - 端点-Ubuntu服务器的IP地址,后跟冒号和WireGuard端口(51820)。
- 允许的IP-0.0.0.0/0
完成后,单击“保存”按钮。
将客户端对等方添加到服务器
最后一步是将客户端的公钥和IP地址添加到服务器。为此,请在Ubuntu服务器上运行以下命令:
sudo wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.0.0.2
确保CLIENT_PUBLIC_KEY
使用在客户端计算机(sudo cat /etc/wireguard/publickey
)上生成的公用密钥更改,并调整客户端IP地址(如果不同)。Windows用户可以从WireGuard应用程序复制公钥。
完成后,返回客户端计算机并打开隧道接口。
Linux和macOS客户端
运行以下命令以打开界面:
sudo wg-quick up wg0
现在,您应该连接到Ubuntu服务器,并且来自客户端计算机的流量应通过该服务器进行路由。您可以使用以下方法检查连接:
sudo wg
输出:
interface: wg0
public key: gFeK6A16ncnT1FG6fJhOCMPMeY4hZa97cZCNWis7cSo=
private key: (hidden)
listening port: 53527
fwmark: 0xca6c
peer: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg=
endpoint: XXX.XXX.XXX.XXX:51820
allowed ips: 0.0.0.0/0
latest handshake: 53 seconds ago
transfer: 3.23 KiB received, 3.50 KiB sent
您也可以打开浏览器,键入“ what is my ip”,然后您应该会看到Ubuntu服务器的IP地址。
要停止隧道,请关闭wg0
接口:
sudo wg-quick down wg0
Windows客户端
如果您在Windows上安装了WireGuard,请单击“激活”按钮。连接对等体后,隧道状态将更改为“活动”:
{{ nComment.author.nickname }}
{{ nComment.time }}