Configurar una VPN con OpenVPN y Docker en cuestión de minutos

En ocasiones necesitaremos tener acceso a una VPN para gestionar diferentes cosas, como por ejemplo acceder a una web desde VPN o configurar SSH para que únicamente se tenga acceso si estás conectado a esa VPN.

Para ello lo que haremos esta vez será configurar OpenVPN gracias a un contenedor con Docker. Este contenedor que usaremos será uno creado por Kyle Manna y nos facilitará mucho el trabajo y el despliegue de una VPN.

Primeros pasos

Para realizar este tutorial será necesario primero tener instalado Docker en nuestro servidor. Tras tenerlo instalado únicamente tenemos que seguir los siguientes pasos.

Nos descargamos el repositorio con el contenedor:

git clone https://github.com/kylemanna/docker-openvpn.git

Accedemos a la carpeta que hemos descargado:

cd docker-openvpn

Y creamos la imagen con el nombre que queramos -en este caso vpn- a partir del contenedor:

docker build -t vpn .

Luego tendremos que crear un directorio donde vamos a conectar el volumen de trabajo de los contenedores, en mi caso lo voy a crear en /opt :

mkdir -p /opt/vpn-data

Configuración de OpenVPN

Ahora vamos a desplegar el contenedor y vamos a generar el primer fichero de configuración que guardaremos en la carpeta que hemos generado anteriormente.

docker run -v /opt/vpn-data:/etc/openvpn --rm vpn ovpn_genconfig -u udp://[IP_Publica_Servidor]:3000

Aquí deberemos de añadir nuestro directorio, el nombre del contenedor que hemos creado antes y luego añadir la IP pública de nuestro servidor.

Con esto, ya tenemos nuestro fichero de configuración, ahora lo siguiente será crear los PKI y el CA.

Generando los PKI y el CA

Para que OpenVPN funcione correctamente, tenemos que crear una llave privada, una llave pública y un certificado. Para ello ejecutamos lo siguiente:

docker run -v /opt/vpn-data:/etc/openvpn --rm -it vpn ovpn_initpki

Arrancamos el contenedor de OpenVPN

Finalmente, ponemos en marcha el contenedor que usaremos como servidor de OpenVPN:

docker run --name vpn -v /opt/vpn-data:/etc/openvpn --restart=always -d -p 3000:1194/udp --cap-add=NET_ADMIN vpn

Añadir un usuario

Para podemos crear usuarios o clientes para acceder a la VPN. Para eso tendremos que generar los ficheros .ovpn para cada usuario. Las conexiones se realizaran sin añadir contraseña, ya que el proceso de validación será a través de una llave, certificado y usuario.

Para crear un cliente nuevo:

docker run -v /opt/vpn-data:/etc/openvpn --rm -it vpn easyrsa build-client-full USUARIO nopass

Donde USUARIO pondremos el nombre del usuario que queramos.

Ahora ya tenemos creado el usuario, finalmente nos queda generar el fichero para su conexión:

docker run -v /opt/vpn-data:/etc/openvpn --rm vpn ovpn_getclient USUARIO > USUARIO.ovpn

Y con esto ya podremos importar el fichero OVPN en cualquier cliente de OpenVPN y podremos establecer conexión.