4 min read

Cómo montar tu propia VPN con OpenVPN-AS y Docker en Ubuntu

Cómo montar tu propia VPN con OpenVPN-AS y Docker en Ubuntu

Depender de una VPN comercial tiene sus limitaciones: confías en que el proveedor no registra tu tráfico, pagas una suscripción mensual y no tienes control sobre la infraestructura. La alternativa es montarte la tuya propia, y con OpenVPN Access Server corriendo en Docker es mucho más sencillo de lo que parece.

En esta guía verás cómo desplegar OpenVPN-AS en Ubuntu usando Docker Compose, generar el perfil de conexión y conectarte desde tu móvil Android en minutos.


¿Qué es OpenVPN Access Server?

OpenVPN Access Server (OpenVPN-AS) es la versión con interfaz web de OpenVPN. A diferencia de la versión comunitaria, que requiere configurar ficheros manualmente, Access Server incluye un panel de administración desde el navegador que simplifica enormemente la gestión de usuarios y perfiles de conexión.

La versión gratuita permite hasta 2 conexiones simultáneas, más que suficiente para uso personal o familiar.


Requisitos previos

  • Ubuntu Desktop 22.04 o 24.04
  • Docker y Docker Compose instalados (si no los tienes, consulta esta guía)
  • Una IP pública o un dominio apuntando a tu servidor
  • Puerto 943 (panel web) y 1194 UDP (tráfico VPN) accesibles desde el exterior

1. Crear la estructura de directorios

Primero crea la carpeta donde OpenVPN-AS guardará su configuración:

mkdir -p ~/openvpn-as/config
cd ~/openvpn-as

2. Crear el fichero docker-compose.yml

nano docker-compose.yml

Pega este contenido:

services:
  openvpn-as:
    image: linuxserver/openvpn-as:latest
    container_name: openvpn-as
    restart: unless-stopped
    cap_add:
      - NET_ADMIN
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Madrid
    volumes:
      - ./config:/config
    ports:
      - "943:943"     # Panel web de administración (HTTPS)
      - "9443:9443"   # Portal de usuario
      - "1194:1194/udp"  # Tráfico VPN

Guarda con Ctrl+O, Enter y cierra con Ctrl+X.

Algunas notas sobre la configuración:

  • NET_ADMIN es imprescindible — OpenVPN necesita crear interfaces de red virtuales y sin este permiso el contenedor no arranca
  • PUID y PGID deben coincidir con tu usuario del sistema. Puedes comprobarlo con id $USER
  • El puerto 943 es el panel de administración y el 9443 es el portal desde donde los usuarios descargan su perfil de conexión

3. Arrancar el contenedor

docker compose up -d

La primera vez tardará un poco más porque OpenVPN-AS genera todos los certificados y la configuración inicial. Puedes seguir el proceso con:

docker compose logs -f

Cuando veas algo como Init done o el log se detenga sin errores, el servidor está listo.


4. Obtener la contraseña inicial

OpenVPN-AS genera una contraseña aleatoria para el usuario admin en el primer arranque. Para obtenerla:

docker logs openvpn-as | grep "Auto-generated pass"

Anótala, la necesitarás en el siguiente paso.


5. Acceder al panel de administración

Abre el navegador y ve a:

https://localhost:943/admin

El navegador mostrará un aviso de certificado no confiable — es normal, el certificado es autofirmado. Acepta la excepción y continúa.

Inicia sesión con:

  • Usuario: admin
  • Contraseña: la que obtuviste en el paso anterior

Una vez dentro, lo primero que deberías hacer es cambiar la contraseña desde User Management → User Permissions → admin.


6. Configurar la IP o dominio público

Para que el perfil de conexión que descarguen los clientes apunte a tu servidor correctamente, tienes que indicarle tu IP pública o dominio.

Ve a Configuration → Network Settings y en el campo Hostname or IP Address introduce tu IP pública. Puedes consultarla rápidamente con:

curl ifconfig.me

Si tienes un dominio apuntando al servidor, úsalo en su lugar — es más cómodo si tu IP pública cambia.

Guarda los cambios y cuando te pida reiniciar el servidor VPN, acepta.


7. Crear un usuario para el móvil

En lugar de usar el usuario admin para conectarte, es mejor crear un usuario específico:

  1. Ve a User Management → User Permissions
  2. Escribe el nombre del nuevo usuario en el campo vacío (por ejemplo, rafa)
  3. Marca la casilla Allow Auto-login para que el perfil descargable incluya las credenciales
  4. Haz clic en Save Settings y luego en Update Running Server

8. Descargar el perfil de conexión (.ovpn)

Para obtener el fichero de perfil que usará Android:

  1. Abre el portal de usuario en: https://localhost:9443
  2. Inicia sesión con el usuario que acabas de crear
  3. Haz clic en Android o en Yourself (user-locked profile)
  4. Se descargará un fichero .ovpn — este es el perfil de conexión

9. Instalar la VPN en Android

Necesitarás la app oficial de OpenVPN:

  1. Instala OpenVPN Connect desde Google Play
  2. Transfiere el fichero .ovpn a tu móvil (por cable, Google Drive, email o cualquier método)
  3. Abre OpenVPN Connect → toca el + → selecciona Import from file
  4. Busca el fichero .ovpn y selecciónalo
  5. Dale un nombre al perfil y toca Add
  6. Activa la conexión con el interruptor

Si configuraste Allow Auto-login en el paso 7, la conexión se establece sin pedir contraseña. Si no, te pedirá las credenciales del usuario.

Cómo verificar que funciona: Una vez conectado, abre el navegador en el móvil y visita ifconfig.me. Si muestra la IP pública de tu servidor en lugar de la IP de tu operadora móvil, la VPN está funcionando correctamente.

10. Abrir los puertos en el router

Si tu servidor está en tu red local, necesitas configurar el reenvío de puertos (port forwarding) en tu router para que el tráfico llegue al servidor:

  • TCP 943 → IP local de tu servidor (panel admin, opcional si solo lo usas en local)
  • TCP 9443 → IP local de tu servidor (portal de usuario)
  • UDP 1194 → IP local de tu servidor (tráfico VPN, imprescindible)

El proceso varía según el modelo de router, pero suele estar en la sección NAT o Reenvío de puertos.


Errores comunes y cómo resolverlos

El contenedor arranca pero el panel web no carga Comprueba que los puertos no estén ocupados por otro proceso:

sudo ss -tulpn | grep -E '943|1194'

Error iptables al arrancar el contenedor Asegúrate de que cap_add: NET_ADMIN está en el compose. Sin él, OpenVPN no puede manipular las reglas de red del sistema.

La app de Android se conecta pero no hay acceso a internet En el panel de administración ve a VPN Settings y asegúrate de que Should client Internet traffic be routed through the VPN? está en Yes.

El certificado ha caducado tras un tiempo OpenVPN-AS renueva los certificados automáticamente, pero a veces requiere un reinicio manual:

docker compose restart

Cómo actualizar OpenVPN-AS

cd ~/openvpn-as
docker compose pull
docker compose up -d

Conclusión

Con esto tienes una VPN propia funcionando, sin depender de ningún servicio de terceros y con control total sobre quién se conecta y desde dónde. OpenVPN Access Server en Docker es una solución sorprendentemente cómoda para uso personal: el panel web simplifica la gestión y añadir un usuario nuevo lleva menos de un minuto.

Si quieres dar un paso más, el siguiente nivel sería añadir un proxy inverso con HTTPS para el panel de administración y configurar autenticación de doble factor — pero eso da para su propia guía.

Te dejo el vídeo por si quieres seguir el procedimiento de forma visual.