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 jednom LXC → reverse proxy → backendycloudflared běží na jednom serveru (malý LXC stačí). Tunnel udržuje outbound
HTTPS connection na Cloudflare edge. Když uživatel přijde na ssh.example.com,
edge ho přes tunnel pošle na tunelovací server, 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: <TUNNEL_ID>
credentials-file: /etc/cloudflared/cert.json
ingress:
- hostname: ssh.example.com
service: ssh://localhost:22
- hostname: tasks.example.com
service: http://192.168.1.20:3456
- hostname: git.example.com
service: http://192.168.1.30:3000
- hostname: grafana.example.com
service: http://192.168.1.40:3000
# catch-all
- service: http_status:4044. DNS records
cloudflared tunnel route dns <tunnel-id> ssh.example.com
cloudflared tunnel route dns <tunnel-id> tasks.example.com
# ...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:
ssh.example.com - Identity provider: One-time PIN (email OTP)
- Policy:
email == "[email protected]"— jen tvoje adresa, nic víc
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.