• Saltar a la navegación principal
  • Saltar al contenido principal
  • Saltar a la barra lateral principal

Joan Escorihuela

  • Inicio
  • Contacto

13 febrero, 2019 by Joan 5 comentarios

Servidor OpenVPN con Docker

Una de las cosas que nos permite Docker es facilitar la administración y configuración de nuestros servicios, en este caso, podemos ver un ejemplo, para tener nuestro propio servicio de OpenVPN con unos pocos pasos mediante Docker.

Para ello, vamos a usar un contenedor desarrollado por Kyle Manna que nos va a facilitar todo el proceso de puesta en marcha y configuración de los servicios, en unos pocos comandos.

Preparando el entorno

En primer lugar vamos a descargar el contenido del repositorio https://github.com/kylemanna/docker-openvpn.git donde se encuentra este maravilloso contenedor.

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

Accedemos a la carpeta que hemos descargado

cd docker-openvpn

Vamos a crear la imagen para desplegar los contenedores a paritr de esta

docker build -t mivpn .

Lo siguiente es crear un directorio, donde vamos a conectar el volumen de trabajo de los contenedores, en este directorio vamos a guardar las llaves públicas, privadas y ficheros de configuración.

Asegurate de proteger bien este directorio.

cd ..
mkdir datos-vpn

Generando el fichero de configuración de OpenVPN

Ahora vamos a desplegar el primer contenedor efímero, puesto que solo lo vamos a usar para generar el primer fichero de configuración que será guardado en la carpeta datos-vpn. Evidentemente vamos a tener que añadir a la configuración la ip pública en donde se va alojar el servicio y el puerto que vamos a escuchar, en este ejemplo vamos a usar el 3000.

docker run -v $PWD/datos-vpn:/etc/openvpn --rm mivpn ovpn_genconfig -u udp://tu.dirección.ip.publica:3000

Generando los PKI y el CA

El siguiente paso es generar las llaves y el certificado ya que OpenVPN requiere de una llave privada, otra pública y un certificado.

Por lo que vamos a ejecutar otro contenedor efímero que nos va ayudar a realizar estos ficheros, en la carpeta creada datos-vpn.

docker run -v $PWD/datos-vpn:/etc/openvpn --rm -it mivpn ovpn_initpki

Arrancamos el contenedor OpenVPN

Ahora si, vamos a poner en marcha el contenedor que nos va hacer de servidor OpenVPN, que va a recoger la configuración que tenemos en la carpeta datos-vpn.

docker run --name mivpn -v $PWD/datos-vpn:/etc/openvpn -d --restart always -p 3000:1194/udp --cap-add=NET_ADMIN mivpn

Añadiendo usuarios

Ahora podemos añadir los usuarios (clientes), generando el fichero .ovpn para cada usuario, vemos que no se va a establecer ninguna contraseña para el usuario, puesto que en este ejemplo vamos a realizar la conexión mediante llave, certificado y usuario.

Para crear el usuario cliente, una vez más vamos a usar un contenedor efímero, tan solo debemos cambiar USUARIO por el nombre de usuario que deseamos.

docker run -v $PWD/datos-vpn:/etc/openvpn --rm -it mivpn easyrsa build-client-full USUARIO nopass

Por último vamos a generar en la carpeta datos-vpn un fichero USUARIO.ovpn con la configuración para este usuario, para ello también usaremos un contenedor efímero.

docker run -v $PWD/datos-vpn:/etc/openvpn --rm mivpn ovpn_getclient USUARIO > $PWD/datos-vpn/USUARIO.ovpn

Ahora nos podemos llevar este fichero USUARIO.ovpn al cliente de OpenVPN para establecer la conexión

Conectando a nuestro servidor OpenVPN

Ahora ya podemos, mediante el cliente OpenVPN establecer una conexión

openvpn --config USUARIO.ovpn 
Tue Feb 12 11:55:36 2019 OpenVPN 2.4.4 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Sep  5 2018
Tue Feb 12 11:55:36 2019 library versions: OpenSSL 1.1.0g  2 Nov 2017, LZO 2.08
Tue Feb 12 11:55:36 2019 TCP/UDP: Preserving recently used remote address: [AF_INET]12.34.56.78:3000
Tue Feb 12 11:55:36 2019 UDP link local: (not bound)
Tue Feb 12 11:55:36 2019 UDP link remote: [AF_INET]12.34.56.78:3000
Tue Feb 12 11:55:36 2019 WARNING: 'link-mtu' is used inconsistently, local='link-mtu 1541', remote='link-mtu 1542'
Tue Feb 12 11:55:36 2019 WARNING: 'comp-lzo' is present in remote config but missing in local config, remote='comp-lzo'
Tue Feb 12 11:55:36 2019 [51.68.78.181] Peer Connection Initiated with [AF_INET]12.34.56.78:3000
Tue Feb 12 11:55:37 2019 Options error: Unrecognized option or missing or extra parameter(s) in [PUSH-OPTIONS]:1: block-outside-dns (2.4.4)
Tue Feb 12 11:55:37 2019 TUN/TAP device tun0 opened
Tue Feb 12 11:55:37 2019 do_ifconfig, tt->did_ifconfig_ipv6_setup=0
Tue Feb 12 11:55:37 2019 /sbin/ip link set dev tun0 up mtu 1500
Tue Feb 12 11:55:37 2019 /sbin/ip addr add dev tun0 local 192.168.255.6 peer 192.168.255.5
Tue Feb 12 11:55:37 2019 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
Tue Feb 12 11:55:37 2019 Initialization Sequence Completed

¿Te ha gustado?

¡Suscribete para recibir más articulos como este!

¡Muchas gracias!

Publicado en: Linux, Redes, Sistemas

Interacciones con los lectores

Comentarios

  1. Javi dice

    22 julio, 2019 a las 7:34 pm

    Hola!
    He seguido el tutorial paso a paso, pero no consigo encontrar los certificados en .ovpn
    Todos los certificados que me aparecen en la carpeta datos-vpn tienen extensiones que no las soporta openvpn (.key, .crt)
    ¿Algún consejo?

    Responder
    • Joan dice

      26 agosto, 2019 a las 5:47 pm

      El fichero ovpn se genera luego de crear el usuario, es un fichero para cada usuario. ¿No te lo genera con docker run -v $PWD/datos-vpn:/etc/openvpn –rm mivpn ovpn_getclient USUARIO > $PWD/datos-vpn/USUARIO.ovpn?

      Responder
  2. Victor dice

    25 octubre, 2020 a las 2:14 am

    Hola,

    esta instrucción da un error:

    «docker run -v $PWD/datos-vpn:/etc/openvpn –rm -it mivpn ovpn_initpki»

    Easy-RSA error:

    The file ‘/etc/openvpn/vars’ was not found.

    Responder
  3. Phco dice

    25 abril, 2024 a las 7:45 pm

    Muchísimas gracias!
    Después de dar vueltas y probar con varios tutoriales, he conseguido hacerlo a la primera!

    Responder

Responder a Phco Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

sidebar

sidebar-alt

Joan Escorihuela ·
  • Política de cookies
  • Contacto
Gestionar consentimiento
Para ofrecer las mejores experiencias, utilizamos tecnologías como las cookies para almacenar y/o acceder a la información del dispositivo. El consentimiento de estas tecnologías nos permitirá procesar datos como el comportamiento de navegación o las identificaciones únicas en este sitio. No consentir o retirar el consentimiento, puede afectar negativamente a ciertas características y funciones.
Funcional Siempre activo
El almacenamiento o acceso técnico es estrictamente necesario para el propósito legítimo de permitir el uso de un servicio específico explícitamente solicitado por el abonado o usuario, o con el único propósito de llevar a cabo la transmisión de una comunicación a través de una red de comunicaciones electrónicas.
Preferencias
El almacenamiento o acceso técnico es necesario para la finalidad legítima de almacenar preferencias no solicitadas por el abonado o usuario.
Estadísticas
El almacenamiento o acceso técnico que es utilizado exclusivamente con fines estadísticos. El almacenamiento o acceso técnico que se utiliza exclusivamente con fines estadísticos anónimos. Sin un requerimiento, el cumplimiento voluntario por parte de tu proveedor de servicios de Internet, o los registros adicionales de un tercero, la información almacenada o recuperada sólo para este propósito no se puede utilizar para identificarte.
Marketing
El almacenamiento o acceso técnico es necesario para crear perfiles de usuario para enviar publicidad, o para rastrear al usuario en una web o en varias web con fines de marketing similares.
  • Administrar opciones
  • Gestionar los servicios
  • Gestionar {vendor_count} proveedores
  • Leer más sobre estos propósitos
Ver preferencias
  • {title}
  • {title}
  • {title}