Cloudflare Tunnel & Docker: Esporre Servizi Senza Aprire Porte sul Router
Come pubblicare applicazioni web self-hosted, API e container Docker su Internet con SSL automatico, mitigazione DDoS e protezione Zero Trust, bypassando CGNAT e router residenziali.
1. Architettura di Cloudflare Tunnel
Il componente centrale è il demone open-source cloudflared, che gira come container Docker nel tuo homelab. All'avvio, il demone crea quattro tunnel crittografici ridondanti verso i server edge di Cloudflare via protocollo QUIC (UDP 7844).
Quando un utente naviga su app.tuodominio.it:
- Cloudflare termina la sessione TLS con certificato valido e filtra gli attacchi DDoS.
- La richiesta viene inoltrata attraverso il tunnel crittografico direttamente al tuo container.
- Il tuo indirizzo IP domestico rimane 100% invisibile al mondo esterno.
2. Configurazione del Docker Compose
Ecco la composizione ottimizzata per far comunicare cloudflared con i tuoi container applicativi (es. un server web Nginx o un'applicazione Node/Python) sulla stessa rete virtuale di Docker:
version: '3.8'
services:
tunnel:
image: cloudflare/cloudflared:latest
container_name: cloudflare_tunnel
restart: unless-stopped
command: tunnel run
environment:
- TUNNEL_TOKEN=eyJhIjoiYTM0...IlTuoTokenCloudflare...
networks:
- web_network
my_app:
image: nginx:alpine
container_name: web_service
restart: unless-stopped
volumes:
- ./html:/usr/share/nginx/html:ro
networks:
- web_network
networks:
web_network:
name: internal_web_network
driver: bridge
Avvia il container in background:
docker compose up -d
3. Configurazione del Routing (Public Hostname)
Nella dashboard web di Cloudflare Zero Trust (sezione Networks → Tunnels):
- Seleziona il tuo tunnel attivo e clicca su Configure.
- Vai alla scheda Public Hostname e clicca su Add a public hostname.
- Subdomain:
app(diventeràapp.tuodominio.it). - Service Type:
HTTP - URL:
web_service:80(grazie al DNS interno di Docker, puoi usare direttamente il nome del container!).
4. Protezione con Cloudflare Access (Zero Trust)
Per pannelli di controllo critici (come Portainer, Proxmox o dashboard amministrative), puoi anteporre una schermata di login aziendale senza scrivere una riga di codice:
- In Cloudflare Zero Trust, crea una nuova Access Application.
- Associa l'URL
app.tuodominio.it. - Imposta una policy che consenta l'accesso unicamente a utenti con la tua email verificata tramite codice OTP o login Google/GitHub.
❓ Domande Frequenti (FAQ Tecniche)
Cloudflare Tunnel funziona se la connessione è sotto CGNAT?
Sì, perfettamente. Poiché la connessione è aperta dall'interno del tuo server verso i server Cloudflare (outbound), bypassa completamente qualsiasi CGNAT, Starlink o connessione 4G/5G senza richiedere IP pubblico.
Qual è il limite di upload sui file con Cloudflare Tunnel?
Sul piano Free di Cloudflare, la dimensione massima di una singola richiesta HTTP in upload è di 100 MB. Per carichi di file massivi oltre i 100 MB è preferibile utilizzare una VPN WireGuard/Tailscale privata.
Il mio IP domestico è visibile a chi visita il sito?
No, l'IP residenziale non viene mai rivelato nei record DNS o negli header HTTP. Il traffico è filtrato dai nodi edge globali di Cloudflare, proteggendo il tuo homelab da attacchi DDoS.