Fundamentos de cómo ejecutar OpenVPN en Docker en Ubuntu

¿Estás preocupado por cómo puedes acceder libremente a Internet sin muchas restricciones ni inseguridades de datos? ¡No te preocupes más! Comienza a alojar tu servidor VPN utilizando OpenVPN en Docker.

Con las tecnologías de Docker y OpenVPN, puedes configurar y ejecutar tu servidor VPN en poco tiempo. Y en este tutorial, aprenderás los fundamentos básicos de cómo ejecutar un servidor OpenVPN alojado en un contenedor Docker.

Mantente atento y mantén seguro tu servidor VPN con OpenVPN Docker!

Prerrequisitos

Esta guía será una demostración práctica. Si sigues los pasos, necesitarás lo siguiente:

  • A Linux-based operating system (OS) – This tutorial uses Ubuntu v22.04, but other Linux distributions will work.
  • Docker instalado y en funcionamiento: este tutorial utiliza Docker v20.10.17.

Creación de un contenedor Docker para OpenVPN

El contenerizar es como empaquetar código y todas sus dependencias como una unidad de software estándar para ejecutar su aplicación de manera rápida y confiable. Hay varias formas de crear un contenedor Docker OpenVPN. Puedes construir el contenedor desde cero o descargar un contenedor ya hecho desde el Docker Hub.

Pero en este tutorial, utilizarás un archivo de imagen Docker OpenVPN existente. Los contenedores prehechos ofrecen varios beneficios, ya que están probados exhaustivamente contra diversas vulnerabilidades con el respaldo de una vasta comunidad de desarrolladores. Además, estos contenedores te ayudan a ahorrar tiempo y eliminan la necesidad de reinventar la rueda.

Para crear un contenedor Docker OpenVPN:

1. Abre tu terminal y ejecuta el siguiente comando OVPN_DATA, que no proporciona salida pero establece un nombre de volumen de datos como ovpn-data-test en la variable OVPN_DATA.

OVPN_DATA="ovpn-data-test"

2. A continuación, ejecuta el siguiente comando docker volume create para crear un volumen de datos con el nombre que estableciste en la variable $OVPN_DATA.

Este comando no proporciona salida pero crea un contenedor de volumen de datos para OpenVPN donde se almacenan todos los datos, archivos de configuración y certificados.

docker volume create --name $OVPN_DATA

3. Por último, ejecuta el siguiente docker run comando para descargar e instalar la imagen Docker OpenVPN con lo siguiente:

  • Especifica el espacio de almacenamiento (-v) dentro del contenedor que está separado del resto del sistema de archivos del contenedor. En este caso, la imagen de Docker de OpenVPN se almacena en el directorio /etc/openvpn.
  • Especifica el mecanismo de registro (--log-driver) que mantiene la información de los contenedores en ejecución y los servicios (none).
  • Indica a Docker que elimine automáticamente (–rm) el contenedor cuando ya existe.

Asegúrate de reemplazar (YourPublicIP.com) con la dirección IP pública o el nombre de dominio (si tienes uno) de tu servidor a través del protocolo UDP. Pero ten en cuenta que también puedes utilizar el protocolo TCP.

TCP es un protocolo orientado a la conexión, mientras que UDP es un protocolo sin conexión.

docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_genconfig -u udp://YourPublicIP.com
Installing OpenVPN on Docker container

Ten en cuenta que si planeas utilizar autohospedaje o una IP pública, debes realizar el reenvío de puertos en tu router/módem.

Asegurando el Cliente de OpenVPN con Certificados

Has instalado con éxito el cliente de Docker de OpenVPN en tu máquina, ¡así que hurra! Pero antes de usar OpenVPN, primero debes configurar la configuración del cliente de OpenVPN.

El hecho de que estés trabajando en OpenVPN no significa que debas abrir tu servidor VPN al mundo. Necesitarás certificados para asegurar tu cliente de OpenVPN:

1. Ejecute el siguiente comando docker run para generar y recuperar el certificado de CA y del cliente. Este comando crea contenedores de OpenVPN en ejecución (–it) a partir de la imagen especificada dentro del contenedor principal.

En la mayoría de los casos, generar los certificados del servidor CA lleva tiempo, dependiendo de los recursos de la máquina que esté utilizando.

docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm -it kylemanna/openvpn ovpn_initpki

Escriba yes y presione Enter, como se muestra a continuación, para iniciar el sistema de PKI de OpenVPN.

Initiating the OpenVPN PKI system

2. A continuación, proporcione y confirme una nueva contraseña para el certificado de CA, y presione Enter. Guarde la contraseña en un lugar seguro, ya que la necesitará más adelante al configurar y generar un certificado de cliente.

Setting a new CA certificate password

3. Establezca un nombre único para su certificado de CA, y presione Enter.

Naming the new CA certificate

4. Ahora, ingrese la frase de contraseña del CA que estableció en el paso dos para comprobar que la solicitud coincida con la firma.

Checking \the request matches the signature

5. Ingrese su contraseña nuevamente para generar una clave privada.

Generate a private key by entering the CA passphrase

6. A continuación, ejecute el siguiente comando para iniciar el servicio del servidor OpenVPN en Docker para configurar un cliente OpenVPN, donde:

  • La opción -p establece el puerto (1194) que escucha e inicia la conexión entre el servidor y el cliente.

Puede cambiar el puerto 1194 para que se ajuste a sus preferencias si no se siente cómodo usando el puerto predeterminado de OpenVPN.

  • El argumento –cap-add=NET_ADMIN aplica las capacidades adicionales de Linux modificando las interfaces de red que Docker no otorga por defecto.
docker run -v $OVPN_DATA:/etc/openvpn -d -p 1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn
Setting the port OpenVPN will listen to

7. Una vez que se establezca el puerto, ejecute el siguiente comando docker run para realizar lo siguiente:

  • Genera el certificado del cliente y descarga el archivo de configuración del cliente (.ovpn) desde el contenedor de Docker al servidor principal. El certificado generado no tiene contraseña, como se especifica en el argumento no-pass en el comando.
  • Establece el nombre del archivo del certificado OpenVPN y la identificación del cliente en CLIENTAPP. El certificado se guarda en el directorio de usuario del servidor principal, no en el contenedor de Docker.
docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm -it kylemanna/openvpn easyrsa build-client-full CLIENTAPP nopass

Ingresa tu frase de contraseña, como se muestra a continuación, para completar la generación del certificado.

Generating the VPN client certificate

8. A continuación, ejecuta el siguiente comando para generar y descargar el archivo de configuración de la conexión OpenVPN (ovpn_getclient) desde el contenedor al servidor principal.

docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_getclient CLIENTAPP > CLIENTAPP.ovpn

9. Ve al directorio user/home en tu servidor principal (máquina Linux) y transfiere el archivo .ovpn (CLIENTAPP.ovpn) a tu dispositivo Android.

10. Finalmente, inicia tu aplicación cliente OpenVPN Connect en tu dispositivo Android.

Toca en NAVEGAR bajo la pestaña ARCHIVO y selecciona el archivo .ovpn (CLIENTAPP.ovpn) que transferiste a tu dispositivo Android. Al hacerlo, se agrega un nuevo perfil al cliente OpenVPN Connect.

Importing the .ovpn file to the OpenVPN Connect client

Al conectarte con éxito, verás el resultado a continuación.

Verifying successful connection to the VPN server

Accediendo a la interfaz web de OpenVPN

¿Te preocupa la cantidad de comandos que tuviste que cubrir para acceder a tu servidor VPN? ¿Por qué no probar una interfaz web simple?

OpenVPN ofrece un conjunto de herramientas de instalación y configuración basadas en la web que permiten implementar rápidamente soluciones de acceso remoto a VPN. El kit de herramientas se presenta en un paquete único llamado servidor de acceso OpenVPN.

Para acceder a la interfaz web de OpenVPN, debes instalar el paquete:

1. Ejecuta el siguiente comando docker pull para descargar e instalar el último contenedor Docker de OpenVPN (openvpn-as) desde el Linux Server Docker Hub (linuxserver).

docker pull linuxserver/openvpn-as
Downloading OpenVPN Access Server Docker container

2. Una vez descargado, ejecuta el comando docker create a continuación para crear un nuevo contenedor Docker llamado openvpn-as con lo siguiente:

  • -v /home/docker/openvpn-as/config: /config – Establece el directorio para almacenar los archivos de configuración.
  • --restart=always – Asegura que el contenedor siempre se inicie en el arranque del sistema. Puedes optar por no agregar este argumento si no deseas que el contenedor se reinicie.
  • -e PGID=1001 -e PUID=1001 – Establece el ID de usuario para eliminar problemas de permisos entre el servidor host y el contenedor.
  • –net=host –privileged – Dicta cómo se ejecuta OpenVPN Access Server en el contenedor.
docker create --name=openvpn-as --restart=always -v /home/docker/openvpn-as/config:/config -e INTERFACE=eth0 -e PGID=1001 -e PUID=1001 -e TZ=Africa/Nairobi --net=host --privileged linuxserver/openvpn-as
Creating a new Docker container (openvpn-as)

3. A continuación, ejecuta el comando docker start siguiente para acceder a la interfaz web de OpenVPN a través del contenedor Docker del Servidor de Acceso OpenVPN que creaste en el paso dos.

docker start openvpn-as
Starting the OpenVPN access server Docker container

4. Por último, abre tu navegador web favorito y navega hasta la interfaz web de OpenVPN con la dirección IP local (por ejemplo, https://TuIP:943/admin). Reemplaza TuIP con la dirección IP real de tu servidor.

Si todo va bien, te dará la bienvenida la página de inicio de sesión del Servidor de Acceso OpenVPN, como se muestra a continuación.

Introduce admin y la contraseña como Nombre de usuario y Contraseña, y haz clic en Iniciar sesión para acceder al panel de control del Servidor de Acceso OpenVPN.

Ten en cuenta que el nombre de usuario y la contraseña predeterminados son admin y password, respectivamente. Puedes cambiar las credenciales según tus preferencias.

Accessing the OpenVPN Access Server web UI

Después de iniciar sesión, verás el panel de control del Servidor de Acceso OpenVPN a continuación.

Accessing the OpenVPN Access Server dashboard

Configuración de DNS para una conexión más rápida y segura

En este punto, tu Servidor de Acceso OpenVPN está funcionando correctamente. Pero para mejorar el rendimiento de tu servidor VPN, debes configurar el DNS.

Para configurar el DNS, debes acceder a la interfaz web del servidor OpenVPN y actualizar los ajustes del DNS con los servidores DNS de Google o los servidores DNS de tu preferencia. Google ofrece los servidores DNS más rápidos disponibles, que usarás en tu Servidor de Acceso OpenVPN.

1. Haz clic en Configuración VPN (panel izquierdo) bajo la pestaña CONFIGURACIÓN en el panel de control de tu Servidor de Acceso OpenVPN.

Desplázate hacia abajo hasta la sección de Configuración de DNS y habilita la opción Tener clientes que utilicen servidores DNS específicos, como se muestra a continuación.

Enabling custom OpenVPN DNS addresses

2. A continuación, actualiza el Servidor DNS Primario (8.8.8.8) y el Servidor DNS Secundario (8.8.8.4) con las direcciones DNS de Google como se indica a continuación, y haz clic en Guardar configuración para guardar los cambios.

Setting custom OpenVPN DNS addresses

3. Después de guardar los cambios, haz clic en Actualizar servidor en ejecución para reiniciar el servidor y que los cambios surtan efecto.

Updating the server settings

4. Ahora, accede al Servidor de Acceso OpenVPN (por ejemplo, https://TuIP:943/admin) en tu máquina Linux. Sustituye TuIP con la dirección IP de tu servidor. Si la configuración es correcta, verás la misma página que se muestra a continuación.

Inicia sesión con las credenciales predeterminadas (admin y contraseña) para el nombre de usuario y la contraseña.

Logging in to OpenVPN Access Server

5. Haz clic en los iconos de cualquier plataforma para descargar la aplicación del cliente y haz clic en Tú mismo (perfil bloqueado por usuario) para descargar el archivo del cliente .ovpn.

Downloading the .ovpn config file and client app

6. Por último, inicia el Cliente OpenVPN que descargaste e importa el archivo .ovpn como lo hiciste en el último paso de “Asegurar el Cliente OpenVPN con Certificados”, como se muestra a continuación.

Connecting to the OpenVPN server

Conclusión

Alojar tu servidor VPN nunca debería ser una tarea compleja, y mucho menos asegurar la conexión de tu servidor. Afortunadamente, OpenVPN Docker está a la vuelta de la esquina para salvar el día. Y en este tutorial, has aprendido a instalar, configurar y establecer OpenVPN usando Docker en Ubuntu. También has abordado la seguridad del acceso a OpenVPN en un contenedor Docker con la CA de OpenVPN y certificados de cliente.

Aparte de acceder a tu servidor OpenVPN a través de la interfaz de línea de comandos, ahora tienes una forma visual de hacerlo mediante la interfaz web del OpenVPN Access Server. Has logrado una implementación rápida de VPN generando archivos de configuración del cliente para las aplicaciones del cliente OpenVPN.

¿Por qué no aprovechar este conocimiento recién adquirido creando servicios de túneles VPN para tus aplicaciones mediante WireGuard VPN? ¡Explora el mundo de posibilidades ilimitadas utilizando servicios VPN alojados por ti mismo!

Source:
https://adamtheautomator.com/openvpn-in-docker/