josedario87 ed49ee79d4 Initial commit: Cloudflare Tunnel → Traefik configuration
Configuración de Cloudflare Tunnel con wildcard *.nucleoriofrio.com
que apunta a Traefik para mantener autenticación con Authentik.

Componentes:
- config.yml: Configuración del tunnel con wildcard
- docker-compose.yml: Servicio cloudflared
- .env.example: Template para variables de entorno
- README.md: Documentación completa de setup
- .gitignore: Protección de credenciales
2025-10-05 02:13:19 -06:00

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 traefik_network
  • Authentik configurado con Forward Auth en Traefik

🚀 Setup

1. Crear el tunnel en Cloudflare

# 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: <TUNNEL_ID>.cfargotunnel.com
Proxy: Activado (nube naranja)

Opcionalmente, también para el dominio raíz:

Type: CNAME
Name: @ (o nucleoriofrio.com)
Target: <TUNNEL_ID>.cfargotunnel.com
Proxy: Activado

3. Configurar este repositorio

# Copiar el archivo de ejemplo
cp .env.example .env

# Editar con tu TUNNEL_ID
nano .env

Pega tu TUNNEL_ID en el archivo .env:

TUNNEL_ID=tu-tunnel-id-aqui

4. Copiar credentials.json

Copia el archivo de credenciales generado por Cloudflare:

cp ~/.cloudflared/<TUNNEL_ID>.json ./credentials.json

5. Levantar el servicio

docker-compose up -d

6. Verificar logs

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:

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 traefik_network para poder comunicarse con Traefik.

Verificación

Prueba acceder a tus servicios:

🐛 Troubleshooting

El tunnel no conecta

# Verificar logs
docker-compose logs -f

# Verificar que credentials.json existe y es válido
cat credentials.json

Traefik no recibe el tráfico

# Verificar que el contenedor está en la red correcta
docker network inspect traefik_network

# 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

Description
No description provided
Readme 57 KiB
Languages
Shell 100%