文章目录

WireGuard 是一个使用 state-of-the-art 加密的现代 VPN (Virtual Private Network) 技术。和其他类似的方案相比,例如:IPsec 和 OpenVPN。 WireGuard 更快,更容易配置,并且性能更好。

WireGuard是一个跨平台产品,并且几乎可以在任何地方运行,包括:Linux,Windows,Android 和 macOS。Wireguard 是一个 P2P VPN;它不使用客户端/服务端模式。依赖于它的配置,一个节点即可以作为服务器,或者客户端。

WireGuard通过在每一个节点设备上创建一个网络接口作为一个隧道。节点之间授权通过交换和验证公钥,像 SSH 模式一样。公钥被映射到在隧道中允许的 IP 地址列表上。VPN 流量通过 UDP 协议封装。

在这个指南中,我们将会在 CentOS 8 机器上设置 WireGuard 作为 VPN 服务器。我们也会向你展示如何配置 WireGuard 作为一个客户端。客户端的流量将会通过 CentOS 8 服务器。这个设置可以用来防止中间人攻击,匿名上网,突破地理限制,或者允许远程协作。

一、前提条件

你将需要一台 CentOS 8 服务器,你可以以 root 或者 其他拥有 sudo 权限用户身份登录。

二、设置 WireGuard 服务器

我们将会在 CentOS 机器上安装 WireGuard 并且设置它作为一个服务器。我们将会配置系统来引导客户端的流量通过它。

2.1 在 CentOS 8 上安装 WireGuard

WireGuard 工具和内核模块在 Epel 和 Elrepo 软件源中可用。想要将这些软件源添加到你的系统,运行下面的命令:

sudo dnf install epel-release elrepo-release 

一旦完成,安装 WireGuard 软件包:

sudo dnf install kmod-wireguard wireguard-tools

你将会被要求导入软件源 GPG Keys。如果问到时,输入y

2.2 配置 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 流量。

这个设备可以通过命令行使用ipwg或者通过文本编辑器创建配置文件来设置。

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

sudo nano /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

这个接口可以被命名为任何东西。不管怎么样,我们推荐使用类似wg0或者wgvpn0进行命名。这个接口中的设置意义如下:

  • Address - 一个使用逗号分隔的 v4 或者 v6 IP 地址列表,用于wg0接口。使用 局域网 IP 范围(10.0.0.0/8, 172.16.0.0/12 or 192.168.0.0/16)。
  • ListenPort - WireGuard 将会接受进入连接的端口
  • PrivateKey - 一个由wg genkey命令生成的私钥。(想要查看文件内容:sudo cat /etc/wireguard/privatekey
  • SaveConfig - 当设置为 true 时,在关机时,当前接口状态将会被保存到配置文件中。
  • PostUp - 在接口启动时执行的命令或者脚本。在这个例子中,我们使用 firewall-cmd 来打开WireGuard端口并启用 伪装。 这将允许流量离开服务器,使得 VPN 客户端可以访问网络。
  • PostDown - 在接口停用之前执行的命令或者脚本。一旦接口停止,防火墙规则将会被移除,网络接口将会下线。

wg0.confprivatekey文件不应该对普通用户可读。使用 chmod 将权限修改为 600

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

一旦完成,使用配置文件中的指定配置,将wg0接口启用:

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 a show wg0来验证接口状态:

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

启用 WireGuard 开机启动,运行下面的命令:

sudo systemctl enable wg-quick@wg0

2.3 服务器网络

想要 NAT 运行,我们需要启用 IP 转发。打开/etc/sysctl.d/99-custom.conf文件,并且添加或者取消下面行的注释:

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

保存文件,并且应用修改:

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
[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

在接口段和服务器上的意思是一样的:

  • Address - 一个使用逗号分隔的 v4 或者 v6 IP 地址列表,用于wg0接口。
  • PrivateKey - 想要查看客户端文件内容运行:sudo cat /etc/wireguard/privatekey

在节点段,包含下面的字段:

  • PublicKey - 你想要连接的节点上的公钥。(服务器/etc/wireguard/publickey文件内容)。
  • Endpoint - 你想要连接的节点的 IP 地址或者主机名,加上分号,再加上远程节点监听的端口号。
  • AllowedIPs - 一个以逗号分隔的 v4 或者 v6 IP 地址列表。我们使用0.0.0.0/0 因为我们需要引导流量,并且希望服务器节点发送任何源 IP 的包。

如果你需要配置其他的客户端,仅仅需要重复同样的步骤,使用不同的私有 IP 地址。

四、Windows 客户端设置

一个公钥被自动创建,并且显示在屏幕上。

输入隧道名字,并且编辑配置文件如下:

[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 服务器,加上分号,再加上 WireGuard 端口(51820)。
  • AllowedIPs - 0.0.0.0/0

一旦完成,点击"Save"按钮。

五、将节点添加到服务器

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

sudo wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.0.0.2

确保修改CLIENT_PUBLIC_KEY为你在客户端机器上修改的公钥(sudo cat /etc/wireguard/publickey),并且调整客户端 IP 地址。Windows 用户可以从 WireGuard 应用中拷贝公钥。

一旦完成,返回客户端机器,并且使隧道接口上线。

5.1 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 服务器地址。

想要停止隧道,将wg0接口下线:

sudo wg-quick down wg0

5.2 Windows 客户端

如果你在 Windows 上安装了 WireGuard。点击"Activate"按钮。一旦节点连接,隧道状态,将会变成 Active:

六、总结

我们已经展示了如何在 CentOS 8 机器上安装 WireGuard 并且配置为一个 VPN 服务器。这个设置允许你匿名上网,保证流量数据私有。




如果你有任何疑问,请通过以下方式联系我们:

微信:

微信群: 加上面的微信,备注微信群

QQ: 3217680847

QQ 群: 82695646 雪梦科技交流群

原文 :https://linuxize.com/post/how-to-set-up-wireguard-vpn-on-centos-8/

    版权声明:本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。知识共享许可协议

相关推荐