简介
WireGuard 是一种现代、高性能的 VPN,旨在提供易于使用的同时又具有强大的安全性。WireGuard 专注于在网络接口上使用公钥认证加密来提供安全连接。这意味着,与大多数 VPN 不同,它不强制执行拓扑结构,因此可以通过操纵周围的网络配置来实现不同的配置。这种模型提供了极大的力量和灵活性,可以根据个人需求进行应用。
WireGuard 可以使用的最简单的拓扑结构之一是点对点连接。这在两台机器之间建立了一个安全链接,无需通过中央服务器进行中介。这种连接类型也可以在两个以上的成员之间使用,以建立网状 VPN 拓扑,其中每个单独的服务器可以直接与其对等方通信。由于每个主机地位相同,这两种拓扑结构最适合在服务器之间建立安全消息传递,而不是使用单个服务器作为路由流量的网关。
在本指南中,我们将演示如何使用两台 Ubuntu 16.04 服务器建立 WireGuard 的点对点 VPN 连接。我们将从安装软件开始,然后为每个主机生成加密密钥对。之后,我们将创建一个简短的配置文件来定义对等方的连接信息。一旦启动接口,我们就能够通过 WireGuard 接口在服务器之间发送安全消息。
先决条件
要按照本指南操作,您需要访问两台 Ubuntu 16.04 服务器。在每台服务器上,您需要创建一个具有
sudo
权限以执行管理操作的非根用户。您还需要在每个系统上配置基本防火墙。您可以通过完成以下教程来满足这些要求:
- 使用 Ubuntu 16.04 进行初始服务器设置
当您准备好继续时,请使用您的
sudo
用户登录到每台服务器。
安装软件
WireGuard 项目为 Ubuntu 系统提供了最新的软件包的 PPA。在继续之前,我们需要在我们的两台服务器上安装 WireGuard。在每台服务器上,执行以下操作。
首先,将 WireGuard PPA 添加到系统中以配置访问项目的软件包:
sudo add-apt-repository ppa:wireguard/wireguard
在提示时按 ENTER 以将新的软件包源添加到您的
apt
配置。添加了 PPA 后,更新本地软件包索引以获取有关新可用软件包的信息,然后安装 WireGuard 内核模块和用户空间组件:
sudo apt-get update
sudo apt-get install wireguard-dkms wireguard-tools
接下来,我们可以开始在每台服务器上配置 WireGuard。
创建私钥
WireGuard VPN 中的每个参与者都使用公钥密码进行对等认证。可以通过交换公钥并执行最小配置来建立新对等方之间的连接。
要生成私钥并将其直接写入 WireGuard 配置文件,请在每台服务器上输入以下命令:
(umask 077 && printf "[Interface]\nPrivateKey = " | sudo tee /etc/wireguard/wg0.conf > /dev/null)
wg genkey | sudo tee -a /etc/wireguard/wg0.conf | wg pubkey | sudo tee /etc/wireguard/publickey
第一条命令将初始配置文件的内容写入
/etc/wireguard/wg0.conf
。在子 shell 中使用
umask
值,以便在不影响常规环境的情况下创建具有受限权限的文件。
第二条命令使用 WireGuard 的
wg
命令生成私钥,并将其直接写入我们的受限配置文件。我们还将密钥传回
wg pubkey
命令,以推导出相关的公钥,并将其写入一个名为
/etc/wireguard/publickey
的文件,以便轻松参考。我们需要将此文件中的密钥与第二台服务器交换,以定义我们的配置。
创建初始配置文件
接下来,我们将在编辑器中打开配置文件,设置一些其他细节:
sudo nano /etc/wireguard/wg0.conf
在其中,您应该看到在名为
[Interface]
的部分中定义的生成的私钥。此部分包含连接的本地端的配置。
配置接口部分
我们需要定义此节点将使用的 VPN IP 地址以及它将用于从对等方接收连接的端口。首先添加
ListenPort
和
SaveConfig
行,使您的文件看起来像这样:
[Interface]
PrivateKey = 生成的私钥
ListenPort = 5555
SaveConfig = true
这设置了 WireGuard 将监听的端口。这可以是任何空闲的可绑定端口,但在本指南中,我们将为两台服务器都在端口 5555 上设置我们的 VPN。在每个主机上将
ListenPort
设置为您选择的端口:
我们还将
SaveConfig
设置为
true
。这将告诉
wg-quick
服务在关闭时自动将其活动配置保存到此文件中。
接下来,在每台服务器上为
wg-quick
服务设置网络信息时,为每台服务器添加一个唯一的
Address
定义。我们将使用 10.0.0.0/24 子网作为我们的 VPN 的地址空间。对于每台计算机,您需要在此范围内选择一个唯一的地址(10.0.0.1 到 10.0.0.254),并使用 CIDR 表示法指定地址和子网。
我们将为我们的第一台服务器分配一个地址 10.0.0.1,以 CIDR 表示法表示为 10.0.0.1/24:
[environment third]
[Interface]
PrivateKey = 生成的私钥
ListenPort = 5555
SaveConfig = true
Address = 10.0.0.1/24
对于我们的第二台服务器,我们将地址定义为 10.0.0.2,这将给我们一个 CIDR 表示为 10.0.0.2/24:
[environment second]
[Interface]
PrivateKey = 生成的私钥
ListenPort = 5555
SaveConfig = true
Address = 10.0.0.2/24
这是
[Interface]
部分的结束。
我们可以在配置文件中输入关于服务器对等方的信息,也可以稍后使用
wg
命令手动输入。如上所述,
wg-quick
服务与
SaveConfig
选项设置为
true
将意味着对等方信息最终将使用任一方法写入文件。
为了演示定义对等方身份的两种方式,我们将在第二台服务器的配置文件中创建一个
[Peer]
部分,但不在第一台服务器上创建。您现在可以保存并关闭第一台服务器(定义 10.0.0.1 地址的服务器)的配置文件。
定义对等节点部分
在仍然打开的配置文件中,在
[Interface]
部分的条目下创建一个名为
[Peer]
的部分。
首先将
PublicKey
设置为第一个服务器的公钥的值。您可以通过在另一台服务器上输入
cat /etc/wireguard/publickey
来找到这个值。我们还将设置
AllowedIPs
为隧道内有效的IP地址。由于我们知道第一个服务器正在使用的特定IP地址,我们可以直接输入该值,以
/32
结尾表示包含单个IP值的范围:
[environment second]
[Interface]
. . .
[Peer]
PublicKey = public_key_of_first_server
AllowedIPs = 10.0.0.1/32
最后,我们可以将
Endpoint
设置为第一个服务器的公共IP地址和WireGuard监听端口(在本示例中我们使用了端口5555)。如果WireGuard从此对等方接收到合法流量,它将更新此值,从而使VPN能够适应漫游条件。我们设置初始值以便此服务器可以发起联系:
[environment second]
[Interface]
. . .
[Peer]
PublicKey = public_key_of_first_server
AllowedIPs = 10.0.0.1/32
Endpoint = public_IP_of_first_server:5555
完成后,保存并关闭文件以返回到命令提示符。
启动VPN并连接对等方
现在我们准备在每台服务器上启动WireGuard并配置两个对等方之间的连接。
打开防火墙并启动VPN
首先,在每台服务器上打开防火墙中的WireGuard端口:
sudo ufw allow 5555
现在,使用我们定义的
wg0
接口文件启动
wg-quick
服务:
sudo systemctl start wg-quick@wg0
这将在机器上启动
wg0
网络接口。我们可以通过输入以下命令来确认:
ip addr show wg0
[secondary_label 第一台服务器上的输出]
[environment third]
6: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1
link/none
inet 10.0.0.1/24 scope global wg0
valid_lft forever preferred_lft forever
我们可以使用
wg
工具查看VPN的活动配置信息:
sudo wg
在没有对等定义的服务器上,显示将类似于以下内容:
[secondary_label 第一台服务器上的输出]
[environment third]
interface: wg0
public key: public_key_of_this_server
private key: (hidden)
listening port: 5555
在已经定义了对等配置的服务器上,输出还将包含该信息:
[secondary_label 第二台服务器上的输出]
[environment second]
interface: wg0
public key: public_key_of_this_server
private key: (hidden)
listening port: 5555
peer: public_key_of_first_server
endpoint: public_IP_of_first_server:5555
allowed ips: 10.0.0.1/32
为了完成连接,我们现在需要使用
wg
命令将第二台服务器的对等信息添加到第一台服务器上。
在命令行上添加缺失的对等信息
在第一台服务器(不显示对等信息的那台)上,使用以下格式手动输入对等信息。第二台服务器的公钥可以在第二台服务器的
sudo wg
输出中找到:
[environment third]
sudo wg set wg0 peer public_key_of_second_server endpoint public_IP_of_second_server:5555 allowed-ips 10.0.0.2/32
您可以通过在第一台服务器上再次输入
sudo wg
来确认信息现在在活动配置中:
[environment third]
sudo wg
[secondary_label 第一台服务器上的输出]
[environment third]
interface: wg0
public key: public_key_of_this_server
private key: (hidden)
listening port: 5555
peer: public_key_of_second_server
endpoint: public_IP_of_second_server:5555
allowed ips: 10.0.0.2/32
我们的点对点连接现在应该可用。尝试从第一台服务器向第二台服务器的VPN地址ping:
[environment third]
ping -c 3 10.0.0.2
[secondary_label 第一台服务器上的输出]
[environment third]
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.635 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.615 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.841 ms
--- 10.0.0.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.615/0.697/0.841/0.102 ms
如果一切正常,您可以通过重新启动服务将第一台服务器上的配置保存回
/etc/wireguard/wg0.conf
文件:
sudo systemctl restart wg-quick@wg0
如果您希望在启动时启动隧道,可以通过输入以下命令在每台机器上启用该服务:
sudo systemctl enable wg-quick@wg0
VPN隧道现在应该在每次启动机器时自动启动。
结论
由于其灵活性、轻量级实现和现代密码学,WireGuard 是许多用例的绝佳选择。在本指南中,我们在两台 Ubuntu 16.04 服务器上安装了 WireGuard,并将每个主机配置为服务器,与其对等点之间建立了点对点连接。这种拓扑结构非常适合建立服务器之间的通信,其中每一方都是平等的参与者,或者主机可能需要与其他服务器建立临时连接的情况。
版权归原作者 白如意i 所有, 如有侵权,请联系我们删除。