在CentOS 8上设置OpenVPN服务器

在本指南中,我们将学习如何在CentOS 8上安装和轻松设置OpenVPN Server。 开放VPN 是一款功能强大且高度灵活的开源VPN软件,它使用OpenSSL库的所有加密,身份验证和认证功能在单个UDP或TCP端口上安全地隧道IP网络。它有助于在私有网络上扩展私有网络,同时保持在私有网络中可以实现的安全性。

在CentOS 8上设置OpenVPN服务器

安装EPEL储存库

最新的OpenVPN软件包由CentOS 8和其他类似衍生产品上的EPEL存储库提供。可以通过运行以下命令在CentOS 8上安装EPEL;

dnf install epel-release -y

在CentOS 8上安装OpenVPN

一旦建立了EPEL仓库,您现在可以通过执行以下命令在CentOS 8上安装OpenVPN软件包:

dnf install openvpn

在CentOS 8上安装Easy-RSA CA Utility

Easy-RSA软件包是基于外壳的CA实用程序,用于生成用于保护VPN连接的SSL密钥对。

dnf install easy-rsa

创建OpenVPN公钥基础结构

设置OpenVPN服务器的第一步是创建一个PKI,该PKI由用于OpenVPN服务器并连接客户端的公钥和私钥以及用于签署OpenVPN服务器和客户端证书的主证书颁发机构证书和私钥组成。如果可能,出于安全考虑,应在运行OpenVPN的单独服务器上创建PKI。

初始化PKI

Easy-RSA用于PKI管理。 Easy-RSA脚本安装在 /usr/share/easy-rsa 目录。

为确保Easy-RSA进行的任何配置在升级时都不会被覆盖,请将脚本复制到其他目录,最好是在 /etc 目录。

mkdir /etc/easy-rsa
cp -air /usr/share/easy-rsa/3/* /etc/easy-rsa/

脚本到位后,导航到目录并初始化PKI。

cd /etc/easy-rsa/
./easyrsa init-pki

生成证书颁发机构(CA)证书和密钥

接下来,通过在上面的Easy-RSA目录中运行以下命令,生成将用于签署证书的CA证书和密钥。

./easyrsa build-ca

这将提示您输入CA密钥密码和服务器通用名称。

Using SSL: openssl OpenSSL 1.1.1c FIPS  28 May 2019

Enter New CA Key Passphrase: ENTER PASSWORD
Re-Enter New CA Key Passphrase: RE-ENTER PASSWORD 
Generating RSA private key, 2048 bit long modulus (2 primes)
...................................................................+++++
.+++++
e is 65537 (0x010001)
Can't load /etc/easy-rsa/pki/.rnd into RNG
140160794502976:error:2406F079:random number generator:RAND_load_file:Cannot open file:crypto/rand/randfile.c:98:Filename=/etc/easy-rsa/pki/.rnd
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]: Kifarunix-CA

CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/etc/easy-rsa/pki/ca.crt

CA证书存储在 /etc/easy-rsa/pki/ca.crt

生成Diffie Hellman参数

在与上述相同的Easy-RSA目录中,执行以下命令以生成Diffie-Hellman密钥文件,该文件可在与连接客户端进行TLS握手期间进行密钥交换。

./easyrsa gen-dh

该命令将需要一些时间才能完成。然后将DH参数存储在 /etc/easy-rsa/pki/dh.pem 文件。

生成OpenVPN服务器证书和密钥

要为OpenVPN服务器生成证书和私钥,请运行以下命令;

cd /etc/easy-rsa
./easyrsa build-server-full server nopass

运行该命令时,将提示您输入上面创建的CA密钥密码。

nopass 禁用密码短语的使用。

生成基于哈希的消息认证码(HMAC)密钥

要生成TLS / SSL预共享身份验证密钥,该密钥将用于向所有SSL / TLS握手数据包添加附加的HMAC签名,以避免DoS攻击和UDP端口泛洪,请运行以下命令;

openvpn --genkey --secret /etc/easy-rsa/pki/ta.key

生成吊销证书

为了使先前签署的证书无效,您需要生成吊销证书。

./easyrsa gen-crl

吊销证书存储为 /etc/easy-rsa/pki/crl.pem

将服务器证书和密钥复制到服务器目录

接下来,将所有生成的证书/密钥复制到OpenVPN服务器配置目录。

cp -rp /etc/easy-rsa/pki/{ca.crt,dh.pem,ta.key,crl.pem,issued,private} /etc/openvpn/server/

生成OpenVPN客户端证书和密钥

要生成OpenVPN客户端证书和私钥,请运行以下命令;

cd /etc/easy-rsa
./easyrsa build-client-full koromicha nopass

哪里 科罗米恰 是为其生成证书和密钥的客户端的名称。对于要为其生成证书和密钥的每个客户端,请始终使用唯一的通用名称。

要为第二个客户生成,

./easyrsa build-client-full johndoe nopass

将客户端证书和密钥复制到客户端目录

在OpenVPN客户端目录上为每个客户端创建目录

mkdir /etc/openvpn/client/{koromicha,johndoe}

接下来,将所有客户端生成的证书/密钥和CA证书复制到OpenVPN客户端配置目录。您可以

cp -rp /etc/easy-rsa/pki/{ca.crt,issued/koromicha.crt,private/koromicha.key} /etc/openvpn/client/koromicha
cp -rp /etc/easy-rsa/pki/{ca.crt,issued/johndoe.crt,private/johndoe.key} /etc/openvpn/client/johndoe/

在CentOS 8上配置OpenVPN服务器

OpenVPN在其文档目录中随附了一个示例配置文件。将文件复制到 /etc/openvpn/server/ 并对其进行修改以满足您的需求。

cp /usr/share/doc/openvpn/sample/sample-config-files/server.conf /etc/openvpn/server/

打开配置进行修改。

vim /etc/openvpn/server/server.conf

该文件受到高度评价。阅读每个配置选项的注释。

在最基本的形式中,以下是我们的配置选项,没有注释。

port 1194
proto udp4
dev tun
ca ca.crt
cert issued/server.crt
key private/server.key  # This file should be kept secret
dh dh.pem
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 192.168.10.3"
client-to-client
keepalive 10 120
tls-auth ta.key 0 # This file is secret
cipher AES-256-CBC
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log-append  /var/log/openvpn/openvpn.log
verb 3
explicit-exit-notify 1
auth SHA512

完成修改后,保存并退出配置。

创建日志目录;

mkdir /var/log/openvpn/

探索配置并进行进一步的微调以满足您的需求。

配置OpenVPN服务器路由

为了确保来自客户端的流量通过服务器IP地址路由(帮助屏蔽客户端IP地址),您需要在OpenVPN服务器上启用IP转发;

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

运行以下命令以使更改生效,而无需重新引导服务器。

sysctl --system

允许通过防火墙的OpenVPN服务端口

firewall-cmd --add-port=1194/udp --permanent

激活IP伪装

firewall-cmd --add-masquerade --permanent

将在指定的OpenVPN子网(例如本例中的10.8.0.0/24)上收到的流量转发到要通过其发送数据包的接口。

通过运行以下命令来查找通过其发送数据包的接口;

ip route get 8.8.8.8
8.8.8.8 via 192.168.43.1 dev enp0s3 src 192.168.43.73 uid 0

接口名称和定义的子网可能因您的情况而有所不同。相应地更换它们。

firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o enp0s3 -j MASQUERADE

重新加载firewalld,以使更改生效。

firewall-cmd --reload

启动并设置OpenVPN在系统启动时运行。

systemctl enable --now [email protected]

当OpenVPN服务运行时,它将创建一个隧道接口tun0;

ip add s
4: tun0:  mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
    link/none 
    inet 10.8.0.1/24 brd 10.8.0.255 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fe80::2ed5:8f74:c456:96b7/64 scope link stable-privacy 
       valid_lft forever preferred_lft forever

检查日志;

tail /var/log/openvpn/openvpn.log
/sbin/ip addr add dev tun0 10.8.0.1/24 broadcast 10.8.0.255
Socket Buffers: R=[212992->212992] S=[212992->212992]
UDPv4 link local (bound): [AF_INET][undef]:1194
UDPv4 link remote: [AF_UNSPEC]
GID set to nobody
UID set to nobody
MULTI: multi_init called, r=256 v=256
IFCONFIG POOL: base=10.8.0.2 size=252, ipv6=0
IFCONFIG POOL LIST
Initialization Sequence Completed

您的OpenVPN服务器现已启动并正在运行。这使我们结束了有关如何在CentOS 8上安装和设置OpenVPN Server的指南的结尾。

相关教程

安装和配置OpenVPN Server FreeBSD 12

在Fedora 29 / CentOS 7上安装和设置OpenVPN Server

在Ubuntu 18.04上使用StrongSwan配置IPSEC VPN

在Ubuntu 18.04 / CentOS 8上配置StrongSwan VPN客户端

在Ubuntu上使用PCF文件连接到Cisco VPN

Sidebar