GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Cómo instalar y alojar un servidor OpenVPN con Docker

Resumen

Esta publicación cubre el procedimiento de cómo instalar y alojar el servidor OpenVPN con Docker. Lo que significa que vamos a poder usar Docker para instalar el servidor OpenVPN y ejecutarlo como un servicio, generar configuraciones y certificados de conexión de clientes, que luego podemos usar para conectar varios clientes en nuestro servidor VPN. Este método funciona en cualquier distribución de Linux que tenga Docker instalado y ejecutándose.

NOTA – Esta configuración es para un entorno sin contraseña, lo que significa que el cliente no usará el nombre de usuario y la contraseña para conectarse al servidor, sino que usará certificados de cliente para conectarse.

Si no le gusta la solución o prefiere otro método, también cubrimos el mismo proceso con Wireguard y Docker. Puedes comprobarlo en esta publicación.

Requisitos previos:

– Docker instalado y ejecutándose. Si no está instalado, consulte esta publicación para obtener instrucciones de instalación de Docker en Debian y Ubuntu

– Contenedor Docker que vamos a usar – ENLACE (también consulte para obtener más información si es necesario)

Instalación del contenedor Docker del servidor OpenVPN

1. El primer paso es crear un contenedor de volumen de datos para OpenVPN, de modo que pueda almacenar todos los datos, archivos de configuración y certificados. Se sugiere agregar el prefijo "ovpn-data-" y luego agregar otra palabra que desee al final. Por ejemplo, debería verse así:ovpn-data-example. Y reemplazas la palabra ejemplo con lo que quieras.

Así que en la terminal ejecuta el comando:

OVPN_DATA="ovpn-data-example"

Ahora crearemos el contenedor de volumen de datos:

docker volume create --name $OVPN_DATA

Nota:si no ha agregado a Docker los privilegios elevados en su host de Linux, deberá agregar Sudo cada vez que desee ejecutar los comandos de Docker.

2. Luego, descargue el archivo de imagen de la ventana acoplable OpenVPN con el argumento para configurarlo para usar la dirección IP pública de su servidor (host) o su nombre de dominio a través del protocolo UDP (también puede usar el protocolo TCP):

docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_genconfig -u udp://VPN.SERVERNAME.COM

Reemplace VPN.SERVENAME.COM con su dirección IP pública o con un nombre de dominio que registró y apuntó a su servidor. Esta es la configuración si aloja su servidor en una nube (como en AWS, Azure, UpCloud, Digital Ocean, Linode, etc.).

Para la opción de autohospedaje en el hogar:esto también se aplica si tiene una dirección IP pública estática, además, deberá realizar el reenvío de puertos en su enrutador (módem) para apuntar a su host (servidor). Si no tiene una dirección IP estática, deberá usar un DNS dinámico.

Generación y recuperación de certificados de CA y certificados de clientes

3. Ahora necesitamos iniciar nuestro sistema PKI para generar el certificado CA para nuestro servidor y también para generar certificados de cliente:

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

Sigue las instrucciones. Si planea instalar OpenVPN en un servidor en la nube que tiene recursos limitados (por ejemplo, 1 CPU y 1 GB de RAM), puede llevar un tiempo generar el certificado del servidor CA (unos 15 minutos).

Cuando inicie la PKI para OpenVPN, primero le pedirá que proporcione una contraseña para el certificado de CA.

NOTA IMPORTANTE – Escriba en algún lugar la frase de contraseña de CA, la necesitará más adelante durante el proceso de configuración y cada vez que genere un certificado de cliente.

A continuación, le pedirá que proporcione un nombre para la CA. Puede ingresar cualquier cosa.

El proceso de generación de CA llevará un tiempo.

Una vez que esté completo, generará una clave privada y le pedirá nuevamente que proporcione la frase de contraseña de CA que ingresó anteriormente. Le pedirá 2 veces la contraseña.

El certificado CA generado será válido durante los próximos 3 años.

Iniciar el servicio del servidor OpenVPN

4. Ejecute el comando Docker para iniciar el contenedor OpenVPN:

docker run -v $OVPN_DATA:/etc/openvpn -d -p 1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn

Nota:el argumento en el comando -p 1194:1194/udp también es una parte importante de esta configuración. Este argumento establecerá nuestro OpenVNP en qué puerto escuchar y usar para establecer la comunicación entre el servidor y el cliente. En el comando anterior, está configurado para usar el puerto 1194 (número izquierdo para el contenedor Docker y número derecho para el servidor host), porque OpenVPN usa el número de puerto 1194 de forma predeterminada a través del protocolo UDP. Cambie este número si planea usar un número de puerto diferente.

Generar el certificado del cliente y extraer el archivo de configuración del cliente del contenedor al host

5. Ejecute este comando para generar un certificado para un dispositivo cliente:

docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm -it kylemanna/openvpn easyrsa build-client-full CLIENTNAME nopass

El argumento CLIENTNAME en el comando anterior puede reemplazarlo con lo que desee. Eso es para el nombre de archivo del certificado y para la identificación del cliente. El comando también generará un certificado sin contraseña. El certificado se colocará en el directorio de inicio del usuario en el sistema de archivos del host (nombre de usuario que está utilizando para iniciar sesión en el host a través de SSH) NO en el contenedor de Docker.

Al generar los certificados de cliente, OpenVPN le pedirá que proporcione la frase de contraseña de CA.

NOTA:los certificados generados, como se ve en las imágenes, durarán 3 años desde el momento en que los haya creado.

6. Ejecute este comando para compilar el archivo de configuración de la conexión OpenVPN y recuperarlo del contenedor Docker al servidor host

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

Después de eso, necesitará un cliente FTP, SFTP o SCP para conectarse a su servidor host y descargar el archivo OpenVPN y usarlo para conectarse a su servidor VPN.

Conéctese a su servidor OpenVPN

Para conectarse a su servidor VPN, necesitará instalar el cliente OpenVPN. Hay aplicaciones cliente para Windows y Android:OpenVPN connect. En la aplicación, simplemente importe el archivo openvpn como un nuevo perfil y conéctese.

Por supuesto, está el cliente para Linux. El administrador de red en Linux es compatible con OpenVPN, pero solicita importar todos los certificados por separado. Entonces, por simplicidad, sugiero instalar el cliente de la aplicación también. En distribuciones Debian y Ubuntu:

$ sudo apt install openvpn

Una vez que esté instalado, navegue hasta la ubicación donde se encuentra el archivo del certificado y ejecute el comando:

$ sudo openvpn ./CLIENTNAME.ovpn

El resultado de la conexión exitosa debería verse así

Asegúrese de abrir los puertos apropiados a su servidor

También una nota importante para que esto funcione. Si planea alojar esto en una nube o si ha instalado un firewall en su servidor, debe abrir y permitir los puertos que asignó a su servidor OpenVPN.

En este caso, el servidor está en la nube y necesitaba abrir los puertos 1194 para el protocolo UDP en el firewall.

Conectar múltiples clientes

Puede conectar varios clientes con esta configuración. Un método es utilizar un certificado en varios dispositivos, pero el método es menos seguro. Para esto, deberá acceder al archivo de configuración del servidor OpenVPN ubicado en el contenedor Docker y agregar el argumento:

duplicate-cn

Recomiendo emitir/generar un nuevo certificado por separado para cada cliente. Para lograr esto, necesitas repetir un par de comandos:

Vuelva a iniciar el volumen de la ventana acoplable para OpenVPN.

OVPN_DATA="ovpn-data-example"
docker volume create --name $OVPN_DATA

Luego genere un nuevo certificado de cliente pero use un nombre diferente en lugar de CLIENTNAME:

docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm -it kylemanna/openvpn easyrsa build-client-full CLIENTNAME nopass

y, por supuesto, recupere el archivo de configuración de OpenVPN y descargue el archivo:

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

Resumen

Cubrimos el proceso de cómo instalar OpenVPN con Docker, cómo alojar OpenVPN con Docker, ejecutar el sistema PKI, generar el certificado de CA y el certificado de cliente y cómo conectarse. Personalmente, me gusta esta configuración, primero por la facilidad de uso, la administración y la forma en que la configuración tiene una seguridad bastante alta tanto en el servidor como en el cliente. Todos los apoyos y el crédito a KyleManna por crear una imagen de Docker tan asombrosa.


Docker
  1. Cómo instalar y configurar Debian 8 Docker Host minimalista

  2. Cómo instalar y configurar OpenVPN Server en Debian 10

  3. Cómo instalar NFS Client y Server en Ubuntu 20.04

  4. Instale el servidor Wireguard VPN con Docker

  5. Cómo y por qué usar un host Docker remoto

Cómo instalar y configurar el servidor web Apache con host virtual en Debian 10

Cómo instalar y usar Docker Compose en Ubuntu 20.04

Cómo instalar y usar Docker Compose en Ubuntu 22.04

Cómo instalar y usar Docker en Ubuntu 22.04

Cómo instalar Docker y Docker Compose en Linux

Cómo instalar Docker en Rocky Linux y AlmaLinux