WireGuard是一种具有最新加密技术的现代VPN(虚拟专用网)与IPsec和 OpenVPN

等其他类似解决方案相比,它更快,更易于配置且性能更高。

WireGuard是跨平台的,几乎可以在任何地方运行,包括Linux,Windows,Android和macOS。 Wireguard是对等VPN。 它不是基于客户端-服务器模型。 根据其配置,对等方可以充当传统的服务器或客户端。

WireGuard 通过在充当tunnel隧道的每个对等设备上创建网络接口来工作。 对等方通过交换和验证公共密钥(类似于SSH模型)来相互认证。 公钥与隧道tunnel中允许的IP地址列表进行映射。 VPN流量封装在UDP中。

本教程介绍了如何在充当VPN服务器的CentOS 8计算机上设置WireGuard。 我们还将向您展示如何将WireGuard配置为客户端。 客户端的流量将通过CentOS 8服务器进行路由。 此设置可用于防御中间人攻击,匿名浏览网络,绕过受地域限制的内容或允许在家工作的同事安全地连接到公司网络。

先决条件

您需要一台CentOS 8服务器,您可以使用 sudo权限以root或帐户身份访问。

设置WireGuard服务器

我们将从在CentOS计算机上安装WireGuard并将其设置为充当服务器开始。 我们还将配置该系统以通过它路由客户端的流量。

在CentOS 8上安装WireGuard

WireGuard工具和内核模块可从Epel和Elrepo信息库安装。 要将存储库添加到您的系统,请运行以下命令:

sudo dnf install epel-release elrepo-release 

完成后,安装WireGuard软件包:

sudo dnf install kmod-wireguard wireguard-tools

系统可能会要求您导入存储库GPG密钥。 出现提示时,键入y

配置WireGuard

wireguard-tools软件包包括两个名为wgwg-quick的命令行工具,可用于配置和管理WireGuard接口。

我们将VPN服务器配置存储在/etc/wireguard目录中。 在CentOS上,不会在安装过程中创建此目录。 运行以下命令以创建目录

sudo mkdir /etc/wireguard

/etc/wireguard目录中生成公钥和私钥。

wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey

您可以使用 cat less 查看文件。 私钥永远不应与任何人共享。

现在已生成密钥,下一步是配置将路由VPN通信的隧道tunnel设备。

可以使用 ip wg从命令行设置设备,也可以使用文本编辑器创建配置文件。

创建一个名为wg0.conf的新文件,并添加以下内容:

sudo nano /etc/wireguard/wg0.conf

/etc/wireguard/wg0.conf

[Interface]
Address = 10.0.0.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
PostUp     = firewall-cmd --zone=public --add-port 51820/udp && firewall-cmd --zone=public --add-masquerade
PostDown   = firewall-cmd --zone=public --remove-port 51820/udp && firewall-cmd --zone=public --remove-masquerade

该接口可以命名为任意名称,但建议使用诸如include wg0wgvpn0之类的名称。 接口interface部分中的设置具有以下含义:

  • Address-wg0接口的v4或v6 IP地址的逗号分隔列表。使用保留给专用网络的范围内的IP(10.0.0.0/8、172.16.0.0/12或192.168.0.0/16)。
  • ListenPort-在其上使用的端口WireGuard将接受传入的连接。
  • PrivateKey-由wg genkey命令生成的私钥。 (要查看运行的文件的内容:sudo cat /etc/wireguard/privatekey
  • SaveConfig-设置为true时,关闭接口时的当前状态保存到配置文件中。
  • PostUp-在启动接口interface之前执行的命令或脚本。在此示例中,我们使用firewall-cmd打开WireGuard端口并启用伪装。
  • PostDown-在关闭接口之前执行的命令或脚本,这将允许流量离开服务器,从而使VPN客户端可以访问Internet。接口interface关闭后,防火墙规则将被删除。

wg0.confprivatekey文件对普通用户不可读。 使用 chmod 将权限设置为600

sudo chmod 600 /etc/wireguard/{privatekey,wg0.conf}

完成后,使用配置文件中指定的属性打开wg0接口interface:

sudo wg-quick up wg0

该命令将输出以下内容:

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.0.1/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE

要查看接口状态和配置,请运行:

sudo wg show wg0
interface: wg0
  public key: My3uqg8LL9S3XZBo8alclOjiNkp+T6GfxS+Xhn5a40I=
  private key: (hidden)
  listening port: 51820

您还可以使用ip命令来验证接口状态:

ip a show wg0
4: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none 
    inet 10.0.0.1/24 scope global wg0
       valid_lft forever preferred_lft forever

要在启动时进入wg0接口interface,请运行以下命令:

sudo systemctl enable wg-quick@wg0

服务器网络

要使NAT正常工作,我们需要启用IP转发。 创建一个新文件/etc/sysctl.d/99-custom.conf,并添加以下行:

sudo nano /etc/sysctl.d/99-custom.conf

/etc/sysctl.d/99-custom.conf

net.ipv4.ip_forward=1

保存文件,然后使用 sysctl

应用更改

sudo sysctl -p /etc/sysctl.d/99-custom.conf
net.ipv4.ip_forward = 1

已经建立了将充当服务器的CentOS对等机。

Linux和macOS客户端设置

有关所有受支持平台的安装说明,请访问 https://wireguard.com/install/ 。 在Linux系统上,可以使用分发软件包管理器来安装软件包,而在macOS上,可以使用brew安装软件包。 安装WireGuard后,请按照以下步骤配置客户端设备。

设置Linux和macOS客户端的过程几乎与服务器相同。 首先生成公钥和私钥:

wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey

创建文件wg0.conf并添加以下内容:

sudo nano /etc/wireguard/wg0.conf

/etc/wireguard/wg0.conf

[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24


[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP_ADDRESS:51820
AllowedIPs = 0.0.0.0/0

接口interface部分中的设置与设置服务器时的含义相同:

  • Address-wg0接口的v4或v6 IP地址的逗号分隔列表。
  • PrivateKey-要查看客户端计算机上文件的内容,请运行:sudo cat /etc/wireguard/privatekey

对等部分包含以下字段:

  • PublicKey-您要连接的对等方的公共密钥。 (服务器/etc/wireguard/publickey文件的内容。)
  • Endpoint-您要连接的对等方的IP或主机名,后跟冒号,然后是远程对等方在其上侦听的端口号。
  • AllowedIP-逗号分隔的v4或v6 IP地址列表,允许从该对等方进入的流量,并将该对等体向外的流量定向到该列表。 我们使用0.0.0.0/0是因为我们正在路由流量,并希望服务器对等方发送具有任何源IP的数据包。

如果您需要配置其他客户端,只需使用其他专用IP地址重复相同的步骤即可。

Windows客户端安装程序

WireGuard网站

下载并安装Windows msi软件包。

安装完成后,打开WireGuard应用程序,然后单击“添加隧道”;

将自动创建一个公钥对,并将其显示在屏幕上。

输入隧道的名称,然后按如下所示编辑配置:

[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24


[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP_ADDRESS:51820
AllowedIPs = 0.0.0.0/0

在接口部分,添加新行以定义客户端隧道地址。

在对等部分中添加以下字段:

  • PublicKey-CentOS服务器的公共密钥(/etc/wireguard/publickey文件)。
  • Endpoint-CentOS服务器的IP地址,后跟冒号和WireGuard端口(51820)。
  • 允许的IP-0.0.0.0/0

完成后,单击“保存”按钮。

将客户端对等方添加到服务器中

最后一步是向服务器添加客户端公钥和IP地址:

sudo wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.0.0.2

请确保使用在客户端计算机上生成的公钥(sudo cat /etc/wireguard/publickey)更改CLIENT_PUBLIC_KEY,并调整客户端IP地址(如果不同)。 Windows用户可以从WireGuard应用程序复制公钥。

完成后,返回客户端计算机并打开隧道tunnel接口。

Linux和macOS客户端

在Linux客户端上,运行以下命令以打开接口:

sudo wg-quick up wg0

现在,您应该连接到CentOS服务器,并且来自客户端计算机的流量应通过该服务器进行路由。 您可以使用以下方法检查连接:

sudo wg
interface: wg0
  public key: sZThYo/0oECwzUsIKTa6LYXLhk+Jb/nqK4kCCP2pyFg=
  private key: (hidden)
  listening port: 60351
  fwmark: 0xca6c

peer: My3uqg8LL9S3XZBo8alclOjiNkp+T6GfxS+Xhn5a40I=
  endpoint: XXX.XXX.XXX.XXX:51820
  allowed ips: 0.0.0.0/0
  latest handshake: 41 seconds ago
  transfer: 213.25 KiB received, 106.68 KiB sent

您也可以打开浏览器,键入“ what is my ip”,然后您应该会看到CentOS服务器IP地址。

要停止tunnel,请关闭wg0界面:

sudo wg-quick down wg0

Windows客户端

如果您在Windows上安装了WireGuard,请单击“激活”按钮。 连接对等体后,隧道状态将更改为“活动”:

结论

我们向您展示了如何在CentOS 8计算机上安装WireGuard并将其配置为VPN服务器。 通过此设置,您可以通过保持交通数据不公开来匿名上网。

如果您遇到任何问题,请随时发表评论。