CentOS 8设置WireGuard VPN服务器

时间:2020-01-09 10:34:11  来源:igfitidea点击:

如何在CentOS 8 Linux上安装和设置WireGuard VPN服务器?
如何将CentOS 8配置为WireGuard VPN服务器?

WireGuard是具有最新加密技术的免费,开放源代码的现代快速VPN。
与IPSec和OpenVPN相比,它更快,更简单。
最初是为Linux内核发布的,但是它也获得了对其他操作系统的跨平台支持。
本页说明如何在CentOS 8 Linux上安装和设置WireGuard VPN。

CentOS 8设置WireGuard VPN服务器

我们的示例设置包括在运行CentOS 8服务器的云服务器和CentOS/Ubuntu Linux桌面客户端之间的简单对等连接:步骤如下,用于在作为VPN服务器的CentOS Linux上安装和配置WireGuard。

步骤1更新系统

运行dnf命令或yum命令来安装CentOS 8安全更新:

{Hyman@centos8:~ }$ sudo dnf update

或者

{Hyman@centos8:~ }$ sudo yum update

步骤2启用并安装EPEL REPO

我们需要从EPEL存储库中安装一个名为wireguard-tools的软件包,该软件包提供了用于控制WireGuard服务器的wg二进制文件。
让我们在CentOS 8上启用并安装EPEL repo,运行:

{Hyman@centos8:~ }$ sudo yum install epel-release

确保启用PowerTools存储库,因为EPEL软件包可能取决于其中的软件包:

{Hyman@centos8:~ }$ sudo yum install 'dnf-command(config-manager)'
{Hyman@centos8:~ }$ sudo yum config-manager --set-enabled PowerTools

步骤3设置Wireguard存储库

在安装wireguard Linux内核模块之前,请打开官方的wireguard存储库。
执行以下命令:

{Hyman@centos8:~ }$ sudo yum copr enable jdoss/wireguard

步骤4在CentOS 8上安装WireGuard VPN服务器

现在,我们已完成所有设置。
现在是在CentOS 8机器上设置WireGuard VPN服务器的时候了。
跑:

{Hyman@centos8:~ }$ sudo yum install wireguard-dkms wireguard-tools

上面的代码还将安装GNU GCC编译器集合,以编译和构建所需的Linux内核模块。
因此,最好等待一段时间才能完成该过程。

步骤5配置WireGuard服务器

首先,我们将创建一个具有适当权限的空WireGuard服务器配置文件。
使用mkdir命令,如下所示:

{Hyman@centos8:~ }$ sudo mkdir -v /etc/wireguard/
`mkdir: created directory '/etc/wireguard/'`
{Hyman@centos8:~ }$ sudo sh -c 'umask 077; touch /etc/wireguard/wg0.conf'
{Hyman@centos8:~ }$ sudo ls -l /etc/wireguard/wg0.conf
`-rw-------. 1 root root 0 Mar 13 09:13 /etc/wireguard/wg0.conf`

为WireGuard服务器创建私钥和公钥对

我们需要在/etc/wireguard /目录中运行以下命令。
使用cd命令:

{Hyman@centos8:~ }$ cd /etc/wireguard/

运行以下命令:

{Hyman@centos8:~ }$ sudo sh -c 'umask 077; wg genkey | tee privatekey | wg pubkey > publickey'

要查看键,请使用cat命令和ls命令:

{Hyman@centos8:~ }$ ls -l privatekey publickey
{Hyman@centos8:~ }$ sudo cat privatekey
#### Note down the privatekey ####
{Hyman@centos8:~ }$ sudo cat publickey

配置WireGuard服务器

编辑/etc/wireguard/wg0.conf文件:

{Hyman@centos8:~ }$ sudo vi /etc/wireguard/wg0.conf

附加以下指令:

[Interface]
## VPN server private IP address ##
Address = 192.168.5.1/24
 
## VPN server port ##
ListenPort = 31194
 
## VPN server's private key i.e. /etc/wireguard/privatekey ##
PrivateKey = cBRd8MhXckz5ZnNRvk8F+r0558sfJlI0YdJ7ZQfWqUM=
 
## Save and update this config file when a new peer (vpn client) added ##
SaveConfig = true

保存并关闭文件。

设置防火墙规则

我们已在CentOS 8服务器上使用FirewallD设置了防火墙。
因此,我们需要通过创建wireguard服务来打开UDP端口31194:

{Hyman@centos8:~ }$ sudo vi /etc/firewalld/services/wireguard.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>wireguard</short>
  <description>WireGuard open UDP port 31194 for client connections</description>
  <port protocol="udp" port="31194"/>
</service>

接下来,我将使用firewall-cmd命令在firewalld中启用WireGuard服务,如下所示:

{Hyman@centos8:~ }$ sudo firewall-cmd --permanent --add-service=wireguard --zone=public

启用伪装,以便从192.168.5.0/24通过我们的公共IP地址172.105.120.136/24正确路由的所有传入和传出流量:

{Hyman@centos8:~ }$ sudo firewall-cmd --permanent --zone=public --add-masquerade

最后,重新加载firewalld并列出我们的配置:

{Hyman@centos8:~ }$ sudo firewall-cmd --reload
{Hyman@centos8:~ }$ sudo firewall-cmd --list-all

输出示例:

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: wireguard ssh
  ports: 
  protocols: 
  masquerade: yes
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:
开启IPv4/IPv6转发

编辑/etc/sysctl.d/99-custom.conf文件

{Hyman@centos8:~ }$ sudo vi /etc/sysctl.d/99-custom.conf

附加以下配置选项:

## Turn on bbr ##
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
 
## for IPv4 ##
net.ipv4.ip_forward = 1
 
## Turn on basic protection/security ##
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_syncookies = 1
 
## for IPv6 - uncomment the following line ##
#net.ipv6.conf.all.forwarding = 1

使用sysctl命令重新加载更改:

{Hyman@centos8:~ }$ sudo sysctl -p /etc/sysctl.d/99-custom.conf

在我以前的教程中对上述指令进行了详细说明:

  • 通过TCP BBR拥塞控制提高Linux互联网速度
  • CentOS/Red Hat Linux IP转发如何
  • 如何在Linux上重新加载sysctl.conf变量
  • Linux内核/etc/sysctl.conf安全加固
允许对等连接

默认情况下,firewalld将丢弃内部(wg0)与公用网络(eth0)之间的所有通信。
因此,我们将向内部网络添加接口wg0并按如下所示开启伪装

{Hyman@centos8:~ }$ sudo firewall-cmd --add-interface=wg0 --zone=internal
{Hyman@centos8:~ }$ sudo firewall-cmd --permanent --zone=internal --add-masquerade

步骤5启用并启动WireGuard服务

现在,我们已经正确安装和配置了服务器,是时候使用systemctl命令启用和启动wireguard服务了:

{Hyman@centos8:~ }$ sudo systemctl enable wg-quick@wg0 #<-- turn it on
{Hyman@centos8:~ }$ sudo systemctl start wg-quick@wg0 #<-- start it
{Hyman@centos8:~ }$ sudo systemctl status wg-quick@wg0 #<-- get status

使用ip命令验证接口wg0是否已启动并正在运行:

{Hyman@centos8:~ }$ sudo wg
{Hyman@centos8:~ }$ sudo ip a show wg0

显示时请记下公共密钥:

步骤6 Wireguard VPN客户端配置

安装和配置VPN客户端的过程与设置服务器相同。
让我们在CentOS 8上安装客户端:

{Hyman@centos8-vpn-client:~ }$ sudo yum install epel-release
{Hyman@centos8-vpn-client:~ }$ sudo yum install 'dnf-command(config-manager)'
{Hyman@centos8-vpn-client:~ }$ sudo yum config-manager --set-enabled PowerTools
{Hyman@centos8-vpn-client:~ }$ sudo yum copr enable jdoss/wireguard
{Hyman@centos8-vpn-client:~ }$ sudo yum install wireguard-dkms wireguard-tools

这是我使用apt命令将其安装在Ubuntu Linux笔记本电脑上的方法:

{Hyman@ubuntu19-10-vpn-client:~ }$ sudo apt install wireguard-dkms wireguard-tools wireguard

让我们创建我们的VPNclient配置:

{Hyman@centos8-vpn-client:~ }$ sudo mkdir -v /etc/wireguard/
{Hyman@centos8-vpn-client:~ }$ sudo sh -c 'umask 077; touch /etc/wireguard/wg0.conf'
{Hyman@centos8-vpn-client:~ }$ sudo ls -l /etc/wireguard/wg0.conf
{Hyman@centos8-vpn-client:~ }$ cd /etc/wireguard/
{Hyman@centos8-vpn-client:~ }$ sudo sh -c 'umask 077; wg genkey | tee privatekey | wg pubkey > publickey'
#### Note down the privatekey ####
{Hyman@centos8-vpn-client:~ }$ sudo cat privatekey

编辑/etc/wireguard/wg0.conf文件:

{Hyman@centos8-vpn-client:~ }$ sudo vi /etc/wireguard/wg0.conf

附加以下指令:

[Interface]
## client private key ##
PrivateKey = sKVVArGeo75fCkskltZc8WRIi9fPQ3SPLXmrr8uBp3M=
 
## client ip address ##
Address = 192.168.5.2/24
 
[Peer]
## CentOS 8 server public key ##
PublicKey = qdjdqh2+N3DEMDUDRob8K3b+9BZFJbT59f+rBrl99zM
 
## set ACL ##
AllowedIPs = 192.168.5.0/24
 
## Your CentOS 8 server's public IPv4/IPv6 address and port ##
Endpoint = 172.105.120.136:31194
 
##  Key connection alive ##
PersistentKeepalive = 15

启用并启动VPN客户端/对等方,运行:

{Hyman@centos8-vpn-client:~ }$ sudo systemctl enable wg-quick@wg0
{Hyman@centos8-vpn-client:~ }$ sudo systemctl start wg-quick@wg0
{Hyman@centos8-vpn-client:~ }$ sudo systemctl status wg-quick@wg0

允许客户端和服务器连接

我们需要配置服务器端,并允许客户端和服务器之间建立连接。
让我们回到CentOS 8服务器并编辑wg0.conf文件,以添加Peer信息,如下所示(在"服务器"上键入命令):

{Hyman@centos8:~ }$ sudo systemctl stop wg-quick@wg0
{Hyman@centos8:~ }$ sudo vi /etc/wireguard/wg0.conf

附加以下配置:

[Peer]
## client VPN public key ##
PublicKey = hM/J1IVUns1F4gWjA11pOPq6uDmlYsSq0o7JWCQ02C4=
 
## client VPN IP address (note /32 subnet) ##
AllowedIPs = 192.168.5.2/32

保存并关闭vim中的文件。
接下来再次启动该服务,运行:

{Hyman@centos8:~ }$ sudo systemctl start wg-quick@wg0

验证

就这些。
到目前为止,必须使用VPN安全地连接服务器和客户端。
让我们测试连接。
在客户端计算机上键入以下ping命令:

{Hyman@centos8-vpn-client:~ }$ ping -c 4 192.168.5.1
{Hyman@centos8-vpn-client:~ }$ sudo wg

步骤7防火墙配置

现在,我们已经为服务器和客户端设置并配置了对等VPN网络。
但是,您可能希望授予所有VPN客户端访问Internet的权限。
为此,我们需要设置IPv4和IPv6防火墙规则,包括NAT和IP转发。
请参阅以下教程:

  • 如何在Linux中设置WireGuard防火墙规则