0


如何在 Ubuntu 16.04 上使用 WireGuard 创建点对点 VPN

简介

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,并将每个主机配置为服务器,与其对等点之间建立了点对点连接。这种拓扑结构非常适合建立服务器之间的通信,其中每一方都是平等的参与者,或者主机可能需要与其他服务器建立临时连接的情况。


本文转载自: https://blog.csdn.net/rubys007/article/details/138402798
版权归原作者 白如意i 所有, 如有侵权,请联系我们删除。

“如何在 Ubuntu 16.04 上使用 WireGuard 创建点对点 VPN”的评论:

还没有评论