在Linode的Ubuntu安装WireGuard VPN

WireGuard是一种简单,快速,安全的VPN,采用最先进的加密技术。它具有较小的源代码占用空间,旨在比其他VPN协议(如OpenVPN和IPSec)更快,更精简。WireGuard仍在开发中,但即使在未优化的状态下,它也比流行的OpenVPN协议更快。

在Linode的Ubuntu安装WireGuard VPN 2

WireGuard配置就像设置SSH一样简单。通过服务器和客户端之间的公钥交换建立连接。只允许在其对应的服务器配置文件中具有其公钥的客户端进行连接。WireGuard设置标准网络接口(例如wg0wg1),其行为与常见的eth0接口非常相似。这样就可以使用ifconfig和等标准工具配置和管理WireGuard接口ip

目前,WireGuard仅适用于Linux。本指南将在运行Ubuntu 18.04的Linode与客户端之间配置简单的对等连接。客户端可以是您的本地计算机或其他Linode。


警告不要将WireGuard用于关键应用程序。
该项目仍在进行安全测试,未来可能会经常收到关键更新。

开始之前

  • 您需要root权限才能访问您的Linode或具有sudo权限的用户帐户。
  • 设置系统的主机名。

安装WireGuard

1将Wireguard存储库添加到源列表中。然后,Apt将自动更新包缓存。

sudo add-apt-repository ppa:wireguard/wireguard

2.安装Wireguard。该wireguard包将安装所有必需的依赖项。

sudo apt install wireguard

然后DKMS将构建Wireguard内核模块。如果成功,您将看到以下输出:

wireguard:
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/4.15.0-43-generic/updates/dkms/

depmod...................

DKMS: install completed.
Setting up wireguard (0.0.20181218-wg1~bionic) ...
Processing triggers for libc-bin (2.27-3ubuntu1) ...


如果安装完成但未显示输出,则很可能未正确配置内核。
要仔细检查,请发出
lsmod | grep wireguard命令。
它的输出不应该是空白的。
请参阅上一节以进行故障排除。

配置WireGuard服务器

1. 为WireGuard服务器生成私钥和公钥对:

umask 077
wg genkey | tee privatekey | wg pubkey > publickey

这将保存您的主目录的私钥和公钥; 他们可以分别用cat privatekey和观看cat publickey

2. 创建文件/etc/wireguard/wg0.conf并添加下面显示的内容。您需要在该PrivateKey字段中输入服务器的私钥,并在该字段中输入其IP地址Address

/etc/wireguard/wg0.conf
[Interface]
PrivateKey = <Private Key>
Address = 203.0.113.5/24, fd86:ea04:1115::1/64
ListenPort = 51820
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; 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 MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
SaveConfig = true
  • Address定义WireGuard服务器的专用IPv4和IPv6地址。VPN网络中的每个对等体都应具有该字段的唯一值。
  • ListenPort指定WireGuard将用于传入连接的端口。
  • PostUpPostDown分别定义了打开或关闭界面后要运行的步骤。在这种情况下,iptables用于设置Linux IP伪装规则以允许所有客户端共享服务器的IPv4和IPv6地址。一旦隧道关闭,规则将被清除。
  • SaveConfig告诉配置文件在服务运行时添加新对等体时自动更新。

设置防火墙规则

  1. 允许SSH连接和WireGuard的VPN端口:
sudo ufw allow 22/tcp
sudo ufw allow 51820/udp
sudo ufw enable

2. 验证设置:

sudo ufw status verbose

启动Wireguard Service

  1. 启动Wireguard:
wg-quick up wg0


wg-quick是许多常见功能的便捷包装
wg
您可以使用关闭wg0界面
wg-quick down wg0

2. 使Wireguard服务在引导时自动重新启动:

sudo systemctl enable [email protected]

3. 使用以下两个命令检查VPN隧道是否正在运行:

sudo wg show

您应该看到类似的输出:

[email protected]:~$ sudo wg show
interface: wg0
public key: vD2blmqeKsV0OU0GCsGk7NmVth/+FLhLD1xdMX5Yu0I=
private key: (hidden)
listening port: 51820
ifconfig wg0

您的输出应类似于以下内容:

[email protected]:~$ ifconfig wg0
wg0: flags=209 mtu 1420
inet 203.0.113.5 netmask 255.255.255.0 destination 203.0.113.5
inet6 fd86:ea04:1115::1 prefixlen 64 scopeid 0x0
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

Wireguard客户端

设置客户端的过程与设置服务器类似。当使用Ubuntu作为客户端的操作系统时,客户端和服务器之间的唯一区别是配置文件的内容。如果您的客户端使用Ubuntu,请按照上一节和本节中提供的步骤操作。有关其他操作系统的安装说明,请参阅WireGuard文档

1.如果您还没有为客户端生成密钥对:

umask 077
wg genkey | tee privatekey | wg pubkey > publickey

在客户端和服务器的配置文件之间的主要区别,wg0.conf是它必须包含自己的 IP地址,并且不包含ListenPortPostUPPostDown,和SaveConfig值。
/etc/wireguard/wg0.conf

[Interface]
PrivateKey = <Output of privatekey file that contains your private key>
Address = 203.0.123.12/24, fd86:ea04:1115::5/64

连接客户端和服务器

有两种方法可以向WireGuard添加对等信息; 本指南将演示这两种方法。

  1. 第一种方法是wg0.conf使用服务器的公钥,公共IP地址和端口直接编辑客户端的文件:/etc/wireguard/wg0.conf:
[Peer]
PublicKey = <Server Public key>
Endpoint = <Server Public IP>:51820
AllowedIPs = 203.0.123.12/24, fd86:ea04:1115::5/64

2.启用wg服务:

wg-quick up wg0
systemctl enable [email protected]

3.添加对等信息的第二种方法是使用命令行。由于SaveConfigWireguard服务器配置文件中指定的选项,此信息将自动添加到配置文件中。

从服务器运行以下命令。将示例IP地址替换为客户端的IP地址:

sudo wg set wg0 peer <Client Public Key> endpoint <Client IP address>:51820 allowed-ips 203.0.123.12/24,fd86:ea04:1115::5/64

4.验证连接。可以从客户端或服务器运行此命令:

sudo wg

无论您选择哪种方法将对等信息添加到WireGuard,如果设置成功,命令输出中应该有一个Peer部分sudo wg

  
[email protected]:~$ sudo wg
interface: wg0
public key: vD2blmqeKsV0OU0GCsGk7NmVth/+FLhLD1xdMX5Yu0I=
private key: (hidden)
listening port: 51820

peer: iMT0RTu77sDVrX4RbXUgUBjaOqVeLYuQhwDSU+UI3G4=
endpoint: 203.0.123.12:51820
allowed ips: 203.0.123.12/24, fd86:ea04:1115::/64

wg0.conf重新启动服务时,将自动添加此Peer部分。如果您想立即将此信息添加到配置文件中,您可以运行:

wg-quick save wg0

可以使用相同的过程添加其他客户端。

测试连接

返回客户端并ping服务器:

ping 192.168.2.1
sudo wg

运行wg命令的输出的最后两行应类似于:

  
latest handshake: 1 minute, 17 seconds ago
transfer: 98.86 KiB received, 43.08 KiB sent

这表示您现在在服务器和客户端之间拥有专用连接。您还可以从服务器ping客户端以验证连接是否同时工作。

可以扩展本指南中使用的过程以配置网络拓扑。如前所述,Wireguard是一项不断发展的技术。如果您使用WireGuard,则应监控官方文档待办事项列表,以获取关键更新和新/即将推出的功能。

1 comments On 在Linode的Ubuntu安装WireGuard VPN

Leave a reply:

Your email address will not be published.