Cliente VPN en Docker con auto-reconexión. Inicia automáticamente al arrancar el contenedor y se reinicia solo si detecta pérdida de conectividad.
- Docker y Docker Compose
- Módulo PPP del kernel activo:
modprobe ppp - Dispositivo
/dev/pppdisponible en el host
Crea un archivo .env en la raíz del proyecto:
VPN_HOST=vpn.empresa.com
VPN_USER=usuario
VPN_PASSWORD=contraseña
VPN_PORT=443
VPN_CERT=sha256:xxxxxxxxxxxxxxxx
# Opcional: activa el health check automático
VPN_CURL_STRING=curl -s --max-time 10 http://10.0.0.1/api/ping
VPN_CURL_RESPONSE=errorSi
VPN_CURL_STRINGyVPN_CURL_RESPONSEno están definidos, el contenedor conecta la VPN pero no verifica la conectividad.
# Construir y levantar
docker-compose up --build -d
# Solo levantar (imagen ya construida)
docker-compose up -d
# Detener
docker-compose down# Log principal (inicio de VPN y reinicios)
docker exec vpntest tail -f /var/log/vpn.log
# Log del health check (se ejecuta cada minuto si está configurado)
docker exec vpntest tail -f /var/log/vpn_check.log
# Logs del contenedor (salida de Docker)
docker-compose logs -f vpn| Síntoma | Causa probable | Solución |
|---|---|---|
| Contenedor se detiene al iniciar | Variables de entorno faltantes | Verificar que .env tenga VPN_HOST, VPN_USER, VPN_PASSWORD, VPN_PORT, VPN_CERT |
Error: /dev/ppp not found |
Módulo PPP no cargado | Ejecutar modprobe ppp en el host |
| VPN conecta pero se cae seguido | Conexión inestable sin health check | Definir VPN_CURL_STRING y VPN_CURL_RESPONSE para activar auto-reconexión |
trusted-cert rechazado |
Fingerprint incorrecto | Revisar VPN_CERT — debe coincidir con el certificado del servidor |
| Health check reinicia VPN constantemente | VPN_CURL_RESPONSE hace match en respuestas normales |
Ajustar el string de error para que solo coincida en fallo real |
# Ver estado de la VPN
docker exec vpntest ps aux | grep openfortivpn
# Reiniciar VPN manualmente
docker exec vpntest /usr/local/bin/restart_vpn.sh
# Ver variables de entorno cargadas
docker exec vpntest cat /etc/vpn_envEl workflow .github/workflows/generate-image.yml construye y publica la imagen en GitHub Container Registry al hacer push a main. Requiere el secret GHCR_TOKEN configurado en el repositorio.
Para usar la imagen publicada en lugar de construir localmente, descomentar el bloque comentado en docker-compose.yml que apunta a ghcr.io/bsperezb/openfortivpn:latest.