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
This commit is contained in:
3
.env.example
Normal file
3
.env.example
Normal file
@@ -0,0 +1,3 @@
|
||||
# Cloudflare Tunnel ID
|
||||
# Obtén este ID cuando crees el tunnel con: cloudflared tunnel create <nombre>
|
||||
TUNNEL_ID=your-tunnel-id-here
|
||||
20
.gitignore
vendored
Normal file
20
.gitignore
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
# Archivos sensibles - NO commitear
|
||||
credentials.json
|
||||
.env
|
||||
|
||||
# Logs
|
||||
*.log
|
||||
|
||||
# Docker
|
||||
.docker/
|
||||
|
||||
# Sistema operativo
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# Editors
|
||||
.vscode/
|
||||
.idea/
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
180
README.md
Normal file
180
README.md
Normal file
@@ -0,0 +1,180 @@
|
||||
# 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
|
||||
|
||||
```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: <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
|
||||
|
||||
```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/<TUNNEL_ID>.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 `traefik_network` para poder comunicarse con Traefik.
|
||||
|
||||
## ✅ 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 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
|
||||
|
||||
- [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/)
|
||||
28
config.yml
Normal file
28
config.yml
Normal file
@@ -0,0 +1,28 @@
|
||||
# Cloudflare Tunnel Configuration
|
||||
# Apunta a Traefik para mantener Authentik Forward Auth
|
||||
|
||||
tunnel: ${TUNNEL_ID}
|
||||
credentials-file: /etc/cloudflared/credentials.json
|
||||
|
||||
# Configuración de ingress - wildcard apunta todo a Traefik
|
||||
ingress:
|
||||
# Wildcard - todo *.nucleoriofrio.com pasa por Traefik
|
||||
- hostname: "*.nucleoriofrio.com"
|
||||
service: http://traefik:80
|
||||
originRequest:
|
||||
noTLSVerify: false
|
||||
# Preserve el Host header para que Traefik pueda enrutar correctamente
|
||||
httpHostHeader: ""
|
||||
|
||||
# Dominio raíz (opcional)
|
||||
- hostname: nucleoriofrio.com
|
||||
service: http://traefik:80
|
||||
originRequest:
|
||||
noTLSVerify: false
|
||||
httpHostHeader: ""
|
||||
|
||||
# Catch-all - rechaza todo lo demás
|
||||
- service: http_status:404
|
||||
|
||||
# Logging
|
||||
loglevel: info
|
||||
20
docker-compose.yml
Normal file
20
docker-compose.yml
Normal file
@@ -0,0 +1,20 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
cloudflared:
|
||||
image: cloudflare/cloudflared:latest
|
||||
container_name: cloudflared-tunnel
|
||||
restart: unless-stopped
|
||||
command: tunnel --config /etc/cloudflared/config.yml run
|
||||
volumes:
|
||||
- ./config.yml:/etc/cloudflared/config.yml:ro
|
||||
- ./credentials.json:/etc/cloudflared/credentials.json:ro
|
||||
environment:
|
||||
- TUNNEL_ID=${TUNNEL_ID}
|
||||
networks:
|
||||
- traefik_network
|
||||
|
||||
networks:
|
||||
traefik_network:
|
||||
external: true
|
||||
name: traefik_network
|
||||
Reference in New Issue
Block a user