Mám doma 17 serverů, ale doma žádný public port nemám. Žádný router-forward, žádná NAT brána pro každou službu, žádný kus hardwaru, který by mohl umřít. Cloudflare Tunnel mi dal HTTPS na všechno, transparentně, zdarma.
Architektura
internet → cloudflare edge → tunnel daemon na ai-dev → reverse proxy → 17 backendůcloudflared běží na jednom serveru (ai-dev, LXC 120). Tunnel udržuje outbound
HTTPS connection na Cloudflare edge. Když uživatel přijde na terminal.ajtak.it,
edge ho přes tunnel pošle na ai-dev, který přepošle na backend.
Setup
1. Vytvoř tunnel v Cloudflare dashboardu
Zero Trust → Networks → Tunnels → Create Tunnel. Pojmenuj. Zkopíruj token.
2. Nainstaluj cloudflared
Detailní step-by-step v snippet/cloudflare-tunnel-systemd.
3. Config
# /etc/cloudflared/config.yml
tunnel: 731d9362-404f-4428-b2de-1087b2921f57
credentials-file: /etc/cloudflared/cert.json
ingress:
- hostname: terminal.ajtak.it
service: ssh://localhost:22
- hostname: vikunja.ajtak.it
service: http://10.10.10.106:3456
- hostname: gitea.ajtak.it
service: http://10.10.10.103:3000
- hostname: grafana.ajtak.it
service: http://10.10.10.104:3000
# catch-all
- service: http_status:4044. DNS records
cloudflared tunnel route dns <tunnel-id> terminal.ajtak.it
cloudflared tunnel route dns <tunnel-id> vikunja.ajtak.it
# ...Vytvoří CNAME na <tunnel-id>.cfargotunnel.com. Žádný A record.
Cloudflare Access
Pro SSH a admin paneli přidávám Cloudflare Access — buď email OTP, nebo Google SSO. Bezpečnostně víc než Tailscale, protože každý request je autorizovaný.
Application policy:
- Application type: Self-hosted
- Domain:
terminal.ajtak.it - Identity provider: One-time PIN (email OTP)
- Policy:
email_domain == "protonmail.com"ANDemail == "[email protected]"
Výsledek
- 17 serverů dostupných z internetu přes HTTPS
- 0 otevřených portů na routeru
- 0 public IP adres
- automatický HTTPS, žádné Let's Encrypt rotace
- 0 EUR/měsíc
Nevýhody:
- single point of failure na cloudflared daemon (mitiguju healthcheck + systemd restart)
- závislost na Cloudflare jako CA
- Cloudflare vidí veškerý traffic (end-to-end TLS by řešil, ale ne pro web traffic)
Nevadí. Pohoda.