Cloudflare Tunnel — kompletný návod

Od prenesenia domény do Cloudflare, cez aktiváciu Zero Trust, vytvorenie Docker siete, inštaláciu cloudflared konektora až po public hostname routes pomocou container name namiesto IP. Bezpečný prístup k domácim službám bez otvárania portov.

Cloudflare

Ak si čítal môj článok o Cloudflare Tunnel, vieš prečo je to elegantnejšie riešenie ako port forward. Tu je kompletný postup — od domény cez Docker sieť až po funkčné routes pre každú tvoju aplikáciu.

Čo potrebuješ

Predpoklady

Cloudflare účet (zdarma). Doména — kúpená kdekoľvek (napr. Websupport, Namecheap, GoDaddy) alebo priamo v Cloudflare. Docker a Portainer nainštalované na tvojom serveri/NAS. Spustené Docker kontajnery ktoré chceš sprístupniť zvonka.

1. Prenesenie domény do Cloudflare

Cloudflare Tunnel vyžaduje aby tvoja doména používala Cloudflare nameservery. Ak si doménu ešte len kupuješ, môžeš ju kúpiť priamo v Cloudflare (dash.cloudflare.com → Domain Registration) a tento krok preskočiť. Ak máš doménu inde, postupuj takto:

Krok 1 — Prihlás sa na dash.cloudflare.comAdd a domain → zadaj svoju doménu → Continue.

Krok 2 — Vyber plán FreeContinue.

Krok 3 — Cloudflare naskenuje existujúce DNS záznamy. Skontroluj ich a klikni Continue.

Krok 4 — Cloudflare ti zobrazí dva nameservery, napr. aria.ns.cloudflare.com a ben.ns.cloudflare.com. Skopíruj si ich.

Krok 5 — Prihlás sa k svojmu registrátorovi (Websupport, Namecheap...) a v nastaveniach domény zmeň nameservery na tie od Cloudflare. Každý registrátor to má na inom mieste — zvyčajne v sekcii DNS / Nameservery.

⚠️ Propagácia trvá až 24 hodín

Zmena nameserverov sa šíri globálne — zvyčajne 15-60 minút, výnimočne až 24 hodín. V Cloudflare dashboarde sa doména zobrazí ako Active keď je všetko OK. Kým to neprebehnne, tunnel nastaviť môžeš, ale verejne dostupný nebude.

2. Aktivácia Zero Trust

Cloudflare Tunnel beží pod Zero Trust platformou. Aktivácia je bezplatná.

Choď na one.dash.cloudflare.com → prihlás sa → vyber svoju doménu → prejdi onboarding (vyber Free plan → potvrď).

Ocitneš sa v Zero Trust dashboarde — odtiaľto budeš všetko spravovať.

3. Docker sieť pre tunnel

Toto je krok ktorý sa v návodoch často preskakuje — a potom tunnel nevidí tvoje kontajnery.

Prečo vlastná Docker sieť

Cloudflared kontajner a tvoje aplikácie musia byť v rovnakej Docker sieti, aby spolu mohli komunikovať pomocou container name. Na predvolenej bridge sieti to nefunguje — kontajnery sa navzájom nevidia cez meno. Vlastná sieť (tunnel-net) toto rieši: kontajner vaultwarden je dostupný ako http://vaultwarden:4080, kontajner PlexHW ako http://PlexHW:32400 atď.

Vytvor sieť cez SSH alebo Portainer terminal:

docker network create tunnel-net

Existujúce bežiace kontajnery pripoj do novej siete bez reštartu:

docker network connect tunnel-net vaultwarden
docker network connect tunnel-net AdGuard
docker network connect tunnel-net PlexHW

Prípadne cez Portainer: Networks → tunnel-net → Connected containers → Join.

Pridaj sieť do compose stackov

Aby kontajnery boli v tunnel-net automaticky aj po redeploy, pridaj do každého compose súboru:

# Na konci každého service bloku:
    networks:
      - tunnel-net

# Na konci compose súboru:
networks:
  tunnel-net:
    external: true

4. Vytvorenie tunela a konektora

V Zero Trust dashboarde: Networks → Tunnels → Add a tunnel → vyber CloudflaredNext.

Pomenuj tunel (napr. homelab) → Save tunnel.

Cloudflare zobrazí token — dlhý reťazec začínajúci eyJ.... Skopíruj ho — použiješ ho v nasledujúcom kroku.

5. Docker Compose stack pre cloudflared

V Portainer: Stacks → Add stack → Web editor:

services:
  cloudflared:
    image: cloudflare/cloudflared:latest
    container_name: cloudflared
    command: tunnel --no-autoupdate run
    environment:
      TUNNEL_TOKEN: SEM_VLOZ_TUNNEL_TOKEN_Z_KROKU_4
    networks:
      - tunnel-net
    restart: unless-stopped

networks:
  tunnel-net:
    external: true

Nahraď TUNNEL_TOKEN hodnotou z kroku 4. Klikni Deploy the stack.

Overenie spojenia

V Zero Trust dashboarde → Networks → Tunnels — tvoj tunel by mal zmeniť stav na Healthy (zelená bodka). Ak ostáva Inactive, skontroluj logy kontajnera v Portaineri.

6. Public Hostname Routes

Toto je srdce celého tunela — každé pravidlo hovorí: "keď príde request na túto doménu, prepošli ho na tento kontajner".

Zero Trust → Networks → Tunnels → klikni na tvoj tunel → Configure → Public Hostname → Add a public hostname.

Nastavenie jedného hostname

Subdomain: napr. vaultwarden
Domain: tvoja doména, napr. tvojadomena.sk
Service Type: HTTP
URL: vaultwarden:4080

⚠️ Container name, nie localhost ani IP adresa

V poli URL vždy zadaj container name a port — napr. vaultwarden:4080, AdGuard:3000, PlexHW:32400. Nikdy localhost:port ani 192.168.1.x:port.

Prečo: localhost v kontajneri znamená sám cloudflared kontajner, nie tvoju aplikáciu. IP adresa kontajnera sa mení pri každom reštarte. Container name ostáva stabilné a funguje cez Docker DNS — ale len ak sú oba kontajnery v rovnakej sieti (tunnel-net).

Príklady routes pre bežné aplikácie

Vzorové nastavenia

vaultwarden.tvojadomena.skhttp://vaultwarden:4080
plex.tvojadomena.skhttp://PlexHW:32400
adguard.tvojadomena.skhttp://AdGuard:9080
portainer.tvojadomena.skhttps://portainer:9443 (Portainer beží na HTTPS)
linkwarden.tvojadomena.skhttp://linkwarden:3000

Pre každú aplikáciu klikni Add a public hostname znovu a pridaj ďalší záznam. Jeden tunel zvládne neobmedzene veľa hostname routes.

Additional settings pre niektoré aplikácie

Pri niektorých aplikáciách treba v Additional application settings zaškrtnúť:

  • No TLS Verify — ak aplikácia používa self-signed certifikát (napr. Portainer na HTTPS)
  • HTTP2 Connection — pre lepší výkon pri streamovaní
  • WebSocket — pre aplikácie ktoré používajú WebSocket (Vaultwarden, Plex)

7. Zabezpečenie citlivých aplikácií (Zero Trust Access)

Portainer, admin panely alebo iné citlivé aplikácie nechceš mať verejne dostupné len s heslom aplikácie. Zero Trust Access pridáva extra vrstvu pred samotnú aplikáciu.

Zero Trust → Access → Applications → Add an application → Self-hosted:

  • Application name: napr. Portainer
  • Application domain: portainer.tvojadomena.sk
  • Add a policy → Policy name → Action: Allow → Include: Emails → zadaj svoju emailovú adresu

Od teraz sa pred Portainerom zobrazí Cloudflare prihlasovacia obrazovka — zadáš email, Cloudflare ti pošle jednorazový kód, a až potom sa dostaneš k aplikácii.

Zero Trust Access je zdarma

Na Free pláne môžeš chrániť až 50 aplikácií s až 50 používateľmi. Pre domáce použitie viac ako dosť — Portainer, admin panely, dev nástroje.

8. Pridanie aplikácií do tunnel-net v existujúcich stackoch

Ak máš existujúce stacky a chceš ich pridať do tunela bez mazania a prebudovania, stačí upraviť compose súbor:

# Do každého service bloku pridaj:
    networks:
      - tunnel-net
      - default    # ak potrebuje aj lokálnu komunikáciu

# Na konci compose súboru:
networks:
  tunnel-net:
    external: true
  default:
    driver: bridge

Potom v Portaineri klikni Update the stack — kontajner sa reštartuje a automaticky sa pripojí do tunnel-net.

Troubleshooting

⚠️ Tunel ostáva Inactive

Skontroluj logy: Portainer → Containers → cloudflared → Logs. Najčastejší problém: nesprávny token. Skopíruj token znovu z Zero Trust → Networks → Tunnels → Configure → klikni na ikonu oka pri tokene.

⚠️ 502 Bad Gateway na doméne

Cloudflare sa nedokáže spojiť s kontajnerom. Skontroluj: (1) container name v route je presne rovnaký ako container_name: v compose, (2) oba kontajnery sú v tunnel-net — over cez docker network inspect tunnel-net, (3) aplikácia beží na správnom porte.

⚠️ Doména nefunguje, v dashboarde vidím DNS chybu

Nameservery sa ešte nepropagovali alebo neboli správne zadané. Skontroluj u registrátora že nameservery sú nastavené na Cloudflare hodnoty. Na overenie propagácie použi dnschecker.org.

⚠️ WebSocket nefunguje (Vaultwarden, Plex)

V Zero Trust → Tunnels → Configure → Public Hostname → edituj route → Additional application settings → zaškrtni WebSocket.

⚠️ Portainer SSL chyba

Portainer beží na HTTPS so self-signed certifikátom. V route nastav Service Type: HTTPS a v Additional settings zaškrtni No TLS Verify.