WireGuard是一种现代、安全、跨平台和通用的VPN实现,采用了先进的加密技术。与IPsec相比,它旨在更快、更简单、更精简和更实用,并且希望在性能上超越OpenVPN。WireGuard可在多种环境中使用,并可部署在嵌入式接口、完全负载的骨干路由器和超级计算机上,支持Linux、Windows、macOS、BSD、iOS和Android等操作系统。
WireGuard的特点
WireGuard提供了一个极其简单但功能强大的界面,旨在像SSH一样易于配置和部署。其主要特点包括:
- 简单的网络接口
- 加密密钥路由
- 内置漫游和容器支持
需要注意的是,在撰写本文时,WireGuard仍在积极开发中:其某些部分正朝着稳定的1.0版本努力,而其他部分已经稳定运行。
测试环境
在本指南中,我们的设置(主机名和公共IP)如下:
- 节点1:tecmint-appserver1: 10.20.20.4
- 节点2:tecmint-dbserver1: 10.20.20.3
如何在Linux发行版中安装WireGuard
登录到两个节点并使用适当的命令安装WireGuard,具体如下:
在RHEL 8中安装WireGuard
bash
$ sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
$ sudo subscription-manager repos --enable codeready-builder-for-rhel-8-$(arch)-rpms
$ sudo yum copr enable jdoss/wireguard
$ sudo yum install wireguard-dkms wireguard-tools
在CentOS 8中安装WireGuard
bash
$ sudo yum install epel-release
$ sudo yum config-manager --set-enabled PowerTools
$ sudo yum copr enable jdoss/wireguard
$ sudo yum install wireguard-dkms wireguard-tools
在RHEL/CentOS 7中安装WireGuard
bash
$ sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
$ sudo curl -o /etc/yum.repos.d/jdoss-wireguard-epel-7.repo https://copr.fedorainfracloud.org/coprs/jdoss/wireguard/repo/epel-7/jdoss-wireguard-epel-7.repo
$ sudo yum install wireguard-dkms wireguard-tools
在Fedora中安装WireGuard
bash
$ sudo dnf install wireguard-tools
在Debian中安装WireGuard
```bash
```
在Ubuntu中安装WireGuard
bash
$ sudo add-apt-repository ppa:wireguard/wireguard
$ sudo apt-get update
$ sudo apt-get install wireguard
在OpenSUSE中安装WireGuard
bash
$ sudo zypper addrepo -f obs://network:vpn:wireguard wireguard
$ sudo zypper install wireguard-kmp-default wireguard-tools
配置WireGuard VPN隧道
在两个节点上完成WireGuard的安装后,您可以重启节点或使用以下命令从Linux内核中添加WireGuard模块:
bash
$ sudo modprobe wireguard
接下来,使用wg
工具在两个节点上生成base64编码的公钥和私钥,如下所示。
在节点1上
bash
$ umask 077
$ wg genkey > private_appserver1
在节点2上
bash
$ umask 077
$ wg genkey > private_dbserver1
$ wg pubkey < private_dbserver1
接下来,需要为WireGuard创建一个网络接口(例如wg0),并为新创建的网络接口分配IP地址(在本指南中,我们将使用网络192.168.10.0/24)。
在节点1上
bash
$ sudo ip link add dev wg0 type wireguard
$ sudo ip addr add 192.168.10.1/24 dev wg0
在节点2上
bash
$ sudo ip link add dev wg0 type wireguard
$ sudo ip addr add 192.168.10.2/24 dev wg0
要查看附加的网络接口及其IP地址,请使用以下IP命令:
bash
$ ip ad
接下来,将每个对等体的私钥分配给wg0网络接口,并启用该接口,如下所示。
在节点1上
bash
$ sudo wg set wg0 private-key ./private_appserver1
$ sudo ip link set wg0 up
在节点2上
bash
$ sudo wg set wg0 private-key ./private_dbserver1
$ sudo ip link set wg0 up
现在,两个链接都已启用,各自与其私钥相关联,运行wg
实用程序以检索对等体上的WireGuard接口配置。然后按照以下步骤创建WireGuard VPN隧道。
对等体(公钥)、允许的IP(网络/子网掩码)和端点(公共IP:端口)来自对方对等体。
在节点1上(使用节点2的IP和公钥)
bash
$ sudo wg
$ sudo wg set wg0 peer MDaeWgZVULXP4gvOj4UmN7bW/uniQeBionqJyzEzSC0= allowed-ips 192.168.10.0/24 endpoint 10.20.20.3:54371
在节点2上(使用节点1的IP和公钥)
bash
$ sudo wg
$ sudo wg set wg0 peer 6yNLmpkbfsL2ijx7z996ZHl2bNFz9Psp9V6BhoHjvmk= allowed-ips 192.168.10.0/24 endpoint 10.20.20.4:42930
测试WireGuard VPN隧道
一旦创建了WireGuard VPN隧道,使用WireGuard网络接口的地址ping对方对等体。然后再次运行wg
工具以确认对等体之间的握手,如下所示。
在节点1上
bash
$ ping 192.168.10.2
$ sudo wg
在节点2上
bash
$ ping 192.168.10.1
$ sudo wg
总结
到此为止!WireGuard是一个现代、安全、简单但功能强大且易于配置的VPN解决方案,展望未来。它仍在积极开发中,因此仍在进行中。您可以从WireGuard主页获取更多信息,特别是关于其内部工作原理和其他配置选项的信息。