WireGuard是一种使用最新加密技术的简单,快速且安全的VPN。它的源代码占用空间较小,旨在比其他VPN协议(如OpenVPN和IPSec)更快,更精简。WireGuard仍在开发中,但是即使处于未优化的状态,它也比流行的OpenVPN协议要快。
WireGuard配置就像设置SSH一样简单。通过服务器和客户端之间的公共密钥交换来建立连接。仅允许在其相应的服务器配置文件中具有其公钥的客户端连接。WireGuard设置了标准的网络接口(例如wg0和wg1),其行为与常见的eth0接口非常相似。这样就可以使用ifconfig和等标准工具来配置和管理WireGuard接口ip。
本指南将在运行Ubuntu 18.04的Linode和客户端之间配置简单的对等连接。客户端可以是您的本地计算机,也可以是其他Linode。
警告
不要将WireGuard用于关键应用。该项目仍在进行安全测试,将来可能会频繁收到重要更新。
在你开始之前固定链接
您将需要对Linode或具有sudo特权的用户帐户具有root访问权限。
设置系统的主机名。
注意
该GRUB 2内核需要本指南。现在GRUB 2,默认情况下,所有新Linode的所有发行版都使用内核启动。但是,如果您正在运行较早的发行版,则需要检查以查看正在运行哪个内核。您可以使用《更新内核指南》来检查您的内核版本并使用Cloud Manager对其进行更改。选择GRUB 2从引导设置:选择一个内核中的第4步下拉菜单更新你的Linode内核具有的Linode的云管理。
安装WireGuard固定链接
将Wireguard存储库添加到您的源列表中。然后,Apt将自动更新程序包缓存。
sudo add-apt-repository ppa:wireguard/wireguard
安装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服务器固定链接
为WireGuard服务器生成私钥和公钥对:
umask 077
wg genkey | tee privatekey | wg pubkey > publickey
这会将私钥和公钥都保存到您的主目录中。可以分别使用cat privatekey和查看它们cat publickey。
创建文件/etc/wireguard/wg0.conf并添加以下指示的内容。您需要在PrivateKey字段中输入服务器的私钥,并在字段中输入其IP地址Address。
/etc/wireguard/wg0.conf
1
2
3
4
5
6
7
[Interface]
PrivateKey =
Address = 10.0.0.1/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
地址定义WireGuard服务器的专用IPv4和IPv6地址。VPN网络中的每个对等方对于此字段均应具有唯一值。
ListenPort指定WireGuard将用于传入连接的端口。
PostUp和PostDown分别定义了在打开或关闭接口之后要运行的步骤。在这种情况下,iptables用于设置Linux IP伪装规则,以允许所有客户端共享服务器的IPv4和IPv6地址。一旦隧道断开,规则将被清除。
当服务运行时,只要添加新的对等方,SaveConfig就会告诉配置文件自动更新。
设置防火墙规则固定链接
允许SSH连接和WireGuard的VPN端口:
sudo ufw allow 22/tcp
sudo ufw allow 51820/udp
sudo ufw enable
验证设置:
sudo ufw status verbose
启动Wireguard服务固定链接
启动Wireguard:
wg-quick up wg0
注意
wg-quick可以方便地包装许多常用功能wg。您可以使用以下方式关闭wg0界面wg-quick down wg0
启用Wireguard服务以在启动时自动重新启动:
sudo systemctl enable wg-quick@wg0
使用以下两个命令检查VPN隧道是否正在运行:
sudo wg show
您应该看到类似的输出:
user@ubuntu:~$ sudo wg show
interface: wg0
public key: vD2blmqeKsV0OU0GCsGk7NmVth/+FLhLD1xdMX5Yu0I=
private key: (hidden)
listening port: 51820
ifconfig wg0
您的输出应类似于以下内容:
user@ubuntu:~$ ifconfig wg0
wg0: flags=209 mtu 1420
inet 10.0.0.1 netmask 255.255.255.0 destination 10.0.0.1
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文档。
如果尚未为客户端生成密钥对,请执行以下操作:
umask 077
wg genkey | tee privatekey | wg pubkey > publickey
在客户端和服务器的配置文件之间的主要区别,wg0.conf是它必须包含自己的 IP地址,并且不包含ListenPort,PostUP,PostDown,和SaveConfig值。
/etc/wireguard/wg0.conf
1
2
3
[Interface]
PrivateKey =
注意
停止sudo wg-quick down wg0客户端和服务器上的接口。
方法1固定链接
第一种方法是wg0.conf使用服务器的公用密钥,公用IP地址和端口直接编辑客户端文件:
/etc/wireguard/wg0.conf
1
2
3
4
[Peer]
PublicKey =
Endpoint =
AllowedIPs = 10.0.0.2/24, fd86:ea04:1115::5/64
wg在客户端和服务器上启用服务:
wg-quick up wg0
systemctl enable wg-quick@wg0
方法2固定链接
添加对等信息的第二种方法是使用命令行。由于SaveConfigWireguard服务器的配置文件中指定了该选项,因此该信息将自动添加到配置文件中。
从服务器运行以下命令。将示例IP地址替换为客户端的IP地址:
sudo wg set wg0 peer
验证连接。可以从客户端或服务器运行此命令:
sudo wg
无论选择哪种方法将对等信息添加到WireGuard,如果安装成功,命令的输出中都应该有一个Peer部分sudo wg。
user@localhost:~$ sudo wg
interface: wg0
public key: vD2blmqeKsV0OU0GCsGk7NmVth/+FLhLD1xdMX5Yu0I=
private key: (hidden)
listening port: 51820
peer: iMT0RTu77sDVrX4RbXUgUBjaOqVeLYuQhwDSU+UI3G4=
endpoint: 10.0.0.2:51820
allowed ips: 10.0.0.2/24, fd86:ea04:1115::/64
wg0.conf重新启动服务后,此对等部分将自动添加到。如果要立即将此信息添加到配置文件中,可以运行:
wg-quick save wg0
可以使用相同的过程添加其他客户端。
测试连接固定链接
返回客户端并ping服务器:
ping 10.0.0.1
sudo wg
运行wg命令的输出的最后两行应类似于:
latest handshake: 1 minute, 17 seconds ago
transfer: 98.86 KiB received, 43.08 KiB sent
这表明您现在在服务器和客户端之间建立了专用连接。您也可以从服务器ping客户端,以验证连接是否可以同时进行。
下一步固定链接
可以扩展本指南中使用的过程以配置网络拓扑。如前所述,Wireguard是一项不断发展的技术。如果使用WireGuard,则应监视官方文档和待办事项列表以获取重要更新和新功能/即将推出的功能。
加入我们的社区固定链接
查找答案,提出问题并帮助他人。
由Disqus提供动力的评论
本指南是根据CC BY-ND 4.0许可证发布的。