在Ubuntu上使用WireGuard

介绍

WireGuard是一个非常简单,快速和现代化的VPN解决方案,它利用了最先进的密码技术。根据一些不同的基准测试,WireGuard是目前与IPSec和OpenVPN相比最快的VPN解决方案。在本指南中,您将学习如何在两台服务器之间建立WireGuard连接。

要求

  • Ubuntu或Debian
  • 内核4.1或更新

安装和克隆

WireGuard本身的安装非常简单,只需4个步骤即可完成。首先,我们必须安装内核头文件以及构建必需品和各种其他必需的软件包:

apt-get install libmnl-dev linux-headers-$(uname -r) build-essential make git

完成此步骤后,我们可以继续从Git存储库中提取WireGuard:

git clone https://git.zx2c4.com/WireGuard

建立

截至目前,我们已经安装了所有必需的软件包以及克隆的WireGuard WireGuard/。我们可以继续使用WireGuard的构建过程并安装它:

cd WireGuard/src/makemake install

make install过程完成后没有错误,我们可以继续在其他服务器上运行完全相同的步骤。完成后,跳转到本指南的下一部分 – 配置过程。

组态

使用WireGuard创建隧道非常简单,只需使用几个命令即可完成。我们首先创建VPN接口:

ip link add dev wg0 type wireguard

接下来,我们生成私钥,用于加密双方之间的数据:

umask 077wg genkey > private

在这一点上,我们已经完成了创建隧道本身的所有要求:

wg set wg0 listen-port 51920 private-key ~/private peer <PEER_PUBLIC_KEY> allowed-ips 192.168.2.0/24 endpoint <OTHER_SERVER_IP>:51920

注意:您必须在两台服务器上运行此命令,并调整以下参数:PEER_PUBLIC_KEYOTHER_SERVER_IP

为了读取两台服务器上的公钥,我们必须运行以下命令将私钥转换为公钥,然后读取它:

wg pubkey < private > publiccat public

最后,我们可以将IP地址分配给我们的接口(.1对于第一台服务器,.2对于第二台服务器):

ip link set up dev wg0ip addr add 192.168.2.1/24 dev wg0

测试

尝试在第一台服务器上使用以下命令ping其他服务器:

ping 192.168.2.2

如果您看到来自服务器的响应,则表明您的安装正确并且VPN链接正在运行。如果您没有收到任何响应或错误,请查看您在两台服务器上执行的命令,并确认您已相应地调整了参数。

配置一个 VPN 服务器

Wireguard 自带一个快速创建和销毁 VPN 服务器的工具,wg-quick。注意这里使用的配置文件不是一个能被 wg setconf 有效的配置文件,并且你可能至少要把 eth0 改成你实际使用的。

服务器

/etc/wireguard/wg0server.conf
[Interface]
Address = 10.0.0.1/24  # This is the virtual IP address, with the subnet mask we will use for the VPN
PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = 51820
PrivateKey = [SERVER PRIVATE KEY]

[Peer]
PublicKey = [CLIENT PUBLIC KEY]
AllowedIPs = 10.0.0.2/32  # 这表示客户端只有一个 ip。

要使 iptables 规则生效,启用 IPv4 转发:

# sysctl net.ipv4.ip_forward=1

永久保留这项改变,向 /etc/sysctl.d/99-sysctl.conf 添加 net.ipv4.ip_forward = 1

使用 wg-quick up wg0server 启用 Interface,wg-quick down wg0server 用以关闭

客户端 (转发所有流量)

/etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.2/24  # The client IP from wg0server.conf with the same subnet mask
PrivateKey = [CLIENT PRIVATE KEY]
DNS = 10.0.0.1

[Peer]
PublicKey = [SERVER PUBLICKEY]
AllowedIPs = 0.0.0.0/0, ::0/0
Endpoint = [SERVER ENDPOINT]:51820
PersistentKeepalive = 25

使用 wg-quick up wg0 来启用 Interface, 使用 wg-quick down wg0 来关闭。

使用 systemctl enable [email protected] 来自动启动。

如果你使用 NetworkManager, 可能有必要启用 NetworkManager-wait-online.service systemctl enable NetworkManager-wait-online.service

或者你使用的是 systemd-networkd, 启用 systemd-networkd-wait-online.service systemctl enable systemd-networkd-wait-online.service

等待所有设备就绪再尝试 wireguard 连接

结论

WireGuard是一个非常易于使用的安全VPN解决方案。它适用于许多网络拓扑,包括(但不限于):服务器之间的连接,主干网使用,个人VPN网络和漫游VPN网络。有关其他文档,请访问官方网站。快乐黑客!

科学上网教程~节点 希望大家喜欢快乐