在CentOS上设置您自己的WireGuard VPN服务器

本教程将向您展示如何在CentOS上设置自己的WireGuard VPN服务器。 WireGuard专为Linux内核而设计。 它运行在Linux内核中,并允许您创建快速,现代且安全的VPN隧道。

WireGuard VPN的功能

  • 轻巧和超快的速度,将OpenVPN吹倒了。
  • 跨平台。 WireGuard可以在Linux,BSD,macOS,Windows,Android,iOS和OpenWRT上运行。
  • 用户身份验证通过交换类似于SSH密钥的公共密钥来完成。
  • 它将静态隧道IP地址分配给VPN客户端。 有些人可能不喜欢它,但是在某些情况下它可能很有用。
  • 移动设备可以在Wi-Fi和移动网络之间无缝切换,而不会断开任何连接。
  • 它旨在在大多数情况下替换OpenVPN和IPSec。

先决条件

本教程假定VPN服务器和VPN客户端都在运行 CentOS的 操作系统。

步骤1:在CentOS服务器和桌面上安装WireGuard

登录到CentOS服务器,然后运行以下命令来安装WireGuard。

CentOS的8

sudo dnf install elrepo-release epel-release -y
sudo dnf install kmod-wireguard wireguard-tools -y

CentOS的7

sudo yum install epel-release https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
sudo yum install yum-plugin-elrepo
sudo yum install kmod-wireguard wireguard-tools -y

然后使用相同的命令在本地CentOS计算机(VPN客户端)上安装WireGuard。

第2步:生成公共/私人密钥对

服务器

为WireGuard创建目录。

sudo mkdir -p /etc/wireguard/

在CentOS服务器上运行以下命令以创建一个公钥/私钥对,该对将保存在 /etc/wireguard/ 目录。

wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key

客户

为WireGuard创建目录。

sudo mkdir -p /etc/wireguard/

运行以下命令以在本地CentOS计算机(VPN客户端)上创建公钥/私钥对。

wg genkey | sudo tee /etc/wireguard/client_private.key | wg pubkey | sudo tee /etc/wireguard/client_public.key

步骤3:创建WireGuard配置文件

服务器

使用类似Nano的命令行文本编辑器在CentOS服务器上创建WireGuard配置文件。 wg0 将是网络接口名称。

sudo dnf install nano
sudo nano /etc/wireguard/wg0.conf

复制以下文本并将其粘贴到您的配置文件中。 您需要使用自己的服务器私钥和客户端公钥。

[Interface]
Address = 10.10.10.1/24
ListenPort = 51820
PrivateKey = cD+ZjXiVIX+0iSX1PNijl4a+88lCbDgw7kO78oXXLEc=

[Peer]
PublicKey = AYQJf6HbkQ0X0Xyt+cTMTuJe3RFwbuCMF46LKgTwzz4=
AllowedIPs = 10.10.10.2/32

centos-wireguard-VPN-服务器配置文件-wg0

哪里:

  • 地址:指定VPN服务器的专用IP地址。 在这里,我使用的是10.10.10.0/24网络范围,因此它不会与您的家庭网络范围冲突。 (大多数家用路由器使用192.168.0.0/24或192.168.1.0/24)。 VPN服务器的专用IP地址为10.10.10.1。
  • 私钥:VPN服务器的私钥,可以在 /etc/wireguard/server_private.key 服务器上的文件。
  • 监听端口:WireGuard VPN服务器将在UDP端口51820上侦听,这是默认设置。
  • 公钥:VPN客户端的公钥,可以在 /etc/wireguard/client_public.key 客户端计算机上的文件。
  • 允许的IP:允许VPN客户端使用的IP地址。 在此示例中,客户端只能在VPN隧道内使用10.10.10.2 IP地址。

保存并关闭文件。 (要在Nano文本编辑器中保存文件,请按 Ctrl+O,然后按Enter确认。 按 Ctrl+X 退出。)

更改文件权限模式,以便只有root用户才能读取文件。

sudo chmod 600 /etc/wireguard/ -R

客户

使用命令行文本编辑器(如Nano)在本地CentOS计算机上创建WireGuard配置文件。 wg-client0 将是网络接口名称。

sudo nano /etc/wireguard/wg-client0.conf

复制以下文本并将其粘贴到您的配置文件中。 您需要使用自己的客户端私钥和服务器公钥。

[Interface]
Address = 10.10.10.2/24
DNS = 10.10.10.1
PrivateKey = cOFA+x5UvHF+a3xJ6enLatG+DoE3I5PhMgKrMKkUyXI=

[Peer]
PublicKey = vxyo4l4I3jWK+KZquNIDJF/hzQq29DOIxSUOrfNZZCs=
AllowedIPs = 0.0.0.0/0
Endpoint = 12.34.56.78:51820
PersistentKeepalive = 25

哪里:

  • 地址:指定VPN客户端的专用IP地址。
  • 域名解析:指定10.10.10.1(VPN服务器)作为DNS服务器。 它将通过 resolvconf 命令。
  • 私钥:客户端的私钥,可以在 /etc/wireguard/client_private.key 客户端计算机上的文件。
  • 公钥:服务器的公共密钥,可以在 /etc/wireguard/server_public.key 服务器上的文件。
  • 允许的IP:0.0.0.0/0代表整个Internet,这意味着到Internet的所有流量都应通过VPN路由。
  • 终点:VPN服务器的公共IP地址和端口号。 将12.34.56.78替换为服务器的真实公共IP地址。
  • 持久保持:每25秒将经过身份验证的空数据包发送到对等方,以保持连接有效。 如果未启用PersistentKeepalive,则VPN服务器可能无法ping通VPN客户端。

保存并关闭文件。

更改文件模式,以便只有root用户才能读取文件。

sudo chmod 600 /etc/wireguard/ -R

步骤4:在服务器上启用IP转发

为了使VPN服务器能够在VPN客户端和Internet之间路由数据包,我们需要启用IP转发。 编辑 sysctl.conf 文件。

sudo nano /etc/sysctl.conf

在此文件的末尾添加以下行。

net.ipv4.ip_forward = 1

保存并关闭文件。 然后使用以下命令应用更改。 的 -p 该选项将从以下位置加载sysctl设置 /etc/sysctl.conf 文件。 此命令将在系统重新引导后保留我们的更改。

sudo sysctl -p

步骤5:在服务器上配置IP伪装

运行以下命令以在服务器防火墙中启用IP伪装。

sudo firewall-cmd --zone=public --permanent --add-masquerade
sudo systemctl reload firewalld

这将使您的VPN网络与外界隔离。 因此,互联网只能看到您的VPN服务器的IP,而看不到您的VPN客户端的IP,就像您的家庭路由器隐藏了您的专用家庭网络一样。

如果您的CentOS找不到 firewall-cmd 命令,您需要安装firewalld并启动服务。

sudo dnf install firewalld

sudo systemctl start firewalld

步骤6:在服务器上安装DNS解析器

由于我们将VPN服务器指定为客户端的DNS服务器,因此我们需要在VPN服务器上运行DNS解析器。 我们可以安装bind9 DNS服务器。

sudo dnf install bind

使用以下内容启动BIND 9:

sudo systemctl start named

并在启动时启用自动启动:

sudo systemctl enable named

您可以通过以下方式查看其状态:

systemctl status named

样本输出:

● named.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disable>
   Active: active (running) since Sun 2020-05-17 11:07:34 EDT; 9s ago
  Process: 7203 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TE>
  Process: 7218 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited,>
  Process: 7215 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; the>
 Main PID: 7220 (named)
    Tasks: 4 (limit: 5045)
   Memory: 55.5M
   CGroup: /system.slice/named.service
           └─7220 /usr/sbin/named -u named -c /etc/named.conf -4

提示:如果上述命令没有立即退出,请按Q。

编辑BIND主配置文件 /etc/named.conf

sudo nano /etc/named.conf

在里面 options 子句,您可以找到以下两行。

listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; };

这使得 named 仅在localhost上侦听。 如果要允许同一网络中的客户端查询域名,请注释掉这两行。 (在每行的开头添加双斜杠)

// listen-on port 53 { 127.0.0.1; };
// listen-on-v6 port 53 { ::1; };

找到以下行。

allow-query { localhost; };

添加10.10.10.0/24网络范围,以便VPN客户端可以发送DNS查询。 请注意,您需要以分号结束每个网络范围。

allow-query { localhost; 10.10.10.0/24; };

保存并关闭文件。 重新启动BIND9,以使更改生效。

sudo systemctl restart named

然后,您需要运行以下命令以允许VPN客户端连接到端口53。

sudo firewall-cmd --zone=public --permanent --add-rich-rule="rule family="ipv4" source address="10.10.10.0/24" accept"

步骤7:在防火墙中打开WireGuard端口

运行以下命令以打开服务器上的UDP端口51820。

sudo firewall-cmd --permanent --add-port=51820/udp
sudo systemctl reload firewalld

步骤8:启动WireGuard

服务器

在服务器上运行以下命令以启动WireGuard。

sudo wg-quick up /etc/wireguard/wg0.conf

要停止它,请运行

sudo wg-quick down /etc/wireguard/wg0.conf

您也可以使用systemd服务启动WireGuard。

sudo systemctl start [email protected]

如果启动失败,则应检查日志以找出问题所在。

sudo journalctl -eu [email protected]

使用以下命令在系统启动时启用自动启动。

sudo systemctl enable [email protected]

使用以下命令检查其状态。 它的状态应该是 active (exited)

systemctl status [email protected]

现在,WireGuard服务器已准备就绪,可以接受客户端连接。

客户

启动WireGuard。

sudo systemctl start [email protected]

如果启动失败,则应检查日志以找出问题所在。

sudo journalctl -eu [email protected]

如果您在日志中看到以下错误,则可以尝试重新引导操作系统。

RTNETLINK answers: Operation not supported

在系统启动时启用自动启动。

sudo systemctl enable [email protected]

检查其状态:

systemctl status [email protected]

现在去这个网站: http://icanhazip.com/ 检查您的公共IP地址。 如果一切顺利,它将显示您的VPN服务器的公用IP地址,而不是您的客户端计算机的公用IP地址。

策略路由

默认情况下,VPN客户端上的所有流量都将通过VPN服务器路由。 有时,您可能只想根据传输层协议和目标端口来路由特定类型的流量。 这称为策略路由。

策略路由是在客户端计算机上配置的,我们需要首先停止VPN连接。

sudo systemctl stop [email protected]

然后编辑客户端配置文件。

sudo nano /etc/wireguard/wg-client0.conf

例如,如果您在 [interface] 部分,然后WireGuard将创建一个名为“ 1234”的路由表,并将ip规则添加到该路由表中。 在此示例中,仅当将TCP用作传输层协议且目标端口为25(即客户端计算机发送电子邮件)时,流量才会通过VPN服务器路由。

Table = 1234
PostUp = ip rule add ipproto tcp dport 25 table 1234
PreDown = ip rule delete ipproto tcp dport 25 table 1234

Wireguard策略路由中心

保存并关闭文件。 然后再次启动WireGuard客户端。

sudo systemctl start [email protected]

VPN Kill Switch

默认情况下,VPN连接中断时,您的计算机可以通过普通网关访问Internet。 您可能要启用终止开关功能,该功能可防止未加密的数据包通过非WireGuard接口流动。

停止WireGuard客户端进程。

sudo systemctl stop [email protected]

编辑客户端配置文件。

sudo nano /etc/wireguard/wg-client0.conf

将以下两行添加到 [interface] 部分。

PostUp = iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PreDown = iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT

像这样:

[Interface]
Address = 10.10.10.2/24
DNS = 10.10.10.1
PrivateKey = cOFA+x5UvHF+a3xJ6enLatG+DoE3I5PhMgKrMKkUyXI=
PostUp = iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PreDown = iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT

[Peer]
PublicKey = RaoAdsIEIwgV9DHNSubxWVG+nZ1GP/c3OU6A/efBJ0I=
AllowedIPs = 0.0.0.0/0
Endpoint = 12.34.56.78:51820
PersistentKeepalive = 25

保存并关闭文件。 然后启动WireGuard客户端。

sudo systemctl start [email protected]

故障排除

您可以从VPN服务器ping通到VPN客户端,以查看隧道是否正常工作。 如果您在ping中看到以下错误消息,

ping: sendmsg: Required key not available

可能是 AllowedIPs 参数是错误的,如错字。

请注意,我不建议使用 SaveConfig=true 在里面 [Interface] WireGuard配置文件的部分。 SaveConfig 告诉WireGuard在关机时保存运行时配置。 因此,如果您添加其他 [Peer] 在配置文件中,然后重新启动WireGuard,新添加的配置将被覆盖。

包起来

而已! 我希望本教程可以帮助您在CentOS上安装和配置WireGuard。 与往常一样,如果您发现此帖子有用,请订阅我们的免费新闻简报以获取更多提示和技巧。

Sidebar