Přeskočit na obsah
Security··2 min čtení

Cloudflare Tunnel — bez veřejné IP a přesto dostupný

Jak provozovat self-hosted služby doma bez veřejné IP, bez port-forwardingu a bez exponování domácí sítě.

#cloudflare#security#tunnel#self-hosting

Můj poskytovatel mi nedává veřejnou IPv4. CGNAT, žádný port forwarding, žádná cesta dovnitř. A přesto vystavuju ven desítky služeb — Vaultwarden, Jellyfin, Vikunja, Nextcloud, tenhle web.

Trik se jmenuje Cloudflare Tunnel (dřív Argo Tunnel). Zdarma, bez veřejné IP, bez exponování IP adresy domácí sítě.

Jak to funguje

Internet → cloudflare.com → tunnel (outbound TCP) → domácí síť → služba

Cloudflare drží spojení iniciované z mojí strany (odchozí TCP). Když přijde request na vault.example.com, Cloudflare ho přepošle tím tunelem ke mně domů — na konkrétní službu.

Mám:

  • Nula otevřených portů doma
  • Šifrování TLS na okraji Cloudflare (Let's Encrypt už navíc nepotřebuju)
  • DDoS ochranu zdarma
  • Geo blocking a autentizaci přes Cloudflare Access (volitelně)

Setup za 10 minut

1. Instalace cloudflared

# Na hosta, který bude tunelovat (u mě LXC kontejner v Proxmoxu)
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb \
  -o cloudflared.deb
sudo dpkg -i cloudflared.deb

2. Login a vytvoření tunelu

cloudflared tunnel login
# Otevře browser, autorizuj doménu
cloudflared tunnel create homelab
# Vrátí ti TUNNEL_ID

3. Konfigurace

Vytvoř ~/.cloudflared/config.yml:

tunnel: <TUNNEL_ID>
credentials-file: /root/.cloudflared/<TUNNEL_ID>.json
 
ingress:
  - hostname: vault.example.com
    service: http://192.168.1.20:8080
  - hostname: vikunja.example.com
    service: http://192.168.1.20:3456
  - hostname: grafana.example.com
    service: http://192.168.1.30:3000
  # Catch-all
  - service: http_status:404

4. DNS

cloudflared tunnel route dns homelab vault.example.com
cloudflared tunnel route dns homelab vikunja.example.com
cloudflared tunnel route dns homelab grafana.example.com

5. Systemd service

sudo cloudflared service install
sudo systemctl enable --now cloudflared

Hotovo. Otevři vault.example.com v prohlížeči.

Pozor na tyhle věci

  1. Free tier má limity — pro homelab víc než dost, pro produkci počítej s placeným plánem.
  2. WebSockety fungují, ale latence je vyšší než u přímého spojení.
  3. Cloudflare terminuje TLS — buď mu věříš, nebo si necháš end-to-end šifrování přes service: https://....
  4. Failover na druhý uplink musíš řešit přes Cloudflare Load Balancer (placený). Pro homelab stačí jeden uplink.

Co dál

V dalším článku ukážu Cloudflare Access — přidat OTP / Google / GitHub auth před každou službu, jako kdyby měla SSO. Tak jedeme.

— Julius

Líbí se ti tenhle obsah? Napiš mi — [email protected]. Nebo si přidej YouTube, kde od května 2026 jedou videa.