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

介绍

[WireGuard] (https://www.wireguard.com/)是一款现代高性能的VPN,设计在提供强力安全的同时易于使用. WireGuard只专注于通过一个经公钥认证加密的网络接口提供当事人之间的安全连接. 这意味着,与大多数VPN不同,没有地貌学被强制,所以可以通过操纵周围的网络配置来实现不同的配置. 这种模式提供了巨大的力量和灵活性,可以根据个人需要加以应用.

WireGuard可以使用的最简单的地貌之一,就是点对点相接. 这在两台机器之间建立了安全的联系,没有中央服务器的调解。 这种类型的连接也可以在两个以上的成员之间被使用来建立网格VPN地貌,每个单独的服务器可以直接与它的同龄人交谈. 由于每个主机都处于平等的地位,这两个地貌最适合在服务器之间建立安全的信息传递,而不是使用单一的服务器作为路由流量的出入口.

在本指南中,我们将展示如何使用两个Ubuntu 16.04服务器与WireGuard建立点对点VPN连接,我们将首先安装软件,然后为每个主机生成加密密钥对。

前提条件

要跟随这个指南,你需要访问两个Ubuntu 16.04服务器. 在每个服务器上,你需要创建一个具有sudo特权的非根用户来执行管理操作。

  • [Ubuntu 16.04 的初始服务器设置(https://andsky.com/tech/tutorials/initial-server-setup-with-ubuntu-16-04)

当你准备继续时,与你的sudo用户登录每个服务器。

安装软件

WireGuard 项目为 Ubuntu 系统提供了最新包的 PPA. 在我们可以继续之前,我们需要在我们的两个服务器上安装 WireGuard. 在每个服务器上执行以下操作。

首先,将 WireGuard PPA 添加到系统中,以配置访问项目的包:

1sudo add-apt-repository ppa:wireguard/wireguard

当被要求将新包源添加到你的apt配置时,请按 ENTER 。一旦添加了 PPA,请更新本地包索引以下载有关新可用的包的信息,然后安装 WireGuard 内核模块和用户土地组件:

1sudo apt-get update
2sudo apt-get install wireguard-dkms wireguard-tools

接下来,我们可以在每个服务器上开始配置 WireGuard。

创建私钥

WireGuard VPN 中的每个参与者都会使用公共密钥加密来对同行进行身份验证,新同行之间的连接可以通过交换公共密钥并进行最少的配置来建立。

要生成私钥并将其直接写入 WireGuard 配置文件,请在每个服务器上键入以下 **:

1(umask 077 && printf "[Interface]\nPrivateKey = " | sudo tee /etc/wireguard/wg0.conf > /dev/null)
2wg genkey | sudo tee -a /etc/wireguard/wg0.conf | wg pubkey | sudo tee /etc/wireguard/publickey

第一个命令将配置文件的初始内容写入 /etc/wireguard/wg0.conf. 在子壳中写入 umask` 值,以便我们创建具有限制权限的文件,而不会影响我们的常规环境。

第二个命令使用WireGuard的wg命令生成一个私钥,并将其直接写入我们受限制的配置文件中。我们还将该密钥带回wg pubkey命令中,以获取相关的公共密钥,我们将其写入名为/etc/wireguard/publickey的文件中,以便轻松参考。

创建初始配置文件

接下来,我们将在编辑器中打开配置文件,以设置一些其他细节:

1sudo nano /etc/wireguard/wg0.conf

在内部,您应该看到生成的私钥定义在一个名为[接口]的部分中。

配置界面部分

我们需要定义这个节点将使用的VPN IP地址以及它将听取的端口,以便从同行连接。 首先,添加ListenPortSaveConfig行,让您的文件看起来像这样:

1[label /etc/wireguard/wg0.conf]
2[Interface]
3PrivateKey = generated_private_key
4ListenPort = 5555
5SaveConfig = true

这将设置WireGuard会收听的端口。这可能是任何免费的、可绑定的端口,但在本指南中,我们将为两个服务器设置我们的VPN端口5555。

我们还将SaveConfig设置为true,这将告诉wg-quick服务在关闭时自动将其活跃的配置保存到此文件中。

<美元 > [注] ** 注:** 当拯救快取'启用时,快取快取'服务将覆盖/etc/wireguard/wg0.conf'文件的内容。 如果您需要修改电线守护配置,请在编辑/etc/wireguard/wg0.conf前关闭wg-quick服务。 file 或使用 wg 命令对运行中的服务进行更改( 当服务关闭时, 这些更改将被保存在文件中)。 当wg-Quick`存储其活动配置时,服务运行时对配置文件所做的任何修改都将被覆盖。 < $ > (美元)

接下来,为每个服务器添加一个独特的地址定义,以便wg-quick服务在将WireGuard接口设置为网络信息。我们将使用10.0.0.0/24子网作为我们的VPN的地址空间。

我们将给我们的第一个服务器一个地址 10.0.0.1,在 CIDR 标注中表示为 10.0.0.1/24:

1[label /etc/wireguard/wg0.conf on first server]
2[environment third]
3[Interface]
4PrivateKey = generated_private_key
5ListenPort = 5555
6SaveConfig = true
7Address = 10.0.0.1/24

在我们的第二个服务器上,我们将该地址定义为 10.0.0.2,这给了我们10.0.0.2/24的CIDR表示:

1[label /etc/wireguard/wg0.conf on second server]
2[environment second]
3[Interface]
4PrivateKey = generated_private_key
5ListenPort = 5555
6SaveConfig = true
7Address = 10.0.0.2/24

这是接口部分的结尾。

如上所述,wg-quick服务与SaveConfig选项设置为true将意味着同行信息最终将用两种方法写入文件。

为了展示定义同行身份的两种方法,我们将在第二个服务器的配置文件中创建一个[Peer]部分,但不是第一个。

定义 peer 部分

在仍在打开的配置文件中,在[接口]部分中的条目下方创建一个名为[Peer]的部分。

您可以通过在相反的服务器上键入cat /etc/wireguard/publickey来找到这个值。我们还将AllowedIPs设置为在隧道内有效的IP地址。由于我们知道第一个服务器正在使用的特定IP地址,我们可以直接输入它,以/32结束,以表示包含单一IP值的范围:

1[label /etc/wireguard/wg0.conf on second server]
2[environment second]
3[Interface]
4. . .
5
6[Peer]
7PublicKey = public_key_of_first_server
8AllowedIPs = 10.0.0.1/32

最后,我们可以将终端设置为第一个服务器的公共 IP 地址和 WireGuard 倾听端口(我们在本例中使用端口 5555)。

1[label /etc/wireguard/wg0.conf on second server]
2[environment second]
3[Interface]
4. . .
5
6[Peer]
7PublicKey = public_key_of_first_server
8AllowedIPs = 10.0.0.1/32
9Endpoint = public_IP_of_first_server:5555

完成后,保存并关闭文件以返回命令提示。

启动VPN并连接到同行

我们现在准备在每个服务器上启动WireGuard,并配置我们两位同行之间的连接。

打开防火墙并启动VPN

首先,在每个服务器上的防火墙中打开 WireGuard 端口:

1sudo ufw allow 5555

现在,使用我们定义的wg0界面文件启动wg-quick服务:

1sudo systemctl start wg-quick@wg0

这将从机器上的wg0网络接口开始,我们可以通过键入来确认这一点:

1ip addr show wg0
1[secondary_label Output on first server]
2[environment third]
36: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1
4    link/none 
5    inet 10.0.0.1/24 scope global wg0
6       valid_lft forever preferred_lft forever

我们可以使用wg工具查看有关VPN的活跃配置的信息:

1sudo wg

在没有同行定义的服务器上,显示器将看起来像这样:

1[secondary_label Output on first server]
2[environment third]
3interface: wg0
4  public key: public_key_of_this_server
5  private key: (hidden)
6  listening port: 5555

在已定义对等配置的服务器上,输出也会包含这些信息:

 1[secondary_label Output on second server]
 2[environment second]
 3interface: wg0
 4  public key: public_key_of_this_server
 5  private key: (hidden)
 6  listening port: 5555
 7
 8peer: public_key_of_first_server
 9  endpoint: public_IP_of_first_server:5555
10  allowed ips: 10.0.0.1/32

要完成连接,我们现在需要使用wg命令将第二个服务器的匹配信息添加到第一个服务器。

在命令行中添加缺失的同行信息

在第一个服务器上(不显示同行信息的服务器)使用以下格式手动输入同行信息:第二个服务器的公共密钥可以在第二个服务器的sudo wg输出中找到:

1[environment third]
2sudo 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来确认信息现在处于活跃配置中:

1[environment third]
2sudo wg
 1[secondary_label Output on first server]
 2[environment third]
 3interface: wg0
 4  public key: public_key_of_this_server
 5  private key: (hidden)
 6  listening port: 5555
 7
 8peer: public_key_of_second_server
 9  endpoint: public_IP_of_second_server:5555
10  allowed ips: 10.0.0.2/32

我们的点对点连接现在应该可用。 尝试从第一个服务器中 ping 第二个服务器的VPN地址:

1[environment third]
2ping -c 3 10.0.0.2
 1[secondary_label Output on first server]
 2[environment third]
 3PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
 464 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.635 ms
 564 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.615 ms
 664 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.841 ms
 7
 8--- 10.0.0.2 ping statistics ---
 93 packets transmitted, 3 received, 0% packet loss, time 1998ms
10rtt min/avg/max/mdev = 0.615/0.697/0.841/0.102 ms

如果一切正常工作,您可以通过重新启动服务将第一个服务器上的配置保存回 /etc/wireguard/wg0.conf 文件:

1sudo systemctl restart wg-quick@wg0

如果您想在启动时启动隧道,您可以通过键入以下方式在每个机器上启用该服务:

1sudo systemctl enable wg-quick@wg0

VPN隧道现在应该在机器启动时自动启动。

结论

WireGuard是许多用例的绝佳选择,因为其灵活性,轻量化实现和现代加密。 在本指南中,我们在两个Ubuntu 16.04服务器上安装了WireGuard,并将每个主机配置为与同行点对点连接的服务器。

Published At
Categories with 技术
comments powered by Disqus