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ě.
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žbaCloudflare 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.deb2. Login a vytvoření tunelu
cloudflared tunnel login
# Otevře browser, autorizuj doménu
cloudflared tunnel create homelab
# Vrátí ti TUNNEL_ID3. 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:4044. DNS
cloudflared tunnel route dns homelab vault.example.com
cloudflared tunnel route dns homelab vikunja.example.com
cloudflared tunnel route dns homelab grafana.example.com5. Systemd service
sudo cloudflared service install
sudo systemctl enable --now cloudflaredHotovo. Otevři vault.example.com v prohlížeči.
Pozor na tyhle věci
- Free tier má limity — pro homelab víc než dost, pro produkci počítej s placeným plánem.
- WebSockety fungují, ale latence je vyšší než u přímého spojení.
- Cloudflare terminuje TLS — buď mu věříš, nebo si necháš
end-to-end šifrování přes
service: https://.... - 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.