CentOS 8设置WireGuard VPN服务器
如何在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防火墙规则