如何在 Ubuntu 20.04 上设置 WireGuard VPN 服务器和客户端

使用 Wireguard 设置自托管 VPN

一个 VPN(虚拟专用网络) 允许用户远程连接到专用网络,就像用户的计算机直接连接到专用网络一样。该技术最初的开发目的是允许远程访问公司的内部专用网络,供实际不在内部网络位置的员工使用。

VPN Server 部署在内部网络的位置。该服务器位于公共网络上,员工可以使用 VPN 客户端进行访问。连接到 VPN Server 需要身份验证。 VPN Server 和 VPN Client 之间的通信使用隧道协议进行保护。请注意,此通信可能会或可能不会加密,但通常在大多数 VPN 协议中它是加密的。

VPN的另一个用途是 访问互联网时获得匿名 或规避访问某些网站时施加的地域限制。在这种情况下,用户想要连接的网络不是专用网络,而是 Internet。

多年来已经开发了许多 VPN 协议。这些协议利用不同的隧道协议和加密算法在服务器和客户端之间进行通信。

最近得到广泛使用的一种这样的协议是 线卫.与众所周知的传统 VPN 协议(例如 OpenVPN、IPSec)相比,Wireguard 更轻、更简单且性能更高。它已经在 Windows、Mac OS 和大量 Linux 发行版中实现。在 Linux 中,它是作为内核模块实现的。它在 Ubuntu 20.04 的官方存储库中可用。

在本文中,我们将看到如何在 Ubuntu 20.04 中设置 Wireguard VPN 服务器和客户端。

安装

在本文中,我将在 Ubuntu 20.04 Linode 上设置 Wireguard 服务器,并在我的本地机器上使用 Ubuntu 20.04 设置 Wireguard 客户端。

线卫 安装 Wireguard 服务器和客户端。 运行以下命令 在服务器机器和客户端机器上。

sudo apt 安装wireguard

服务器配置

安全密钥

我们需要生成一组公钥/私钥对 为了验证和保护 Wireguard 连接。这可以使用以下命令完成:

sudo su cd /etc/wireguard umask 077 wg genkey | t 恤 private_key | wg pubkey > public_key

请注意,我们以超级用户身份执行所有配置任务。原因是访问目录 /etc/wireguard 普通用户无法访问,普通用户仅凭 sudo 权限无法获得目录访问权限。

接下来,我们将文件创建掩码设置为 077.这意味着每当任何进程在此文件夹中创建新文件时,其权限将自动用 077 屏蔽。例如。如果在此文件夹中创建了一个具有 777 权限的文件,它会被自动屏蔽并且权限实际上变为 700。这样做是为了只有文件的所有者拥有该文件的所有权限,而其他所有人都没有权限。

在下一行, 我们生成公钥/私钥对 为服务器。它们保存在文件中 私钥公钥.要查看密钥,请运行:

cat private_key cat public_key

复制私钥,我们在下一步需要它。

笔记: 永远不要公开分享你的私钥!

配置文件

让我们为 Wireguard 服务器创建一个配置文件。您可以为文件选择任何名称。我们将创建一个文件 配置文件 在这个例子中。

vim wg0.conf

将以下内容添加到文件中。

【接口】地址= 10.20.43.1/24 SaveConfig = true ListenPort = 51190 PrivateKey = PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o -j 伪装; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j 伪装; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o -j 伪装 

将我们之前复制的私钥粘贴到上面代码的第 5 行。

我们必须在不同的(虚拟)子网上配置 Wireguard 比服务器的 IP 地址。在这里,我为服务器使用了 10.20.43.1,将使用 10.20.43.2 作为客户端。这里可以使用任何子网。要获取服务器和接口的 IP 地址,请运行:

如果配置

记下服务器的 IP 地址。这在客户端配置期间是必需的。

如上图所示,服务器使用的接口是 eth0.接口名称可以根据用户的网络而有所不同,可以是 无线局域网0 或者 wlp2s0 如果用户使用无线网卡连接到 WiFi 网络。

更换 张贴下发 使用您的界面;在这个例子中是 eth0.张贴下发 指令用于指定分别在服务器启动和停止时应运行哪些命令。在我们的示例中,我们使用 iptables 命令设置 IP 规则,以便客户端共享服务器的 IP 地址。一旦服务器停止,规则将下降。

保存并退出文件。使用vim时,按 退出,然后键入 :wq 并按下 进入 保存并退出。

如果您使用的是 飞翔 服务器上的防火墙,我们需要允许 UDP 连接到 VPN 服务器的端口 51190。

ufw 允许 51190/udp

启动服务

现在配置完成后,我们可以启动 Wireguard VPN 服务。

启用 在启动时启动的服务,运行:

systemctl 启用 wg-quick@wg0

注意这里 工作组 是配置文件的名称。

开始 服务,运行:

服务 wg-quick@wg0 开始

核实 服务已成功启动:

服务 wg-quick@wg0 状态

验证接口 我们在已经启动的配置文件中创建,使用IP命令。

ip a 显示 wg0

Wireguard VPN 服务器现已设置并运行。现在让我们配置客户端。

客户端配置

Wireguard 的客户端配置或多或少与服务器配置相同。我们为客户端生成密钥,然后创建一个配置文件。

安全密钥

生成公钥/私钥 为客户端配对,运行:

sudo su cd /etc/wireguard umask 077 wg genkey | tee client_private_key | wg 公钥> client_public_key

客户端的公钥和私钥现在分别在文件中生成 client_private_keyclient_public_key.

检查它们是否已创建,使用 命令。

cat client_private_key cat client_public_key

复制显示的私钥,因为我们需要将其添加到客户端的配置文件中。

配置文件

创建配置文件 用你想要的任何名字。我们将使用名称创建它 wg0-客户端 对于这个例子。

vim wg0-client.conf

添加以下配置。

[接口] # 客户端地址的IP地址和私钥= 10.20.43.2/24 PrivateKey = [Peer] #服务器的公钥、IP地址和端口 PublicKey = Endpoint = :51190 AllowedIPs = 0.0.0.0/0, : :/0

输入客户端的子网地址。如前所述,我们使用 10.20.43.2 对于此示例中的客户端。

添加客户端私钥 在上一步中生成到上面配置代码中的第 4 行。

在“Peer”下,我们添加了有关 Wireguard VPN 服务器的信息 我们想连接到。

输入服务器的公钥。输入 服务器的 IP 地址,我们之前注意到,并以给定的格式移植到 端点.这是我们在服务器配置文件中指定的端口,也是服务器上启动 VPN 服务的端口。

允许的 IP 应按给定 (0.0.0.0/0) 输入,以便客户端使用的动态公共 IP 上的任何请求将始终转发到 VPN 服务器。

保存并退出文件。使用vim时,按 退出,然后键入 :wq 并按下 进入 保存并退出。

启用客户端服务 在每次启动时运行,并启动它。

systemctl enable wg-quick@wg-client service wg-quick@wg-client start

核实 如果服务已经启动。

服务 wg-quick@wg-client 状态

向服务器添加对等点

现在我们已经启动并运行了 VPN 服务器和客户端。但是,除非我们在服务器和客户端之间建立对等连接,否则不会在两者之间建立安全隧道。

回去 到服务器。第一的, 停止 VPN 服务.

服务 wg-quick@wg0 停止

接下来打开配置文件 添加对等体的配置 (客户)。

vim /etc/wireguard/wg0.conf

附加 文件的以下几行。

[Peer] PublicKey = AllowedIPs = 10.20.43.2/32

现在, 再次启动VPN服务.

服务 wg-quick@wg0 开始

而已!这是 Wireguard VPN 客户端和服务器设置所需的所有配置。现在让我们测试我们的 VPN。

测试 VPN

首先,让我们从客户端到服务器做一个简单的 ping,以确保 VPN 隧道通信正常工作。 在客户端运行以下命令:

平 10.20.43.1

下一个, 打开网络浏览器并打开任何网站 检查您是否能够从客户端计算机连接到 Internet。您还可以使用命令行检查您的互联网连接 获取.

获取 

现在,我们已经检查了隧道连接和 Internet 连接。如果两者都正常工作,我们现在需要确保所有到达客户端的互联网流量都通过服务器。

为此,我们只需要检查 Internet 上看到的客户端的 IP 地址。一种方法是访问 whatsmyip.org。或者从命令行,我们可以使用 Curl 查询另一个名为 IP 信息的类似服务。

在客户端机器上运行以下命令

curl //ipinfo.io/ip

是的。它是托管 VPN 服务器的 Linode 的公共 IP 地址。这就是使用 VPN 实现匿名的方式,因为现在在整个 Internet 上都可以看到 VPN 服务器的 IP,而不是您计算机的 IP。

结论

易于设置是 Wireguard 相对于 OpenVPN 等传统 VPN 软件最重要的优势之一,OpenVPN 需要更高级别的网络和路由知识才能设置。但是,缺乏详细的 Wireguard 官方文档,如果您的 Wireguard 设置抛出错误或未按预期工作,则可能会导致问题。

尽管如此,如果您想要一个自托管的 VPN 来通过 Internet 进行安全通信,Wireguard 是一个很好的选择。要了解有关 Wireguard 及其使用的协议和技术的更多信息,您可以查看官方网站。