Source: https://www.digitalocean.com/community/tutorials/how-to-set-up-and-configure-an-openvpn-server-on-ubuntu-20-04-es
Timestamp: 2020-07-11 02:55:25+00:00

Document:
Cómo instalar y configurar un servidor de OpenVPN en Ubuntu 20.04 | DigitalOcean
UbuntuSecurityVPNUbuntu 20.04
PostedMay 28, 2020 1.5k views
OpenVPN es una solución VPN de seguridad en la capa de transporte (TLS) de código abierto y con características completas que aloja muchas configuraciones. En este tutorial, instalará OpenVPN en un servidor Ubuntu 20.04 y, luego, la configurará para que sea accesible desde la máquina de un cliente.
Un servidor de Ubuntu 20.04 con un sudo non-root user y un firewall habilitado. Para configurarlo, puede seguir nuestro tutorial Configuración inicial para servidores con Ubuntu 20.04. En todo el documento, nos referiremos a él como Servidor OpenVPN.
Un servidor Ubuntu 20.04 independiente configurado como Entidad de certificación (CA) privada, a la que nos referiremos como Servidor CA en esta guía. Después de ejecutar los pasos de la Guía de configuración inicial para servidores en este servidor, puede seguir los pasos 1 a 3 de nuestra guía Cómo instalar y configurar una entidad de certificación (CA) en Ubuntu 20.04 para ello.
Nota: Si bien es técnicamente posible usar su servidor de OpenVPN o su máquina local como CA, no se recomienda, dado que expone su VPN a algunas vulnerabilidades de seguridad. Según la documentación oficial de OpenVPN, debería colocar su CA en una máquina independiente dedicada a importar y firmar solicitudes de certificado. Por este motivo, esta guía asume que su CA se encuentra en un servidor Ubuntu 20.04 independiente que también tiene un non-root user con privilegios sudo y un firewall básico habilitado.
Una vez implementados estos requisitos previos, estará listo para comenzar a instalar y configurar un servidor de OpenVPN en Ubuntu 20.04.
Nota: Tenga en cuenta que si deshabilita la autenticación de contraseña mientras configura estos servidores, es posible que experimente dificultades al transferir archivos entre ellos más adelante en esta guía. Para solucionar este problema, puede volver a habilitar la autenticación de contraseña en cada servidor. De manera alternativa, puede generar un par de claves SSH para cada servidor, luego agregar la clave SSH pública del servidor de OpenVPN al archivo authorized_keys y viceversa. Consulte Cómo configurar claves SSH en Ubuntu 20.04 para encontrar instrucciones sobre cómo aplicar cualquiera de estas soluciones.
Para comenzar, actualice el índice de paquetes de su servidor de OpenVPN e instale y OpenVPN y Easy-RSA. Ambos paquetes están disponibles en los repositorios predeterminados de Ubuntu. Por lo tanto, puede utilizar apt para la instalación:
Para crear un directorio de PKI en su servidor de OpenVPN, deberá completar un archivo llamado vars con algunos valores predeterminados. Primero, usará cd para ingresar al directorio easy-rsa y, luego, creará y editará el archivo vars utilizando nano o el editor de texto que prefiera.
Estas son las únicas dos líneas que necesita en este archivo vars en su servidor OpenVPN ya que no se usará como Autoridad de certificación. Estas líneas garantizarán que sus claves y solicitudes de certificado privadas estén configurados para utilizar la Elliptic Curve Cryptography (ECC) moderna para generar claves y firmas seguras para sus clientes y su servidor de OpenVPN.
Si siguió el tutorial Cómo instalar y configurar una entidad de certificación (CA) en Ubuntu 20.04 de los requisitos previos, el siguiente paso será iniciar sesión en el servidor de CA como el non-root user que creó para administrar su CA. Utilice cd para el directorio ~/easy-rsa donde creó su PK y luego importe la solicitud de certificado utilizando la secuencia de comandos easyrsa:
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/server/
sudo gunzip /etc/openvpn/server/server.conf.gz
Luego, queremos que OpenVPN se ejecute sin privilegios cuando se inicie, por lo que debemos indicarle que se ejecute con el usuario nobody y el grupo nogroup. Para ello, encuentre y elimine el comentario de las líneas user nobody y group nogroup eliminando el signo ; en el inicio de cada línea:
Luego, añada la siguiente línea al final del archivo:
Asumiendo que ha seguido los requisitos previos indicados al inicio de este tutorial, ya debería tener instalado ufw y ejecutándose en su servidor. Para permitir OpenVPN a través del firewall, necesitará habilitar el enmascaramiento, un concepto iptables que proporciona traducción de direcciones de red (NAT) para dirigir de manera correcta las conexiones de los clientes.
Antes de abrir el archivo de configuración de firewall para agregar las reglas de enmascaramiento, primero debe encontrar la interfaz de red pública de su máquina. Para hacer esto, escriba lo siguiente:
ip route list default
Su interfaz pública es la secuencia de comandos que se encuentra en el resultado de este comando que sigue a la palabra “dev”. Por ejemplo, este resultado muestra la interfaz llamada eth0, que se resalta a continuación:
default via 159.65.160.1 dev eth0 proto static
Una vez que tenga la interfaz asociada con su ruta predeterminada, abra el archivo /etc/ufw/before.rules para agregar la configuración pertinente:
Las reglas de UFW suelen agregarse usando el comando ufw. Sin embargo, las reglas enumeradas en el archivo before.rules se leen e implementan antes de que se carguen las reglas de UFW. En la parte superior del archivo, agregue las líneas resaltadas a continuación. Con esto, se establecerá la política predeterminada de la cadena POSTROUTING en la tabla nat y se enmascarará el tráfico que provenga de la VPN. Recuerde reemplazar eth0 en la línea -A POSTROUTING siguiente por la interfaz que encontró en el comando anterior:
Luego, debe indicarle a UFW que permita también los paquetes reenviados de modo predeterminado. Para hacer esto, abra el archivo /etc/default/ufw:
Dentro de este, encuentre la directiva DEFAULT_FORWARD_POLICY y cambie el valor de DROP a ACCEPT:
Luego, modifique el firewall para permitir el tráfico hacia OpenVPN. Si no cambió el puerto y el protocolo en el archivo /etc/openvpn/server.conf, deberá abrir el tráfico UDP al puerto 1194. Si modificó el puerto o el protocolo, sustituya los valores que seleccionó aquí.
En caso de que se haya olvidado de agregar el puerto SSH al seguir el tutorial de los requisitos previos, agréguelo aquí también:
Luego de agregar esas reglas, deshabilite y vuelva a habilitar UFW para reiniciarlo y cargue los cambios de todos los archivos que haya modificado:
Su servidor quedará, así, configurado para manejar de manera correcta el tráfico de OpenVPN. Con las reglas de firewall implementadas, podemos iniciar el servicio de OpenVPN en el servidor.
OpenVPN se ejecuta como servicio systemd, por lo que podemos usar systemctl para administrarlo. Configuraremos OpenVPN para que se inicie en el arranque para que pueda conectarse a su VPN en cualquier momento siempre que su servidor esté ejecutándose. Para ello, habilite el servicio de OpenVPN añadiéndolo a systemctl:
Loaded: loaded (/lib/systemd/system/openvpn-server@.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2020-04-29 15:39:59 UTC; 6s ago
Main PID: 16872 (openvpn)
Tasks: 1 (limit: 1137)
└─16872 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --c>
Apr 29 15:39:59 ubuntu-20 openvpn[16872]: Initialization Sequence Completed
Por último, añada algunas líneas con comentarios eliminados para administrar varios métodos que los clientes VPN basados ​​en Linux utilizarán para la resolución DNS. Añadirá dos conjuntos de líneas con comentarios eliminados similares, pero separados. El primer conjunto es para los clientes que no utilizan systemd-resolved para administrar DNS. Estos clientes dependen de la utilidad resolvconf para actualizar la información DNS para clientes de Linux.
Luego, añada otro conjunto de líneas para clientes que utilicen systemd-resolved para la resolución de DNS:
; up /etc/openvpn/update-systemd-resolved
; down /etc/openvpn/update-systemd-resolved
; down-pre
; dhcp-option DOMAIN-ROUTE .
Más adelante, en el Paso 13: paso para Instalar la configuración del cliente de este tutorial, aprenderá a determinar cómo funciona la resolución DNS para los clientes Linux y qué sección no debería tener comentarios.
Configurar clientes que utilizan systemd-resolved
Primero, determine si su sistema utiliza systemd-resolved para gestionar la resolución DNS comprobando el archivo /etc/resolv.conf:
Si su sistema está configurado para utilizar systemd-resolved para la resolución DNS, la dirección IP después de la opción nameserver será 127.0.0.53. También debería haber comentarios en el archivo, como el resultado que se muestra que explica cómo systemd-resolved administra el archivo. Si tiene una dirección IP diferente a 127.0.0.53, entonces lo más probable es que su sistema no esté utilizando systemd-resolved y, en cambio, puede acudir a la siguiente sección sobre cómo configurar clientes Linux que tienen la secuencia de comandos update-resolv-conf.
Para admitir estos clientes, primero instale el paquete openvpn-systemd-resolved. Proporciona secuencias de comandos que forzarán systemd-resolved a utilizar el servidor VPN para la resolución DNS.
Una vez que el paquete esté instalado, configure el cliente para usarlo y envíe todas las consultas DNS a la interfaz VPN. Abra el archivo VPN del cliente:
Ahora, elimine el comentario de las siguientes líneas que añadió anteriormente:
Configurar clientes que utilizan update-resolv-conf
Si su sistema no está utilizando systemd-resolved para administrar DNS, compruebe si su distribución incluye en su lugar la secuencia de comandos /etc/openvpn/update-resolv-conf:
Si su cliente incluye el archivo update-resolv-conf, edite el archivo de configuración del cliente de OpenVPN que transfirió anteriormente:
Elimine los comentarios de las tres líneas que añadió para ajustar la configuración de DNS:
Nota: Si su cliente utiliza systemd-resolved para administrar DNS, compruebe que la configuración se aplique correctamente ejecutando el comando systemd-resolve --status de la siguiente manera:
systemd-resolve --status tun0
Debería ver un resultado como el siguiente:
Link 22 (tun0)
Si ve las direcciones IP de los servidores DNS que configuró en el servidor de OpenVPN, junto con la configuración ~. para el Dominio DNS en el resultado, habrá configurado correctamente su cliente para utilizar la resolución DNS del servidor de VPN. También puede verificar si usted está enviando consultas DNS a través de VPN utilizando un sitio como DNSleaktest.com
Para ello, siga el ejemplo en el tutorial de requisitos previos Cómo instalar y configurar una entidad de certificación en Ubuntu 20.04 en la sección Revocar un certificado.
Rechace el certificado con el comando ./easyrsa revoke client_name.

References: resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución