Cloudflare Tunnel – Dienste ohne offene Ports veröffentlichen
Mit cloudflared eigene Dienste wie Home Assistant oder eine Website sicher im Internet erreichbar machen – ohne Router-Port-Weiterleitung und mit Cloudflare Zero Trust.
Cloudflare Tunnel ermöglicht es, Dienste aus dem Heimnetzwerk sicher im Internet erreichbar zu machen – ohne einen einzigen Port am Router zu öffnen. Stattdessen baut ein kleines Programm (cloudflared) eine ausgehende Verbindung zu Cloudflares Netzwerk auf. Der Datenverkehr fließt durch diesen verschlüsselten Tunnel, nie direkt in dein Netzwerk hinein.
So laufen bei mir unter anderem Home Assistant, mehrere andere Anwendungen vom Heimserver – und auch diese Website.
Was ist Zero Trust?
Zero Trust ist ein Sicherheitsmodell: Kein Gerät und kein Nutzer wird allein aufgrund seiner Netzwerkzugehörigkeit als vertrauenswürdig eingestuft. Jede Verbindung muss sich authentifizieren.
Bei Cloudflare heißt das konkret: Vor einem veröffentlichten Dienst lässt sich ein Access-Gateway schalten. Wer die URL aufruft, muss sich zuerst mit einer E-Mail-Adresse, einem Google-Konto oder einem einmaligen PIN verifizieren – bevor er überhaupt den Dienst sieht. Ideal für interne Tools, die nicht öffentlich sein sollen.
Voraussetzungen
- Cloudflare-Konto (kostenlos)
- Eine Domain, die bei Cloudflare verwaltet wird
- Linux-Server (Debian/Ubuntu) im Heimnetzwerk
cloudflared installieren
curl -L https://pkg.cloudflare.com/cloudflare-main.gpg | sudo gpg --dearmor -o /usr/share/keyrings/cloudflare-main.gpg
echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main" | \
sudo tee /etc/apt/sources.list.d/cloudflared.list
sudo apt update && sudo apt install cloudflared
Tunnel erstellen
Im Cloudflare-Dashboard unter Zero Trust → Networks → Tunnels einen neuen Tunnel anlegen. Cloudflare zeigt dann einen Installationsbefehl mit einem Token:
sudo cloudflared service install <TOKEN>
sudo systemctl enable cloudflared
sudo systemctl start cloudflared
cloudflared läuft jetzt als Systemdienst und hält die Verbindung dauerhaft aufrecht.
Dienste einbinden
Im Dashboard unter dem angelegten Tunnel → Public Hostname lassen sich beliebig viele Dienste veröffentlichen:
| Subdomain | Dienst | Interner Port |
|---|---|---|
ha.example.com | Home Assistant | 8123 |
vaultwarden.example.com | Vaultwarden | 8080 |
example.com | Website (Astro) | 4321 |
Jeder Eintrag leitet eingehende Anfragen an den entsprechenden lokalen Dienst weiter. Cloudflare übernimmt dabei automatisch TLS-Zertifikate – HTTPS ist ohne weiteres Zutun aktiv.
Zero Trust Access – Zugang absichern
Für Dienste, die nicht vollständig öffentlich sein sollen (z.B. Home Assistant), lässt sich im Dashboard eine Access Policy anlegen:
Zero Trust → Access → Applications → Add an application
Dort lässt sich festlegen:
- Wer Zugang erhält (E-Mail-Adressen, Domains, GitHub-Accounts)
- Wie die Authentifizierung erfolgt (Einmal-PIN per E-Mail, Google, GitHub, …)
Wer die URL aufruft und nicht auf der Allowlist steht, bekommt nur die Cloudflare-Loginseite zu sehen.
Kein offener Port am Router
Das ist der entscheidende Vorteil: Der Router braucht keine Portweiterleitungen. cloudflared baut selbst eine ausgehende HTTPS-Verbindung zu Cloudflare auf – ähnlich wie ein Browser eine Website aufruft. Von außen ist das Heimnetzwerk für Angreifer vollständig unsichtbar.
Diese Website
Auch ruebel-labs.de läuft über einen Cloudflare Tunnel. Der Astro Dev-Server bzw. das gebaute Static-Site-Verzeichnis wird direkt vom Heimserver ausgeliefert – ohne gemieteten Webserver, ohne Hosting-Kosten, mit automatischem HTTPS.