# Cloudflare Tunnel → Traefik + Authentik Configuración de Cloudflare Tunnel para exponer servicios a través de Traefik manteniendo la autenticación de Authentik. ## 🎯 Arquitectura ``` Internet → Cloudflare Tunnel → Traefik → Authentik Forward Auth → Apps ``` El wildcard `*.nucleoriofrio.com` apunta todo el tráfico a Traefik, que se encarga de: - Enrutamiento correcto según el hostname - Autenticación con Authentik - Certificados SSL/TLS - Redirecciones HTTP → HTTPS ## 📋 Requisitos previos - Docker y Docker Compose instalados - Cuenta de Cloudflare con dominio configurado - Traefik corriendo en la red `principal` - Authentik configurado con Forward Auth en Traefik - Gitea Runner configurado (para auto-deploy con Gitea Actions) ## 🚀 Setup ### 1. Crear el tunnel en Cloudflare ```bash # Login a Cloudflare cloudflared tunnel login # Crear el tunnel (guarda el TUNNEL_ID que te devuelve) cloudflared tunnel create nucleorio-tunnel # Esto genera el archivo credentials.json en ~/.cloudflared/ ``` ### 2. Configurar DNS en Cloudflare En el dashboard de Cloudflare, crea un registro CNAME: ``` Type: CNAME Name: *.nucleoriofrio.com (o solo *) Target: .cfargotunnel.com Proxy: Activado (nube naranja) ``` Opcionalmente, también para el dominio raíz: ``` Type: CNAME Name: @ (o nucleoriofrio.com) Target: .cfargotunnel.com Proxy: Activado ``` ### 3. Configurar este repositorio ```bash # Copiar el archivo de ejemplo cp .env.example .env # Editar con tu TUNNEL_ID nano .env ``` Pega tu `TUNNEL_ID` en el archivo `.env`: ```env TUNNEL_ID=tu-tunnel-id-aqui ``` ### 4. Copiar credentials.json Copia el archivo de credenciales generado por Cloudflare: ```bash cp ~/.cloudflared/.json ./credentials.json ``` ### 5. Levantar el servicio ```bash docker-compose up -d ``` ### 6. Verificar logs ```bash docker-compose logs -f ``` Deberías ver algo como: ``` INF Connection registered connIndex=0 INF Registered tunnel connection ``` ## 🔧 Configuración ### config.yml El archivo `config.yml` usa wildcard para capturar todo `*.nucleoriofrio.com` y redirigirlo a Traefik: ```yaml ingress: - hostname: "*.nucleoriofrio.com" service: http://traefik:80 ``` Traefik recibe el tráfico y: 1. Lee el `Host` header 2. Aplica las reglas de enrutamiento 3. Ejecuta Authentik Forward Auth si está configurado 4. Redirige al servicio correcto ### docker-compose.yml El contenedor se conecta a la red `principal` para poder comunicarse con Traefik. ## 🚀 Auto-deploy con Gitea Actions Este repositorio incluye un workflow de Gitea Actions (`.gitea/workflows/deploy.yml`) que automáticamente despliega el tunnel cuando haces push a `main`. **¿Qué hace el workflow?** 1. Verifica que existan `credentials.json` y `.env` 2. Descarga la última imagen de `cloudflare/cloudflared` 3. Detiene el stack actual 4. Levanta el stack actualizado 5. Muestra los logs del tunnel **Importante antes del primer deploy:** ```bash # En el servidor donde corre el gitea-runner, copia los archivos necesarios cd /ruta/donde/clona/el/runner cp ~/.cloudflared/.json ./credentials.json cp .env.example .env nano .env # Configura TUNNEL_ID ``` Una vez configurado, cada `git push` al repo actualizará automáticamente el tunnel. ## ✅ Verificación Prueba acceder a tus servicios: - https://amigos.nucleoriofrio.com → Debería redirigir a Authentik - https://wifi.nucleoriofrio.com → Debería redirigir a Authentik - https://portainer.nucleoriofrio.com → Debería redirigir a Authentik ## 🐛 Troubleshooting ### El tunnel no conecta ```bash # Verificar logs docker-compose logs -f # Verificar que credentials.json existe y es válido cat credentials.json ``` ### Traefik no recibe el tráfico ```bash # Verificar que el contenedor está en la red correcta docker network inspect principal # Debería aparecer 'cloudflared-tunnel' en la lista ``` ### Authentik no intercepta Verifica que Traefik tiene configurado el middleware de Authentik Forward Auth para tus servicios. ### El wildcard no funciona Asegúrate de que: 1. El registro DNS CNAME en Cloudflare está configurado como `*` o `*.nucleoriofrio.com` 2. El proxy (nube naranja) está activado 3. El tunnel está corriendo sin errores ## 📝 Notas importantes - **No expongas servicios directamente**: Todo debe pasar por Traefik para mantener Authentik - **Wildcard DNS**: Con `*.nucleoriofrio.com` no necesitas reconfigurar el tunnel para nuevos subdominios - **Multiple WAN**: Cloudflare Tunnel maneja automáticamente las reconexiones si tu conexión se cae - **Credenciales**: Nunca commitees `credentials.json` o `.env` al repositorio ## 🔐 Seguridad Este setup mantiene toda la seguridad de Authentik porque: - El tunnel termina en Traefik, no en las apps - Traefik aplica Forward Auth antes de permitir acceso - Las apps nunca están expuestas directamente a Internet ## 📚 Referencias - [Cloudflare Tunnel Docs](https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/) - [Wildcard DNS](https://developers.cloudflare.com/dns/manage-dns-records/reference/wildcard-dns-records/)