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_ADMINes imprescindible — OpenVPN necesita crear interfaces de red virtuales y sin este permiso el contenedor no arrancaPUIDyPGIDdeben coincidir con tu usuario del sistema. Puedes comprobarlo conid $USER- El puerto
943es el panel de administración y el9443es 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:
- Ve a User Management → User Permissions
- Escribe el nombre del nuevo usuario en el campo vacío (por ejemplo,
rafa) - Marca la casilla Allow Auto-login para que el perfil descargable incluya las credenciales
- 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:
- Abre el portal de usuario en:
https://localhost:9443 - Inicia sesión con el usuario que acabas de crear
- Haz clic en Android o en Yourself (user-locked profile)
- 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:
- Instala OpenVPN Connect desde Google Play
- Transfiere el fichero
.ovpna tu móvil (por cable, Google Drive, email o cualquier método) - Abre OpenVPN Connect → toca el + → selecciona Import from file
- Busca el fichero
.ovpny selecciónalo - Dale un nombre al perfil y toca Add
- 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.