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é prokouknutí ven. A přesto vystavujem 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í na sebe iniciované z mojí strany (odchozí TCP). Když přijde request na vault.ajtak.it, Cloudflare ho přepošle tím tunelem ke mě domů — na konkrétní službu.

Mám:

  • Zero open ports doma
  • Šifrování TLS na okraji Cloudflare (let's encrypt navíc už nepotřebuju)
  • DDoS protection zdarma
  • Geo blocking a auth přes Cloudflare Access (optional)

Setup za 10 minut

1. Instalace cloudflared

# Na hosta, který bude tunelovat (v mém případě ai-dev)
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: 731d9362-404f-4428-b2de-1087b2921f57
credentials-file: /root/.cloudflared/731d9362-404f-4428-b2de-1087b2921f57.json
 
ingress:
  - hostname: vault.ajtak.it
    service: http://10.10.10.106:8080
  - hostname: vikunja.ajtak.it
    service: http://10.10.10.106:3456
  - hostname: grafana.ajtak.it
    service: http://10.10.10.104:3000
  # Catch-all
  - service: http_status:404

4. DNS

cloudflared tunnel route dns homelab vault.ajtak.it
cloudflared tunnel route dns homelab vikunja.ajtak.it
cloudflared tunnel route dns homelab grafana.ajtak.it

5. Systemd service

sudo cloudflared service install
sudo systemctl enable --now cloudflared

Hotovo. Otevři vault.ajtak.it v browseru.

Caveats — pozor na tyhle věci

  1. Cloudflare WAF má rate limit na free tier — 100 000 requests/den. Pro homelab víc než dost, pro production měj enterprise plán.
  2. WebSocket support je OK, ale latence vyšší než přímé spojení.
  3. Cloudflare termi­nuje TLS — věří mu, nebo si nech end-to-end přes service: https://....
  4. Failover na druhý uplink musíš řešit přes Cloudflare Load Balancer (placený). Pro homelab přežíváš s jedním.

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.

— Caesar

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