VPN技术 · 2023年11月10日 0

在Ubuntu上配置WireGuard

在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.servicesystemctl enable NetworkManager-wait-online.service

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

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

结论

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