Cómo configurar OpenVPN en Ubuntu 20.04

OpenVPN es una VPN Secure Socket Layer (SSL) de código abierto y rica en funciones. VPN permite conectar de forma segura redes que no son de confianza, como la red WIFI en hoteles, aeropuertos o centros comerciales. VPN también permite una conexión segura a la red corporativa para acceder a los recursos. Los túneles están protegidos mediante autenticación, certificados y credenciales SSL / TLS.

En este tutorial, le mostraré cómo configurar un VPN utilizando OpenVPN sobre Ubuntu 20.04.

Prerrequisitos

Usaremos dos servidores Ubuntu que se ejecutan en la versión 20.04:

  • A Servidor de autoridad de certificación (CA) que validará la solicitud y firmará los certificados de los clientes.
  • El OpenVPN servidor en el que instalaremos la VPN.

Configurar el servidor de CA

Recomendó mantener un servidor independiente para que sirva como su CA (autoridad de certificación). Esto se debe a razones de seguridad. Procedamos a configurar el servidor CA.

Primero asegúrese de que el sistema esté actualizado. Ejecute el siguiente comando:

$ sudo apt update

Deberá crear un usuario no root para las configuraciones del servidor de la Autoridad de certificación.

$ sudo adduser malain

Ahora dele al usuario el sudo privilegios:

$ sudo usermod -aG sudo malain

Ahora cierre la sesión y luego vuelva a iniciar sesión con el usuario no root.

Instale EasyRSA en el servidor de CA

Easy-rsa es una utilidad CLI para crear y administrar una CA PKI. El servidor de CA utilizará Easy-RSA para generar una clave privada y un certificado raíz público que se utilizará para firmar las solicitudes de los clientes y servidores que dependerán de nuestra CA.

Para instalar easy-rsa, descargue la herramienta de administración PKI de github usando wget:

$ wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz

Luego descomprima el archivo tgz:

$ tar xvf EasyRSA-3.0.8.tgz

Para restringir el acceso solo al usuario, use:

$ chmod 700 EasyRSA-3.0.8

Ahora mueva EasyRSA al opt directorio

$ sudo mv EasyRSA-3.0.8 /opt/

Estamos usando EasyRSA 3.0.8 versión para esta configuración.

Cree CA usando EasyRSA

Primero, necesita crear un archivo llamado vars para almacenar la información de la organización. Para esto, podemos usar el example archivo disponible en el directorio EasyRSA-3.0.8.

Para enumerar archivos en el directorio EasyRSA, use:

$ cd EasyRSA-3.0.8/ && ls -l

Producción:

-rw-rw-r-- 1 malain malain 1305 Sep 9 2020 COPYING.md
-rw-rw-r-- 1 malain malain 5056 Sep 9 2020 ChangeLog
-rw-rw-r-- 1 malain malain 2049 Sep 9 2020 README.md
-rw-rw-r-- 1 malain malain 3335 Sep 9 2020 README.quickstart.md
drwxrwxr-x 2 malain malain 4096 Sep 9 2020 doc
-rwxrwxr-x 1 malain malain 76946 Sep 9 2020 easyrsa
-rw-rw-r-- 1 malain malain 18093 Sep 9 2020 gpl-2.0.txt
-rw-rw-r-- 1 malain malain 1036 Sep 9 2020 mktemp.txt
-rw-rw-r-- 1 malain malain 4616 Sep 9 2020 openssl-easyrsa.cnf
-rw-rw-r-- 1 malain malain 8925 Sep 9 2020 vars.example
drwxrwxr-x 2 malain malain 4096 Mar 28 14:14 x509-types

Haga una copia del archivo vars.example como vars:

$ cp vars.example vars

Ahora abra el archivo vars y agregue la información de la organización al final del archivo:

$ vim vars
set_var EASYRSA_REQ_COUNTRY "CM"
set_var EASYRSA_REQ_PROVINCE "Littoral"
set_var EASYRSA_REQ_CITY "Douala"
set_var EASYRSA_REQ_ORG "OPEN-SHARE"
set_var EASYRSA_REQ_EMAIL "[email protected]"
set_var EASYRSA_REQ_OU "Com"
set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"

Ahora inicialice nuestra PKI en nuestro servidor CA que creará la carpeta pki.

$ ./easyrsa init-pki

Ahora podemos generar el raíz pública y par de claves privadas para nuestro CA. Durante el proceso, normalmente se le pedirá que ingrese una frase de contraseña para el par de claves cada vez que necesite firmar o revocar un certificado. En nuestro caso, usaremos el comando para que no se nos solicite una contraseña. También se le pedirá que indique un Nombre común (CN) pero dejaremos el predeterminado presionando Enter llave.

$ ./easyrsa build-ca nopass

Note: using Easy-RSA configuration from: /opt/EasyRSA-3.0.8/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020
read EC key
writing EC key
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:
/opt/EasyRSA-3.0.8/pki/ca.crt

Esto creará certificado raíz llamado ca.crt archivo en el directorio pki y el pllave privada ca.key en el directorio pki / private.

$ ls -l pki/
total 52
-rw------- 1 malain malain 749 Mar 28 14:30 ca.crt
drwx------ 2 malain malain 4096 Mar 28 14:29 certs_by_serial
drwx------ 2 malain malain 4096 Mar 28 14:29 ecparams
-rw------- 1 malain malain 0 Mar 28 14:29 index.txt
-rw------- 1 malain malain 0 Mar 28 14:29 index.txt.attr
drwx------ 2 malain malain 4096 Mar 28 14:29 issued
-rw------- 1 malain malain 4616 Mar 28 14:24 openssl-easyrsa.cnf
drwx------ 2 malain malain 4096 Mar 28 14:30 private
drwx------ 5 malain malain 4096 Mar 28 14:29 renewed
drwx------ 2 malain malain 4096 Mar 28 14:24 reqs
drwx------ 5 malain malain 4096 Mar 28 14:29 revoked
-rw------- 1 malain malain 4575 Mar 28 14:24 safessl-easyrsa.cnf
-rw------- 1 malain malain 3 Mar 28 14:29 serial

$ ls -l pki/private/
total 4
-rw------- 1 malain malain 288 Mar 28 14:29 ca.key

Con esto, nuestro servidor CA está listo.

Instalar y configurar el servidor Openvpn

Pasemos al segundo servidor para instalar y configurar openvpn. También necesitará crear un usuario no root en este servidor y darle la sudo privilegios.

A instalar openvpn en ubuntu, ejecute los siguientes comandos:

$ sudo apt update
$ sudo apt install openvpn

En el servidor openvpn, easyrsa se utilizará para generar una solicitud de certificado que será verificada y firmada por el servidor CA. Siga los mismos pasos que seguimos en la última sección para instalar Easyrsa.

$ wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz

Ahora descomprima el archivo tgz descargado:

$ tar xvf EasyRSA-3.0.8.tgz

Restrinja el acceso solo al usuario:

$ chmod 700 EasyRSA-3.0.8

Mueva EasyRSA-3.0.8 al opt directorio:

$ sudo mv EasyRSA-3.0.8 /opt/

Crear una PKI

Ahora necesitamos crear PKI que ayudará a solicitar y administrar certificados TLS para los clientes y los otros servidores que se conectarán a nuestra VPN.

Creemos un archivo vars usando el archivo de ejemplos ya disponible:

$ cp vars.example vars

Ahora edite el archivo vars agregando las siguientes líneas al final del archivo:

$ vim vars
set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"

Para crear la carpeta PKI en el servidor openvpn, ejecute el easyrsa archivo de comandos:

$ ./easyrsa init-pki

Producción:

Nota: usando la configuración Easy-RSA de: /opt/EasyRSA-3.0.8/vars init-pki complete; ahora puede crear una CA o solicitudes. Su directorio PKI recién creado es: /opt/EasyRSA-3.0.8/pki

Cree la solicitud de certificado del servidor y la clave privada

Ahora generaremos un llave privada y solicitud de certificado en el servidor OpenVPN. Luego, transferiremos el archivo de solicitud de certificado al servidor de CA para ser firmado con el fin de crear el certificado requerido.

Al estar en la misma carpeta, podemos generar la solicitud con el nopass opción. El siguiente comando crea un archivo de clave privada llamado openvpn-server.key y un archivo de solicitud de certificado llamado openvpn-server.req.

$ ./easyrsa gen-req openvpn-server nopass

Producción:

Note: using Easy-RSA configuration from: /opt/EasyRSA-3.0.8/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020
Generating an EC private key
writing new private key to '/opt/EasyRSA-3.0.8/pki/easy-rsa-4737.CGhQHN/tmp.UGQ9wi'
-----
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) [openvpn-server]:

Keypair and certificate request completed. Your files are:
req: /opt/EasyRSA-3.0.8/pki/reqs/openvpn-server.req
key: /opt/EasyRSA-3.0.8/pki/private/openvpn-server.key

Ahora, copie el archivo de clave del servidor llamado openvpn-server.key al directorio llamado / etc / openvpn / server.

$ sudo cp /opt/EasyRSA-3.0.8/pki/private/openvpn-server.key /etc/openvpn/server

Luego copie el archivo de solicitud de certificado al Servidor CA:

$ scp /opt/EasyRSA-3.0.8/pki/reqs/openvpn-server.req [email protected]:/tmp

En el servidor de CA, cambie al directorio easyrsa,

$ cd /opt/EasyRSA-3.0.8/

A importar la solicitud, ejecute el siguiente comando:

$ ./easyrsa import-req /tmp/openvpn-server.req openvpn-server

Producción:

Note: using Easy-RSA configuration from: /opt/EasyRSA-3.0.8/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020

The request has been successfully imported with a short name of: openvpn-server
You may now use this name to perform signing operations on this request.

Ahora firme la solicitud. Mientras firmamos la solicitud del servidor, debemos usar la directiva server antes del nombre común de nuestro servidor openvpn. Si fue una solicitud de un cliente, deberíamos usar la directiva client en lugar de.

A firmar la solicitud:

$ ./easyrsa sign-req server openvpn-server

Producción:

Note: using Easy-RSA configuration from: /opt/EasyRSA-3.0.8/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020

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 825 days:

subject=
commonName = openvpn-server

Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /opt/EasyRSA-3.0.8/pki/easy-rsa-4100.IbygpP/tmp.hJY2T5
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'openvpn-server'
Certificate is to be certified until Jul 1 19:50:36 2023 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /opt/EasyRSA-3.0.8/pki/issued/openvpn-server.crt

Ahora que la solicitud de certificado del servidor OpenVPN ha sido firmada por el servidor CA, necesitamos transferir la solicitud firmada y el certificado público al servidor OpenVPN.

$ scp pki/{ca.crt,issued/openvpn-server.crt} [email protected]:/tmp

$ sudo cp /tmp/{ca.crt,openvpn-server.crt} /etc/openvpn/server

Ahora generaremos la clave precompartida tls-crypt para asegurarnos de que nuestro servidor OpenVPN sea capaz de hacer frente al tráfico no autenticado, escaneos de puertos y algunos ataques que pueden usar muchos de los recursos del servidor.

$ ./easyrsa gen-dh

Producción:

Nota: usando la configuración Easy-RSA de: /opt/EasyRSA-3.0.8/vars Usando SSL: openssl OpenSSL 1.1.1f 31 de marzo de 2020 Generando parámetros DH, cebador seguro de 2048 bits de largo, generador 2 Esto llevará mucho tiempo ……………………………… + …………. …………. ………………………………. …………………….. …………………… ………………………………… ……….. ………………………….. + ……. + ……. +. .. ….. + …………………………………… ……………. …………………………. ++ * ++ * ++ * ++ * Parámetros DH de tamaño 2048 creados en /opt/EasyRSA-3.0.8/pki/dh.pem

$ openvpn --genkey --secret ta.key

Ahora copie los archivos de clave y pem al directorio / etc / openvpn / server:

$ sudo cp ta.key pki/dh.pem /etc/openvpn/server

Genere un certificado de cliente y un par de claves

Necesitaremos crear un directorio para guardar los certificados y las claves de los clientes. Asegúrese de otorgar permiso al usuario no root.

$ sudo mkdir -p /opt/client-configs/keys
$ sudo chown franck:franck -R /opt/client-configs
$ sudo chmod 700 -R /opt/client-configs

Genere la solicitud del certificado de cliente:

$ cd /opt/EasyRSA-3.0.8
$ ./easyrsa gen-req my-pc nopass

Producción:

Nota: uso de la configuración Easy-RSA de: /opt/EasyRSA-3.0.8/vars Uso de SSL: openssl OpenSSL 1.1.1f 31 de marzo de 2020 Generación de una clave privada EC escribiendo una nueva clave privada en ‘/opt/EasyRSA-3.0.8/ pki / easy-rsa-6961.m7fBMu / tmp.dkqaZI ‘—– Se le pedirá que ingrese información que se incorporará a su solicitud de certificado. Lo que está a punto de ingresar es lo que se llama un Nombre Distinguido o DN. Hay bastantes campos, pero puede dejar algunos en blanco. Para algunos campos habrá un valor predeterminado. Si ingresa ‘.’, El campo se dejará en blanco. —– Nombre común (por ejemplo: su usuario, host o nombre de servidor) [my-pc]: Solicitud de certificado y par de claves completada. Sus archivos son: req: /opt/EasyRSA-3.0.8/pki/reqs/my-pc.req clave: /opt/EasyRSA-3.0.8/pki/private/my-pc.key

Ahora copie la clave del cliente en el directorio client-configs:

$ cp pki/private/my-pc.key /opt/client-configs/keys/

Copie el archivo de solicitud de certificado de cliente en el servidor de CA:

$ scp pki/reqs/my-pc.req [email protected]:/tmp

En el servidor de CA, importe el CSR:

$ cd /opt/EasyRSA-3.0.8
$ ./easyrsa import-req /tmp/my-pc.req my-pc

Note: using Easy-RSA configuration from: /opt/EasyRSA-3.0.8/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020

The request has been successfully imported with a short name of: my-pc
You may now use this name to perform signing operations on this request.

Ahora debemos firmar la solicitud del cliente, escriba:

$ ./easyrsa sign-req client my-pc

Producción:

Note: using Easy-RSA configuration from: /opt/EasyRSA-3.0.8/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020

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 825 days:

subject=
commonName = my-pc

Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /opt/EasyRSA-3.0.8/pki/easy-rsa-5511.IwDcbS/tmp.doUbCv
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'my-pc'
Certificate is to be certified until Jul 1 21:33:52 2023 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /opt/EasyRSA-3.0.8/pki/issued/my-pc.crt

Copie el certificado de cliente en el servidor openvpn:

$ scp pki/issued/my-pc.crt [email protected]:/tmp

Ahora, en el servidor openvpn, necesitamos copiar todos los archivos del cliente al directorio del cliente que hemos creado antes.

$ sudo cp /tmp/my-pc.crt /opt/client-configs/keys/

$ sudo cp /etc/openvpn/server/ca.crt /opt/client-configs/keys/

$ cp /opt/EasyRSA-3.0.8/ta.key /opt/client-configs/keys/

Asegúrese de que el usuario no root tenga los permisos sobre los archivos.

$ sudo chown franck:franck /opt/client-configs/keys/*

Configurar el servicio VPN

Primero deberíamos hacer una copia de la plantilla para usar

$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/server/

Luego descomprime el archivo

PS sudo gzip -d /etc/openvpn/server/server.conf.gz

Y entra a la carpeta

$ cd /etc/openvpn/server

Algunas líneas serán reemplazadas para que coincidan con nuestra configuración:

  • Los cifrados criptográficos se establecerán en AES-256-CBC
  • El algoritmo de resumen de mensajes HMAC será sha256
  • Como también usamos un parámetro Diffie-Hellman, lo configuraremos en dh.pem
  • Usaremos el usuario nadie y grupo nogrupo para ejecutar openvpn sin privilegios una vez que ha comenzado
  • Impulsaremos los cambios de dns para redirigir todo el tráfico a través de la VPN con los valores push redirect-gateway def1 bypass-dhcp, push dhcp-option DNS 208.67.222.222, push dhcp-option DNS 208.67.220.220
  • Mantendremos el puerto predeterminado 1194
  • Usaremos el udp protocolo
  • debemos indicar la clave openvpn-server.key y certificado openvpn-server.crt para usar como credencial

Entonces, el archivo debería verse como se muestra a continuación:

$ sudo vim /etc/openvpn/server/server.conf
tls-crypt ta.key
cipher AES-256-CBC
auth SHA256
dh dh.pem
user nobody
group nogroup
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
port 1194
proto udp
explicit-exit-notify 1
cert openvpn-server.crt
key openvpn-server.key

Debe activar el reenvío de IP editando el valor net.ipv4.ip_forward en /etc/sysctl.conf.

$ sudo vim /etc/sysctl.conf
net.ipv4.ip_forward=1

Para que los cambios que hicimos en /etc/sysctl.conf sean efectivos, ejecute:

$ sudo sysctl -p
net.ipv4.ip_forward = 1

Ahora necesita permitir OpenVPN a través de su firewall habilitando el enmascaramiento. Para hacer eso, necesita identificar el nombre de su interfaz de red pública:

$ ip route | grep default
default via X.X.X.X dev eth0 proto static

En nuestro caso es eth0. Ahora debemos agregar las reglas de enmascaramiento en la configuración del firewall, por lo que agregaremos la línea a continuación en la parte superior de los archivos de reglas:

$ sudo vim /etc/ufw/before.rules
# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to the public server interface eth0
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES

Ahora editemos ufw para permitir paquetes reenviados por defecto.

$ sudo vim /etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"

Abra el puerto openvpn en el firewall:

$ sudo ufw allow '1194/udp'

Para reiniciar el servicio ufw, escriba:

$ sudo ufw disable && sudo ufw enable

Para permitir que el servicio openvpn se inicie como inicio del sistema, escriba:

$ sudo systemctl enable openvpn-server@server

Para iniciar openvpn, escriba:

$ sudo systemctl start openvpn-server@server

Puede verificar el estado de openvpn de la siguiente manera:

$ sudo systemctl status openvpn-server@server

Producción:

[email protected] - OpenVPN service for server
Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled)
Active: active (running) since Sun 2021-03-28 23:30:57 UTC; 8s ago
Docs: man:openvpn(8)
https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
https://community.openvpn.net/openvpn/wiki/HOWTO
Main PID: 78132 (openvpn)
Status: "Initialization Sequence Completed"
Tasks: 1 (limit: 1073)
Memory: 1.0M
CGroup: /system.slice/system-openvpnx2dserver.slice/[email protected]
└─78132 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --config server.conf

Mar 28 23:30:57 localhost systemd[1]: Starting OpenVPN service for server...
Mar 28 23:30:57 localhost systemd[1]: Started OpenVPN service for server.

Para verificar la interfaz del túnel, escriba:

$ ip addr show tun0

Producción:

3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
link/none
inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::c3d9:85d1:e2a9:6b2c/64 scope link stable-privacy
valid_lft forever preferred_lft forever

Configurar archivos vpn para clientes

$ sudo mkdir -p /opt/client-configs/files

Ahora deberíamos copiar el archivo de configuración de muestra

$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /opt/client-configs/base.conf

Dar permiso al usuario no root

$ sudo chown franck:franck -R /opt/client-configs/

Edite el archivo base.conf

$ vim /opt/client-configs/base.conf
remote your_server_ip 1194
proto udp
# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup
#ca ca.crt
#cert client.crt
#key client.key
#tls-auth ta.key 1
cipher AES-256-CBC
auth SHA256
key-direction 1
# For the clients using resolvconf for DNS resolution, uncomment the lines below on the client computer
; script-security 2
; up /etc/openvpn/update-resolv-conf
; down /etc/openvpn/update-resolv-conf
# Instead for the clients using systemd-resolved for DNS resolution, uncomment the lines below on the client computer
; script-security 2
; up /etc/openvpn/update-systemd-resolved
; down /etc/openvpn/update-systemd-resolved
; down-pre
; dhcp-option DOMAIN-ROUTE .

Ahora crearemos un script para generar los certificados y archivos cifrados en el cliente. El script también hará una copia del archivo base.conf y recopilará todas las claves y certificados creados para los clientes. Para cada cliente, necesitaríamos generar un certificado y una clave antes de ejecutar el script.

$ vim /opt/client-configs/make_config.sh
#!/bin/bash

# First argument: Client identifier

KEY_DIR=/opt/client-configs/keys
OUTPUT_DIR=/opt/client-configs/files
BASE_CONFIG=/opt/client-configs/base.conf

cat ${BASE_CONFIG}
<(echo -e '<ca>')
${KEY_DIR}/ca.crt
<(echo -e '</ca>n<cert>')
${KEY_DIR}/${1}.crt
<(echo -e '</cert>n<key>')
${KEY_DIR}/${1}.key
<(echo -e '</key>n<tls-auth>')
${KEY_DIR}/ta.key
<(echo -e '</tls-auth>')
> ${OUTPUT_DIR}/${1}.ovpn

Asegúrese de que solo el usuario no root pueda ejecutar el script.

$ chmod 700 /opt/client-configs/make_config.sh

Ahora puede generar el archivo de conexión del cliente según la clave del cliente y la configuración del certificado (my-pc.crt y my-pc.key)

$ cd /opt/client-configs

Ahora ejecute el script seguido del nombre común utilizado para el cliente que creará el archivo vpn del cliente a utilizar.

$ ./make_config.sh my-pc

Puedes comprobar el resultado:

$ ls -l files/
total 12
-rw-rw-r-- 1 franck franck 8598 Mar 30 11:12 my-pc.ovpn

Conecte el cliente a la conexión OpenVPN

Instale openvpn en el cliente. Esto se utilizará para establecer la conexión vpn con el servidor.

$ sudo apt update && sudo apt install openvpn -y

Ahora copie el archivo del cliente OpenVPN que está en el servidor a su computadora cliente. Entonces, en su computadora cliente, haga el siguiente comando:

$ rsync -av [email protected]:/opt/client-configs/files/my-pc.ovpn .

Antes de editar el archivo de configuración de OpenVPN del cliente, debemos verificar si usamos resolvconf o systemd-resolve para la resolución de DNS

$ cat /etc/resolv.conf
OUTPUT:
# This file is managed by man:systemd-resolved(8). Do not edit.
. . .

nameserver 127.0.0.53
options edns0

Con el valor nameserver 127.0.0.53, muestra que usa systemd-resuelto. Por lo tanto, instale un paquete que ayudará a systemd-resuelto a usar la VPN para la resolución de DNS cuando esté conectado.

$ sudo apt install openvpn-systemd-resolved

Ahora podemos editar el archivo del cliente vpn descomentando las líneas necesarias para systemd-resuelto

$ vim my-pc.ovpn
script-security 2
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved
down-pre
dhcp-option DOMAIN-ROUTE .

Para el sistema que usa update-resolv-conf, descomentará las líneas

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

Ahora intentemos conectarse a la VPN usando el comando openvpn en el archivo de configuración del cliente:

$ sudo openvpn --config my-pc.ovpn

Puede verificar la información de IP para la interfaz del túnel

$ ip a

Esto mostrará una dirección IP de túnel y podemos hacer un ping al servidor OpenVPN. Con esto, puede confirmar que puede llegar a su servidor como si estuviera en la misma red privada.

Conclusión

Es fácil configurar una conexión VPN cuando se usa OpenVPN. Esta es una buena solución cuando desea configurar una solución VPN en su servidor en la nube sin utilizar ninguna solución especializada, como un firewall virtual o cualquier otra cosa. Es una solución rápida y segura.