Cómo configurar OpenVPN en Ubuntu 20.04 | Uubntu 20.10

Cómo configurar OpenVPN en Ubuntu 20.04 | Uubntu 20.10

 

OpenVPN es una VPN de capa de sockets seguros (SSL) de código abierto rica en características. VPN permite conectarse de forma segura a redes no confiables, 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 el uso de autenticación, certificados y credenciales SSL/TLS.

En este tutorial, le mostraré cómo configurar una VPN usando OpenVPN en Ubuntu 20.04 .

requisitos previos

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

  • Un servidor de Autoridad de Certificación (CA) que validará la solicitud y firmará los certificados de los clientes.
  • El servidor OpenVPN en el que instalaremos la VPN.

Configurar servidor CA

Recomendó mantener un servidor independiente para que sirviera 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 que no sea raíz para las configuraciones del servidor de la autoridad de certificación.

$ sudo adduser malain

Ahora déle al usuario los privilegios de sudo :

$ sudo usermod -aG sudo malain

Ahora cierre 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 construir y administrar una CA PKI. Easy-RSA será utilizado por el servidor de CA para generar una clave privada y un certificado raíz público que se utilizará para firmar las solicitudes de clientes y servidores que dependerán de nuestra CA.

Para instalar easy-rsa, descargue la herramienta de administración de 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, utilice:

$ chmod 700 EasyRSA-3.0.8

Ahora mueva EasyRSA al optdirectorio

$ sudo mv EasyRSA-3.0.8 /opt/

Estamos utilizando la versión EasyRSA 3.0.8 para esta configuración.

Crear CA usando EasyRSA

Primero, debe crear un archivo con el nombre varspara almacenar la información de la organización. Para ello, podemos utilizar el archivo de ejemplo disponible en el directorio EasyRSA-3.0.8.

Para listar 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      "admin@open-share.com"
    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 par de claves raíz pública y privada para nuestra 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 frase de contraseña. También se le pedirá que indique un nombre común (CN), pero dejaremos el predeterminado presionando la tecla Intro.

$ ./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á un certificado raíz llamado archivo ca.crt en el directorio pki y la clave 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 deberá crear un usuario no root en este servidor y otorgarle los sudoprivilegios.

Para 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

Restringir el acceso solo al usuario:

$ chmod 700 EasyRSA-3.0.8

Mueva EasyRSA-3.0.8 al optdirectorio:

$ sudo mv EasyRSA-3.0.8 /opt/

Crear una PKI

Ahora necesitamos crear una PKI que ayude a solicitar y administrar certificados TLS para los clientes y los demás servidores que se conectarán a nuestra VPN.

Vamos a crear 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 easyrsaarchivo de script:

$ ./easyrsa init-pki

Producción:

Note: using Easy-RSA configuration from: /opt/EasyRSA-3.0.8/vars

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /opt/EasyRSA-3.0.8/pki

Crear la solicitud de certificado del servidor y la clave privada

Ahora generaremos una clave privada y una solicitud de certificado en el servidor OpenVPN. Luego, transferiremos el archivo de solicitud de certificado al servidor de CA para que se firme y se cree el certificado requerido.

Estando en la misma carpeta, podemos generar la solicitud con la nopassopció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 de CA :

$ scp /opt/EasyRSA-3.0.8/pki/reqs/openvpn-server.req  malain@192.168.216.108:/tmp

En el servidor CA, cambie al directorio easyrsa,

$ cd /opt/EasyRSA-3.0.8/

Para 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 firma la solicitud. Como estamos firmando la solicitud del servidor, debemos usar la directiva serverantes del nombre común de nuestro servidor openvpn. Si fuera una solicitud de un cliente, deberíamos usar la directiva clienten su lugar.

Para 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} franck@192.168.224.3:/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 pueda hacer frente al tráfico no autenticado, escaneos de puertos y algunos ataques que pueden usar una gran cantidad de recursos del servidor.

$ ./easyrsa gen-dh

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 DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
....................................+..........................
...............................................................
...............................................................
...........................................+.......+.......+...
.....+..........................................................
...............................++*++*++*++*

DH parameters of size 2048 created at /opt/EasyRSA-3.0.8/pki/dh.pem
$ openvpn --genkey --secret ta.key

Ahora copie los archivos key y pem en el directorio /etc/openvpn/server:

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

Generar 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 dar 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:

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-6961.m7fBMu/tmp.dkqaZI'
-----
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) [my-pc]:

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

Ahora copie la clave del cliente en el directorio de configuraciones del cliente:

$ 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  malain@192.168.216.108:/tmp                                                        

En el servidor de CA, importe la 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 de 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 del cliente en el servidor openvpn:

$ scp pki/issued/my-pc.crt franck@192.168.224.3:/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 debemos 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 descomprimir el archivo

$ 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 del mensaje HMAC será sha256
  • Como también usamos un parámetro Diffie-Hellman, lo estableceremos en dh.pem
  • Usaremos el usuario none y el grupo nogroup para ejecutar openvpn sin privilegios una vez que haya 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-dhcppush dhcp-option DNS 208.67.222.222,push dhcp-option DNS 208.67.220.220
  • Mantendremos el puerto por defecto 1194
  • Usaremos el udpprotocolo
  • debemos indicar la clave openvpn-server.keyy el certificado openvpn-server.crta utilizar como credencial

Por lo tanto, el archivo debería tener el siguiente aspecto:

$ 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 de 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 hacerlo, debe 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 siguiente línea 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 de forma predeterminada.

$ 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 el 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:

● openvpn-server@server.service - OpenVPN service for server
     Loaded: loaded (/lib/systemd/system/openvpn-server@.service; 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-openvpn\x2dserver.slice/openvpn-server@server.service
             └─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 comprobar 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 debemos 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 el 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 para usar.

$ ./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

Conectar el cliente a la conexión OpenVPN

Instale openvpn en el cliente. Esto se usará 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 franck@X.X.X.X:/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-resolved 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-resolved. Por lo tanto, instale un paquete que ayudará a systemd-resolved 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-resolved

$ 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, quitará el comentario de las líneas

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

Ahora intentemos conectarnos 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 usar ninguna solución especializada, como un firewall virtual o cualquier otra cosa. Es una solución rápida y segura.

Deja un comentario

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.