Warum niemand außerhalb Ihres Netzwerks localhost erreicht

Ein Webhook-Anbieter braucht eine URL, an die er POSTen kann, und Ihr Server läuft auf localhost:3000. Oder ein Teamkollege möchte sich durch den Branch klicken, den Sie gerade laufen haben, oder Ihr Handy muss den Dev-Server erreichen, um ein Layout zu prüfen. Der Server läuft. Von außerhalb Ihres Netzwerks kommt niemand heran.

Portweiterleitung auf dem Router würde funktionieren, legt aber Ihre private IP offen und braucht Admin-Zugriff, den Sie oft gar nicht haben. Cloudflare Tunnel geht den anderen Weg. cloudflared, ein kleiner Daemon, den Sie neben Ihrem Server laufen lassen, baut eine ausgehende Verbindung zum Edge-Netzwerk von Cloudflare auf, und Cloudflare schickt den Traffic durch genau diese Verbindung zurück. Sie öffnen keinen eingehenden Port und brauchen keine öffentliche IP.

Es gibt zwei Varianten. Ein Quick Tunnel liefert mit einem einzigen Befehl eine öffentliche HTTPS-URL, auf einem zufälligen Hostnamen, der stirbt, sobald Sie den Prozess beenden. Das ist das Werkzeug für eine Fünf-Minuten-Demo oder einen Webhook-Test. Ein benannter Tunnel gibt Ihnen einen stabilen Hostnamen auf Ihrer eigenen Domain, der Neustarts übersteht — damit wird er zu einem kleinen, echten Stück Infrastruktur.

Wie Cloudflare Tunnel ohne offenen Port funktioniert

Der Trick ist eine Umkehr der Richtung. Einen Dienst freizugeben bedeutet normalerweise, einen eingehenden Port zu öffnen: Etwas im Internet baut eine Verbindung zu Ihrer Maschine auf, wofür sie eine routbare Adresse und eine Firewall-Regel braucht, die diesen Traffic durchlässt. Genau das zu blockieren ist der Job von NAT und den meisten Heim- und Büro-Firewalls.

cloudflared nimmt nie eingehende Verbindungen entgegen. Es wählt sich beim Edge-Netzwerk von Cloudflare über gewöhnliches ausgehendes HTTPS ein — dieselbe Art Verbindung, die Ihr Browser den ganzen Tag über öffnet — und hält sie offen. Cloudflare schiebt Anfragen dann über diese Verbindung nach unten und liest die Antworten zurück, ähnlich wie ein Server Nachrichten über ein WebSocket an einen Browser pusht, der die Verbindung zuerst aufgebaut hat. Ihre Firewall sieht eine ausgehende Verbindung, die sie ohnehin schon erlaubt. Deshalb verhält sich der Tunnel hinter NAT oder auf einem Laptop ohne öffentliche IP genau gleich: Einer ausgehenden Verbindung ist das egal.

Der Preis dafür ist, dass Cloudflare jetzt im Pfad sitzt. Ihr Tunnel-Hostname löst zu Cloudflare auf, das jede Anfrage an seinem Edge entschlüsselt, sie neu verschlüsselt und durch den Tunnel an Ihren Daemon weiterschickt. Das ist dieselbe Architektur wie hinter einem CDN oder einem Reverse Proxy: Sie geben den direkten Zugriff auf, im Tausch gegen eine Zwischenstation, die TLS terminiert und Zugriffsregeln anwenden kann, bevor überhaupt etwas Ihre Maschine erreicht.

Wie Sie mit einem Befehl einen Quick Tunnel erstellen

Installieren Sie zuerst cloudflared: brew install cloudflared auf macOS, das .deb/.rpm-Paket aus dem Cloudflare-Repository auf Linux, oder den Windows-Installer von der GitHub-Releases-Seite. Läuft schon etwas auf einem lokalen Port, genügt:

1
cloudflared tunnel --url http://localhost:3000

Ein paar Sekunden später erscheint eine Ausgabe wie diese:

1
2
3
4
5
2026-09-23T10:14:02Z INF Thank you for trying Cloudflare Tunnel. Doing so...
2026-09-23T10:14:03Z INF +--------------------------------------------------------------------------------------------+
2026-09-23T10:14:03Z INF |  Your quick Tunnel has been created! Visit it at (it may take some time to be reachable):  |
2026-09-23T10:14:03Z INF |  https://wise-juvenile-pink-recovered.trycloudflare.com                                   |
2026-09-23T10:14:03Z INF +--------------------------------------------------------------------------------------------+

Diese URL liefert HTTPS mit einem Zertifikat, das Cloudflare verwaltet — an der TLS-Konfiguration müssen Sie nie etwas anfassen. Geben Sie ihr ein paar Sekunden, bis sie auflöst. Ab dann erreicht jeder mit dem Link Ihr localhost:3000, bis Sie Strg+C drücken. Danach ist der Hostname endgültig weg, und der nächste Lauf erzeugt einen neuen. Sie loggen sich nirgends ein, legen keinen DNS-Eintrag an und brauchen kein Konto.

Die Grenzen sind aber real. Der Hostname ist zufällig, Sie können ihn also nicht in eine Webhook-Konfiguration eintragen, die einen Neustart überleben muss. Cloudflare deckelt Quick Tunnel bei 200 gleichzeitigen Anfragen und unterstützt darauf keine Server-Sent Events, ein langlebiger SSE-Stream bricht also ab. Es gibt auch keine Uptime-Garantie: Cloudflares Nutzungsbedingungen behandeln Quick Tunnel als reine Testhilfe.

Für einen Webhook, den Sie gerade jetzt debuggen, oder damit Ihr Handy den Dev-Server erreicht, reicht das völlig. Muss es morgen noch laufen, richten Sie einen benannten Tunnel ein.

Wie Sie einen benannten Tunnel auf Ihrer eigenen Domain einrichten

Ein benannter Tunnel braucht ein kostenloses Cloudflare-Konto und eine Domain, deren DNS bei Cloudflare liegt. Das Setup machen Sie einmal.

1. cloudflared gegen Ihr Konto authentifizieren:

1
cloudflared tunnel login

Das öffnet einen Browser und lässt Sie die zu autorisierende Domain auswählen. Anschließend wird ein Zertifikat unter ~/.cloudflared/cert.pem gespeichert, das jeder spätere Befehl verwendet.

2. Den Tunnel erstellen und die ID notieren:

1
cloudflared tunnel create my-app

Das registriert einen Tunnel namens my-app und schreibt eine Credentials-Datei, <TUNNEL-ID>.json, nach ~/.cloudflared/. Diese Datei ist die Identität des Tunnels. Behandeln Sie sie wie ein Secret: Wer sie besitzt, kann Traffic durch Ihren Tunnel schicken.

3. Die Konfiguration schreiben. Legen Sie ~/.cloudflared/config.yml an:

1
2
3
4
5
6
7
8
9
tunnel: my-app
credentials-file: /home/you/.cloudflared/<TUNNEL-ID>.json

ingress:
  - hostname: app.example.com
    service: http://localhost:3000
  - hostname: api.example.com
    service: http://localhost:8080
  - service: http_status:404

ingress ist eine geordnete Liste von Hostname-zu-Service-Regeln, geprüft von oben nach unten. Wenn Sie nginx als Reverse Proxy vor Ihre Apps gestellt haben, ist das dieselbe Routing-Idee, nur in YAML statt in proxy_pass-Direktiven geschrieben. Ein Tunnel kann mehrere lokale Dienste auf unterschiedlichen Hostnamen bedienen. Die letzte Regel ist Pflicht. Sie ist der Catch-all, der für jeden Hostnamen, den die Regeln davor nicht getroffen haben, ein 404 zurückgibt, und cloudflared startet ohne sie erst gar nicht.

4. DNS auf den Tunnel zeigen lassen:

1
cloudflared tunnel route dns my-app app.example.com

Das erstellt einen CNAME-Eintrag für app.example.com, der auf <TUNNEL-ID>.cfargotunnel.com zeigt. Es ist ganz gewöhnliche DNS-Auflösung, nur dass sie auf Cloudflares Tunnel-Infrastruktur zielt statt auf eine Server-IP. Führen Sie den Befehl einmal für jeden Hostnamen in Ihrer Ingress-Liste aus.

5. Starten:

1
cloudflared tunnel run my-app

app.example.com liefert nun aus, was auf localhost:3000 lauscht, über HTTPS. Cloudflare terminiert TLS am Edge, Ihr Origin darf reines HTTP bleiben, weil die Tunnel-Verbindung selbst schon verschlüsselt ist.

Ein Tunnel, der in einem Terminal läuft, stirbt mit dem Terminal. Damit er einen Neustart übersteht, installieren Sie ihn als Systemdienst:

1
sudo cloudflared service install

Unter Linux läuft das mit sudo, wodurch $HOME zu /root wird und cloudflared eine config.yml, die Sie als eigener Benutzer angelegt haben, nicht mehr findet. Zeigen Sie stattdessen explizit auf die Datei:

1
sudo cloudflared --config /home/you/.cloudflared/config.yml service install

Das kopiert Ihre Konfiguration nach /etc/cloudflared/config.yml und registriert cloudflared bei systemd (oder launchd, oder dem Windows-Dienstemanager), sodass es beim Booten startet und nach einem Absturz neu startet.

Wann Cloudflare Tunnel die falsche Wahl ist

Ein Tunnel passt, wenn Traffic außerhalb Ihres Netzwerks startet und eine Maschine ohne öffentliche IP erreichen muss, oder eine, die Sie nicht direkt freigeben wollen: ein Laptop, ein Homeserver, eine Box hinter Firmen-NAT. In diesen Fällen ist er das falsche Werkzeug:

  • Sie haben bereits einen Server mit öffentlicher IP. Der Tunnel fügt Cloudflares Edge als zusätzlichen Hop ein, ohne dass etwas dabei herausspringt. Ein DNS-A-Eintrag plus Ihr eigener Reverse Proxy oder Ihre eigene TLS-Terminierung ist einfacher und hat ein bewegliches Teil weniger, das ausfallen kann.
  • Sie brauchen garantiert niedrige Latenz oder bewegen große Datenmengen. Jedes Byte läuft durch Cloudflares Netzwerk. Für die meisten Web-Anwendungen ist dieser Preis vernachlässigbar, für latenzkritische oder durchsatzstarke Workloads nicht.
  • Der Dienst muss laufen, auch wenn eine Maschine ausfällt. Ein cloudflared auf einer Maschine ist ein einzelner Ausfallpunkt, und service install deckt nur Prozessneustarts ab. Stirbt dieser Host, wird der Hostname dunkel. Redundanz heißt, denselben Tunnel von einer zweiten Maschine aus zu betreiben.
  • Ihr Code vertraut der TCP-Quelladresse für Sicherheitsentscheidungen. Anfragen erreichen Ihren Origin aus Cloudflares IP-Bereichen. Die echte Client-IP kommt im Header CF-Connecting-IP an, und alles, was die Socket-Adresse liest, sieht stattdessen Cloudflares Edge.

Quick Tunnel oder benannter Tunnel: womit Sie anfangen sollten

Sind Sie sich nicht sicher, welchen Sie brauchen, brauchen Sie einen Quick Tunnel. Führen Sie cloudflared tunnel --url http://localhost:<port> gegen das aus, woran Sie gerade arbeiten, und öffnen Sie die URL. Wechseln Sie zu einem benannten Tunnel, sobald Sie an eine seiner beiden echten Grenzen stoßen: einen Hostnamen, der die Terminal-Sitzung überleben muss, oder einen Dienst, der unbeaufsichtigt weiterlaufen muss.

Verwandte Artikel