Instalar y configurar OpenVPN en Centos 8

En la entrada de hoy os explico como instalar y configurar la herramienta OpenVPN sobre un servidor GNU/Linux con la distribución Centos 8. Espero que sea de vuestro interes. Pero antes de nada, aclararemos algunos conceptos.

¿Qué es OpenVPN y cómo funciona?

Se trata tanto de un protocolo como de un programa que utiliza técnicas VPN con el propósito de asegurar conexiones punto a punto de sitio a sitio. Fue ideado por James Yonan en el año 2001, además es un protocolo y una herramienta VPN que sigue la filosofía del código abierto u open source.

Respecto a su funcionamiento el protocolo OpenVPN se encarga de manejar las comunicaciones entre cliente y servidor, básicamente ayuda a establecer un túnel entre ambos. Realiza el cifrado y la autentificación usando la biblioteca OpenSSL.

Puede trabajar tanto con los protocolos de transporte TCP y UDP. Entre ambos protocolos primero prueba con UDP (este es más rápido, pero tiene más fallos), que es el que está configurado por defecto, si este falla, entonces se decanta por TCP (tiene corrección de errores pero no es tan rápido)

Instalar servidor OpenVPN en Centos 8

En este caso vamos a instalar la herramienta sobre un VPS, que he creado en mi compañía de confianza Clouding.io, con una distribución Centos 8.

Crear un usuario operador

Como siempre he creado un usuario para operar en el servidor, diferente de ‘root’, algo que siempre os recomiendo. De hecho, también es importante deshabilitar el acceso de ‘root’ vía ssh.

useradd -m -c "Usuario operador" \
-s "/bin/bash" \
-d "/home/operador" \
-G wheel operador

De esta manera el nuevo usuario pertenecerá al grupo de sudo

Y le asignamos una contraseña:

passwd operador

Ahora deshabilitamos el acceso a root vía ssh:

sed -i 's/PermitRootLogin yes/PermitRootLogin no/g' \
/etc/ssh/sshd_config

Una vez hecho esto recargamos el servicio ssh:

systemctl restart sshd.service

A partir ya trabajaremos con el nuevo usuario operador.

Instalar dependencias

Lo primero que haremos es habilitar el repositorio EPEL que contiene parte del software que necesitaremos:

sudo dnf update
sudo dnf install epel-release

Conocer nuestra IP pública

Es importante, para continuar con la instalación, que sepamos nuestra IP pública. En el caso de un VPS no es problema, ya que la podemos consultar desde el propio panel de administración de nuestro proveedor. En cambio, si utilizas un servidor en una red local, puedes saber cual es que IP pública, simplemente:

curl ifconfig.me

Utilizar el guión de instalación

Ahora vamos a descargar la herramienta que ofrece el equipo de OpenVPN para realizar la instalación de forma automatizada:

wget https://raw.githubusercontent.com/Angristan/openvpn-install/master/openvpn-install.sh

Una vez descargada le otorgamos permisos de ejecución y la ponemos en marcha:

sudo chmod +x openvpn-install.sh
sudo ./openvpn-install.sh

Primero, se nos pedirá que proporcionemos la IP pública, que hemos mencionado antes. A partir de aquí se recomienda optar por las opciones predeterminadas, con el puerto predeterminado (1194) y el protocolo UDP

Seguimos la configuración por defecto

A continuación, debemos seleccionar los servidores de resolución de nombres DNS predeterminados y seleccionamos No (n) para la configuración de compresión y cifrado.

Seleccionamos el servidor DNS

Una vez hecho esto, el script comenzará la configuración del servidor OpenVPN junto con la instalación de otros programas necesarios y dependencias.

Por último, se generará un archivo de configuración del cliente utilizando el paquete easy-RSA, que es una herramienta de línea de comandos para administrar certificados de seguridad.

Simplemente debemos proporcionar el nombre del cliente y seguir las selecciones predeterminadas. El archivo del cliente se almacenará en el directorio personal con una extensión de archivo .ovpn

Una vez el script ha finalizado de configurar el servidor OpenVPN y crear el archivo de configuración de cliente, se generará una interfaz de túnel, llamada tun0. Se trata de una interfaz en la que todo el tráfico de la computadora del cliente se canalizará al servidor.

Una vez hechos todos estos pasos podemos arrancar el servicio y añadirlos al arranque:

sudo systemctl start openvpn-server@server.service
sudo systemctl enable openvpn-server@server.service
sudo systemctl status openvpn-server@server.service

A continuación trataremos la instalación en el lado del cliente.

Configurar el cliente OpenVPN en Linux

En este caso voy a utilizar un portatil con Linux Mint LMDE, por lo que la paquetería con la que trabajar es DEB

Su instalación no tiene ninguna complicación:

sudo apt install openvpn

Una vez hecho esto nos compiamos la llave que hemos creado antes en el servidor:

scp -r operador@ip-servidor:/home/operador/operador.ovpn .

Una vez descargado el fichero, ya podemos inicializar la conexión VPN, con el comando:

sudo openvpn --config operador.ovpn

De esta manera se crea una nueva tabla de enrutammiento y se establece una conexión con el servidor VPN. Como ha pasado en el lado del servidor, se crea una nueva interfaz de de red virtual, llamada tun0. Esta interfaz es la que se encargará de canalizar todo el tráfico de forma segura al servidor OpenVPN a través de un túnel SSL. El servidor VPN asignará una dirección IP a la interfaz de forma dinámica.

IMPORTANTE: Recuerda que el puerto 1194/UDP tiene que estar abierto en el servidor OpenVPN para que la conexión sea exitosa.

Muestra de uso en Linux Mint LMDE

A partir de aquí las conexiones serán vía VPN. Podemos comprobamos que todo ha ido bien si volvemos a comprobar nuestra IP pública, ahora nos debería aparecer en el equipo cliente la dirección IP del servidor OpenVPN

curl ifconfig.me

Y esto es todo, recuerda que también puedes instalar un cliente OpenVPN en otros sistemas operativos como Microsoft Windows o Macos.

No es la primera vez que hablamos de este tipo de herramientas, hace unos meses os expliqué en que consistía WireGuard VPN

Para más información: Openvpn.net