GNU/Linux >> Tutoriales Linux >  >> Cent OS

Cómo instalar OpenVPN en CentOS/RHEL 8

Una VPN también se conoce como "Red privada virtual" y es una tecnología que le permite crear una red privada segura a través de Internet pública. Esto lo ayudará a encriptar su tráfico de Internet y proteger su identidad en línea. Se utiliza principalmente para conectar dos redes empresariales de forma segura a través de Internet y le permite conectarse a una red empresarial desde casa.

En términos simples, una VPN conecta su dispositivo móvil, computadora y tableta a otra computadora (servidor) a través de Internet y le permite acceder a Internet usando el Internet de esa computadora y también acceder al recurso de la red local evitando la censura de Internet de forma remota.

En este tutorial, le mostraremos cómo instalar y configurar el servidor OpenVPN en CentOS 8.

Paso 1:deshabilitar SELinux

Antes de comenzar, es una buena idea deshabilitar SELinux en su sistema.

Para deshabilitar SELinux, abra el archivo /etc/selinux/config:

nano /etc/selinux/config

Cambie la siguiente línea:

SELINUX=disabled

Guarde el archivo cuando haya terminado. Luego, reinicie su sistema para aplicar los cambios de SELinux.

Paso 2:habilite el reenvío de IP

A continuación, deberá habilitar el reenvío de IP en su sistema. El reenvío de IP permite que su sistema operativo acepte los paquetes de red entrantes y los reenvíe a la otra red si el destino está en otra red.

Para habilitar el reenvío de IP, edite el archivo /etc/sysctl.conf:

nano /etc/sysctl.conf

Agregue la siguiente línea:

net.ipv4.ip_forward = 1

Guarde el archivo cuando haya terminado. Luego, ejecute el siguiente comando para aplicar los cambios:

sysctl -p

Paso 3:instalar el servidor OpenVPN

De forma predeterminada, deberá instalar el repositorio EPEL en su sistema para poder instalar la última versión de OpenVPN.

Ejecute el siguiente comando para instalar el repositorio ELEP:

dnf install epel-release -y

Una vez instalado, ejecute el siguiente comando para instalar la última versión de OpenVPN:

dnf install openvpn -y

Una vez completada la instalación, también deberá descargar easy-rsa para administrar los certificados SSL.

Ejecute el siguiente comando para descargar easy-rsa dentro del directorio /etc/openvpn.

cd /etc/openvpn
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.6/EasyRSA-unix-v3.0.6.tgz

A continuación, ejecute el siguiente comando para extraer el archivo descargado:

tar -xvzf EasyRSA-unix-v3.0.6.tgz

A continuación, cambie el nombre del directorio extraído a easy-rsa:

mv EasyRSA-v3.0.6 easy-rsa

Paso 4:configuración de la autoridad de certificación

Easy RSA utiliza un conjunto de scripts para generar claves y certificados. Primero, deberá configurar la autoridad de certificación en su sistema.

Para hacerlo, cambie el directorio a /etc/openvpn/easy-rsa y cree un nuevo archivo de configuración de Easy RSA:

cd /etc/openvpn/easy-rsa
nano vars

Agregue las siguientes líneas, incluidos su país, ciudad y dirección de correo electrónico preferida:

set_var EASYRSA                 "$PWD"
set_var EASYRSA_PKI             "$EASYRSA/pki"
set_var EASYRSA_DN              "cn_only"
set_var EASYRSA_REQ_COUNTRY     "INDIA"
set_var EASYRSA_REQ_PROVINCE    "Gujrat"
set_var EASYRSA_REQ_CITY        "Ahmedabad"
set_var EASYRSA_REQ_ORG         "Tecadmin CERTIFICATE AUTHORITY"
set_var EASYRSA_REQ_EMAIL		"[email protected]"
set_var EASYRSA_REQ_OU          "Tecadmin EASY CA"
set_var EASYRSA_KEY_SIZE        2048
set_var EASYRSA_ALGO            rsa
set_var EASYRSA_CA_EXPIRE		7500
set_var EASYRSA_CERT_EXPIRE     365
set_var EASYRSA_NS_SUPPORT		"no"
set_var EASYRSA_NS_COMMENT		"Tecadmin CERTIFICATE AUTHORITY"
set_var EASYRSA_EXT_DIR         "$EASYRSA/x509-types"
set_var EASYRSA_SSL_CONF        "$EASYRSA/openssl-easyrsa.cnf"
set_var EASYRSA_DIGEST          "sha256"

Guarde el archivo cuando haya terminado.

A continuación, ejecute el siguiente comando para iniciar el directorio PKI.

./easyrsa init-pki

Salida:

Note: using Easy-RSA configuration from: ./vars

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/openvpn/easy-rsa/pki

A continuación, cree los certificados de CA con el siguiente comando:

./easyrsa build-ca

Deberías obtener el siguiente resultado:

Note: using Easy-RSA configuration from: ./vars

Using SSL: openssl OpenSSL 1.1.1c FIPS  28 May 2019

Enter New CA Key Passphrase: 
Re-Enter New CA Key Passphrase: 
Generating RSA private key, 2048 bit long modulus (2 primes)
....................................................................+++++
..........................................................................................................................................+++++
e is 65537 (0x010001)
Can't load /etc/openvpn/easy-rsa/pki/.rnd into RNG
140218549745472:error:2406F079:random number generator:RAND_load_file:Cannot open file:crypto/rand/randfile.c:98:Filename=/etc/openvpn/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]:

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

El comando anterior generará dos archivos llamados ca.key y ca.crt. Estos certificados se utilizarán para firmar su servidor y los certificados de sus clientes.

Paso 5:generar archivos de certificado del servidor

A continuación, deberá generar un par de claves y una solicitud de certificado para su servidor.

Ejecute el siguiente comando para generar la clave del servidor denominada tecadmin-server:

./easyrsa gen-req tecadmin-server nopass

Deberías obtener el siguiente resultado:

Note: using Easy-RSA configuration from: ./vars

Using SSL: openssl OpenSSL 1.1.1c FIPS  28 May 2019
Generating a RSA private key
...........................+++++
...............................................................................................................................................................................................................................................................................................+++++
writing new private key to '/etc/openvpn/easy-rsa/pki/private/tecadmin-server.key.kOlBTwtY6a'
-----
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) [tecadmin-server]:

Keypair and certificate request completed. Your files are:
req: /etc/openvpn/easy-rsa/pki/reqs/tecadmin-server.req
key: /etc/openvpn/easy-rsa/pki/private/tecadmin-server.key

Paso 6:firme la clave del servidor mediante CA

A continuación, deberá firmar la clave del servidor tecadmin con su certificado de CA:

Ejecute el siguiente comando para firmar la clave del servidor:

./easyrsa sign-req server tecadmin-server

Deberías obtener el siguiente resultado:

Note: using Easy-RSA configuration from: ./vars

Using SSL: openssl OpenSSL 1.1.1c FIPS  28 May 2019

You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a server certificate for 365 days:

subject=
    commonName                = tecadmin-server


Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes
Using configuration from /etc/openvpn/easy-rsa/pki/safessl-easyrsa.cnf
Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'tecadmin-server'
Certificate is to be certified until Feb 16 05:00:50 2021 GMT (365 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /etc/openvpn/easy-rsa/pki/issued/tecadmin-server.crt

A continuación, verifique el archivo de certificado generado con el siguiente comando:

openssl verify -CAfile pki/ca.crt pki/issued/tecadmin-server.crt 

Si todo está bien, debería obtener el siguiente resultado:

pki/issued/tecadmin-server.crt: OK

A continuación, ejecute el siguiente comando para generar una clave Diffie-Hellman segura para usar en el intercambio de claves:

./easyrsa gen-dh

Deberías obtener el siguiente resultado:

Note: using Easy-RSA configuration from: ./vars

Using SSL: openssl OpenSSL 1.1.1c FIPS  28 May 2019
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
....+................................+........................................+.....++*++*++*++*

DH parameters of size 2048 created at /etc/openvpn/easy-rsa/pki/dh.pem

Después de crear todos los archivos de certificado, cópielos en el directorio /etc/openvpn/server/:

cp pki/ca.crt /etc/openvpn/server/
cp pki/dh.pem /etc/openvpn/server/
cp pki/private/tecadmin-server.key /etc/openvpn/server/
cp pki/issued/tecadmin-server.crt /etc/openvpn/server/

Paso 7:generar el certificado de cliente y el archivo de claves

A continuación, deberá generar la clave y el archivo de certificado para el cliente.

Primero, ejecute el siguiente comando para crear el archivo de claves del cliente:

./easyrsa gen-req client nopass

Debería ver el siguiente resultado:

Note: using Easy-RSA configuration from: ./vars

Using SSL: openssl OpenSSL 1.1.1c FIPS  28 May 2019
Generating a RSA private key
......................................................+++++
...+++++
writing new private key to '/etc/openvpn/easy-rsa/pki/private/client.key.e38GUtzHie'
-----
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) [client]:

Keypair and certificate request completed. Your files are:
req: /etc/openvpn/easy-rsa/pki/reqs/client.req
key: /etc/openvpn/easy-rsa/pki/private/client.key

A continuación, firme la clave de cliente con su certificado de CA:

./easyrsa sign-req client client

Deberías obtener el siguiente resultado:

Note: using Easy-RSA configuration from: ./vars

Using SSL: openssl OpenSSL 1.1.1c FIPS  28 May 2019


You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a client certificate for 365 days:

subject=
    commonName                = client


Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes
Using configuration from /etc/openvpn/easy-rsa/pki/safessl-easyrsa.cnf
Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'client'
Certificate is to be certified until Feb 16 05:11:19 2021 GMT (365 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /etc/openvpn/easy-rsa/pki/issued/client.crt

A continuación, copie todo el certificado del cliente y el archivo de claves en el directorio /etc/openvpn/client/:

cp pki/ca.crt /etc/openvpn/client/
cp pki/issued/client.crt /etc/openvpn/client/
cp pki/private/client.key /etc/openvpn/client/

Paso 8:configurar el servidor OpenVPN

A continuación, cree un nuevo archivo de configuración de OpenVPN dentro del directorio /etc/openvpn/client/:

nano /etc/openvpn/server/server.conf

Agregue las siguientes líneas:

port 1194
proto udp
dev tun
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/tecadmin-server.crt
key /etc/openvpn/server/tecadmin-server.key
dh /etc/openvpn/server/dh.pem
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1"

push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
duplicate-cn
cipher AES-256-CBC
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
auth SHA512
auth-nocache
keepalive 20 60
persist-key
persist-tun
compress lz4
daemon
user nobody
group nobody
log-append /var/log/openvpn.log
verb 3

Guarde el archivo cuando haya terminado.

Paso 9:inicie el servicio OpenVPN

OpenVPN ahora está instalado y configurado. Ahora puede iniciar el servicio OpenVPN y permitir que se inicie después de que el sistema se reinicie con el siguiente comando:

systemctl start [email protected]
systemctl enable [email protected]

Ejecute el siguiente comando para verificar el estado del servicio OpenVPN:

systemctl status [email protected]

Deberías obtener el siguiente resultado:

● [email protected] - OpenVPN service for server
   Loaded: loaded (/usr/lib/systemd/system/[email protected]; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2020-02-17 00:29:26 EST; 39min ago
     Docs: man:openvpn(8)
           https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
           https://community.openvpn.net/openvpn/wiki/HOWTO
 Main PID: 32405 (openvpn)
   Status: "Initialization Sequence Completed"
    Tasks: 1 (limit: 12552)
   Memory: 1.9M
   CGroup: /system.slice/system-openvpn\x2dserver.slice/[email protected]
           └─32405 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --cipher AES-256->

Feb 17 00:29:26 centos8 systemd[1]: Starting OpenVPN service for server...
Feb 17 00:29:26 centos8 systemd[1]: Started OpenVPN service for server.

Una vez que el servicio OpenVPN se inició con éxito, creará una nueva interfaz de red llamada tun0. Puedes comprobarlo con el siguiente comando:

ifconfig 

Debería obtener la nueva interfaz tun0 en el siguiente resultado:

eth0: flags=4163  mtu 1500
        inet 104.245.36.127  netmask 255.255.255.0  broadcast 104.245.36.255
        inet6 fe80::200:68ff:fef5:247f  prefixlen 64  scopeid 0x20
        ether 00:00:68:f5:24:7f  txqueuelen 1000  (Ethernet)
        RX packets 1926738  bytes 314886412 (300.2 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 174907  bytes 29557250 (28.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 216  bytes 40041 (39.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 216  bytes 40041 (39.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

tun0: flags=4305  mtu 1500
        inet 10.8.0.1  netmask 255.255.255.255  destination 10.8.0.2
        inet6 fe80::4152:a673:b260:d9e6  prefixlen 64  scopeid 0x20
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 100  (UNSPEC)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4  bytes 304 (304.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Paso 10:generar el archivo de configuración del cliente

A continuación, cree un nuevo archivo de configuración de cliente de OpenVPN denominado client.ovpn. Necesitará este archivo para conectar su servidor OpenVPN desde el sistema cliente.

nano /etc/openvpn/client/client.ovpn

Agregue las siguientes líneas:

client
dev tun
proto udp
remote vpn-server-ip 1194
ca ca.crt
cert client.crt
key client.key
cipher AES-256-CBC
auth SHA512
auth-nocache
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
resolv-retry infinite
compress lz4
nobind
persist-key
persist-tun
mute-replay-warnings
verb 3

Guarde el archivo cuando haya terminado.

Paso 11:Configurar el enrutamiento mediante Firewalld

Primero, deberá permitir el servicio OpenVPN a través de firewalld.

Para hacerlo, agregue el servicio OpenVPN y la interfaz tun0 a la zona de firewall confiable:

firewall-cmd --permanent --add-service=openvpn
firewall-cmd --permanent --zone=trusted --add-service=openvpn
firewall-cmd --permanent --zone=trusted --add-interface=tun0

A continuación, agregue la MASQUERADE en la zona predeterminada:

firewall-cmd --add-masquerade
firewall-cmd --permanent --add-masquerade

A continuación, ejecute el siguiente comando para enmascarar el tráfico de Internet procedente de la red VPN (10.8.0.0/24) a la interfaz de red local del sistema (eth0).

tecadmin=$(ip route get 8.8.8.8 | awk 'NR==1 {print $(NF-2)}')
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o $tecadmin -j MASQUERADE

Finalmente, ejecute el siguiente comando para implementar los cambios:

firewall-cmd --reload

Paso 12:conectar OpenVPN desde los clientes

Primero, inicie sesión en la máquina cliente e instale el paquete OpenVPN con el siguiente comando:

dnf install epel-release -y
dnf install openvpn -y

A continuación, deberá descargar los archivos de configuración del cliente OpenVPN desde el servidor OpenVPN a la máquina cliente.

En la máquina cliente, ejecute el siguiente comando para descargar todo el archivo de configuración del cliente:

scp -r [email protected]:/etc/openvpn/client .

Una vez descargado, cambie el directorio a cliente y ejecute el siguiente comando para conectarse al servidor OpenVPN:

cd client
openvpn --config client.ovpn

Debería ver el siguiente resultado:

Mon Feb 17 00:54:17 2020 VERIFY OK: depth=0, CN=tecadmin-server
Mon Feb 17 00:54:17 2020 Control Channel: TLSv1.3, cipher TLSv1.3 TLS_AES_256_GCM_SHA384, 2048 bit RSA
Mon Feb 17 00:54:17 2020 [tecadmin-server] Peer Connection Initiated with [AF_INET]104.245.36.127:1194
Mon Feb 17 00:54:18 2020 SENT CONTROL [tecadmin-server]: 'PUSH_REQUEST' (status=1)
Mon Feb 17 00:54:18 2020 PUSH: Received control message: 'PUSH_REPLY,redirect-gateway def1,dhcp-option DNS 208.67.222.222,dhcp-option DNS 208.67.220.220,route 10.8.0.1,topology net30,ping 20,ping-restart 60,ifconfig 10.8.0.6 10.8.0.5,peer-id 0,cipher AES-256-GCM'
Mon Feb 17 00:54:18 2020 OPTIONS IMPORT: timers and/or timeouts modified
Mon Feb 17 00:54:18 2020 OPTIONS IMPORT: --ifconfig/up options modified
Mon Feb 17 00:54:18 2020 OPTIONS IMPORT: route options modified
Mon Feb 17 00:54:18 2020 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified
Mon Feb 17 00:54:18 2020 OPTIONS IMPORT: peer-id set
Mon Feb 17 00:54:18 2020 OPTIONS IMPORT: adjusting link_mtu to 1625
Mon Feb 17 00:54:18 2020 OPTIONS IMPORT: data channel crypto options modified
Mon Feb 17 00:54:18 2020 Data Channel: using negotiated cipher 'AES-256-GCM'
Mon Feb 17 00:54:18 2020 Outgoing Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key
Mon Feb 17 00:54:18 2020 Incoming Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key
Mon Feb 17 00:54:18 2020 ROUTE_GATEWAY 45.58.38.1/255.255.255.0 IFACE=eth0 HWADDR=00:00:2d:3a:26:d9
Mon Feb 17 00:54:18 2020 TUN/TAP device tun0 opened
Mon Feb 17 00:54:18 2020 TUN/TAP TX queue length set to 100
Mon Feb 17 00:54:18 2020 /sbin/ip link set dev tun0 up mtu 1500
Mon Feb 17 00:54:18 2020 /sbin/ip addr add dev tun0 local 10.8.0.6 peer 10.8.0.5

Después de una conexión exitosa, OpenVPN asignará una dirección IP a su sistema. Puedes comprobarlo con el siguiente comando:

ifconfig tun0

Salida:

tun0: flags=4305  mtu 1500
        inet 10.8.0.6  netmask 255.255.255.255  destination 10.8.0.5
        inet6 fe80::c6b:2644:5142:8e7f  prefixlen 64  scopeid 0x20
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 100  (UNSPEC)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2  bytes 96 (96.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0

¡Felicidades! ha instalado y configurado con éxito el servidor y el cliente OpenVPN en el servidor CentOS 8.


Cent OS
  1. Cómo instalar MongoDB en CentOS 8

  2. Cómo instalar OpenVPN en CentOS 7 u 8

  3. Cómo instalar phpMyAdmin en RHEL 8 / CentOS 8

  4. Cómo instalar P7Zip en RHEL 8 / CentOS 8

  5. Cómo instalar ntfs-3g en RHEL 8 / CentOS 8

Cómo instalar cpan en RHEL 8 / CentOS 8

Cómo instalar ruby ​​en RHEL 8 / CentOS 8

Cómo instalar Docker CE en RHEL 8 / CentOS 8

Cómo instalar VirtualBox 6.0 en CentOS 8 / RHEL 8

Cómo instalar OpenVPN en CentOS 7

Cómo instalar OpenVPN en CentOS 8