SSD Nodes Learn Hosting plans →
Anleitungen Matt ConnorVon Matt Connor · Aktualisiert 2026-08-27

Tailscale serve oder funnel: Was sollten Sie nutzen?

Tailscale serve macht einen lokalen Port nur im Tailnet per HTTPS erreichbar, Funnel im Internet. Erfahren Sie, welche Policy Funnel blockieren kann.

tailscale serve vs funnel: Wer die URL erreichen kann

Der Unterschied zwischen tailscale serve und tailscale funnel betrifft ausschließlich den Empfängerkreis. serve legt einen HTTPS-Front-End vor einen lokalen Port und veröffentlicht ihn nur in Ihrem Tailnet. funnel veröffentlicht denselben lokalen Port über von Tailscale betriebene Relay-Server im gesamten öffentlichen Internet. Beide Befehle verwenden dieselben Flags und dieselben Ziele. Ein einziges Wort entscheidet darüber, ob ein Dashboard privat bleibt oder weltweit erreichbar ist.

Beide stellen Ihnen ein Zertifikat bereit, dem Browser bereits vertrauen, und verwenden dafür einen Namen mit der Endung ts.net. Bei keinem der beiden Befehle muss an der Firewall Ihres VPS ein eingehender Port geöffnet werden. Ihr tailscaled-Daemon verfügt bereits über eine ausgehende Verbindung zum Tailnet. Der Netzwerkverkehr trifft daher darüber ein. Einen Server in das Tailnet aufzunehmen, ist eine eigene Aufgabe. Einen VPS als Tailscale-Exit-Node zu betreiben oder einen Subnet-Router für ein privates Netzwerk anzukündigen deckt diesen Bereich ab. Hier geht es darum, einen Dienst zu veröffentlichen, der sich bereits im Tailnet befindet.

Was Sie benötigen, damit beide Befehle funktionieren

  • Tailscale 1.38.3 oder neuer auf dem VPS, bei Ihrem Tailnet angemeldet. Prüfen Sie dies mit tailscale version und tailscale status.
  • MagicDNS ist aktiviert. MagicDNS ist das integrierte DNS (Domain Name System) von Tailscale. Es weist dem Rechner einen Namen wie blog-vps.your-tailnet.ts.net zu, statt nur eine 100.x-Adresse zu verwenden.
  • HTTPS-Zertifikate sind für das Tailnet auf der DNS-Seite der Admin-Konsole aktiviert. Andernfalls gibt es kein Zertifikat, das vor Ihren Port geschaltet werden kann.
  • Nur für funnel ist das Node-Attribut funnel in der Tailnet-Richtliniendatei erforderlich. An diesem Punkt scheitern die meisten ersten Versuche. Das wird weiter unten behandelt.

Jeder Befehl hier beginnt mit sudo, weil die CLI über einen Socket mit tailscaled kommuniziert, in den nur root schreiben darf. Erteilen Sie einem Benutzer das Recht, dies zu überspringen:

sudo tailscale set --operator=$USER

Veröffentlichen Sie über Tailscale Serve in Ihrem Tailnet

Verweisen Sie mit serve auf einen lokalen Port. Den Rest übernimmt Tailscale.

sudo tailscale serve 3000
Available within your tailnet:
https://amelie-workstation.pango-lin.ts.net

 |-- / proxy http://127.0.0.1:3000

Press Ctrl+C to exit.

Das einfache 3000 ist eine Kurzform für http://127.0.0.1:3000. Tailscale lauscht an Port 443 der Tailnet-Adresse des Rechners, beendet TLS (Transport Layer Security) mit dem Zertifikat ts.net und leitet unverschlüsseltes HTTP an Ihren lokalen Port weiter. Ihre Anwendung muss nicht wissen, dass ein Zertifikat vorhanden ist. Das ist der wichtigste Grund, diese Funktion vor einem Administrationsbereich einzusetzen, den Sie sonst nur über HTTP bereitstellen würden. Eine Weboberfläche, die nur an 127.0.0.1 gebunden ist, eignet sich dafür offensichtlich. Die dsh-Weboberfläche an Port 3080 ist ein gutes Beispiel: Anstatt bei jedem Zugriff einen SSH-Tunnel zu öffnen, richten Sie serve einmal auf Port 3080 und greifen dann von jedem Gerät im Tailnet darauf zu.

Lesen Sie jetzt die letzte Zeile: Press Ctrl+C to exit. Der Befehl läuft im Vordergrund, und die Zuordnung bleibt innerhalb dieses Prozesses bestehen. Wenn Sie das Terminal schließen, funktioniert die URL nicht mehr, weil nichts auf dem Datenträger gespeichert wurde. Mit --bg wird die Zuordnung in die Serve-Konfiguration des Knotens übernommen. Sie bleibt über das Terminal und einen Reboot hinweg bestehen.

sudo tailscale serve --bg 3000

Serve akzeptiert mehr als nur eine Portnummer. --set-path bindet einen Dienst unter einem Unterpfad ein, sodass mehrere Anwendungen denselben Hostnamen verwenden können:

sudo tailscale serve --bg --set-path=/grafana 3000
sudo tailscale serve --bg --set-path=/metrics 9090

Als Ziel können Sie auch ein Verzeichnis mit statischen Dateien oder ein Backend angeben, das bereits TLS mit einem Zertifikat verwendet, dessen Prüfung Sie nicht durchführen lassen möchten:

sudo tailscale serve --bg /srv/reports
sudo tailscale serve --bg https+insecure://localhost:8443

Die Funktion ist nicht auf HTTP beschränkt. --tcp=<port> leitet einen unverschlüsselten TCP-Stream (Transmission Control Protocol) weiter. --tls-terminated-tcp=<port> beendet TLS auf Ihrem Knoten und leitet den entschlüsselten Datenverkehr weiter. Dadurch wird ein vertrauenswürdiges Zertifikat vor einen Dienst geschaltet, der überhaupt kein HTTP unterstützt:

sudo tailscale serve --bg --tls-terminated-tcp=443 tcp://127.0.0.1:9899

Warum meldet Funnel, dass das Node-Attribut nicht gesetzt ist?

Funnel ist standardmäßig für das gesamte Tailnet deaktiviert. Beim ersten Aufruf wird dies ausgegeben und der Vorgang beendet:

Funnel not available; "funnel" node attribute not set. See https://tailscale.com/kb/1223/tailscale-funnel/.

Der Befehl war korrekt. Die Tailnet-Richtlinie hat diesem Node nicht die Berechtigung zum Veröffentlichen erteilt. Daher beendet der Client den Vorgang, bevor er überhaupt einen Relay kontaktiert. Bearbeiten Sie die Tailnet-Richtliniendatei in der Admin-Konsole unter Access Controls und fügen Sie das Attribut hinzu:

"nodeAttrs": [
  {
    "target": ["autogroup:member"],
    "attr":   ["funnel"],
  },
],

autogroup:member erteilt die Berechtigung jedem Mitglied des Tailnets. Wenn nur eine bestimmte Maschine veröffentlichen darf, versehen Sie diese Maschine mit einem Tag und verwenden Sie stattdessen das Tag als Ziel, zum Beispiel tag:public. Speichern Sie die Richtlinie und führen Sie den Funnel-Befehl erneut aus.

Wenn Ihr Konto Tailnet-Administratorrechte hat, bieten aktuelle Clients eine Abkürzung: Die CLI gibt unter login.tailscale.com eine Zustimmungs-URL aus. Wenn Sie diese aufrufen, werden HTTPS-Zertifikate aktiviert und das Attribut für Sie hinzugefügt. Wenn Sie kein Administrator sind, hilft Ihnen diese URL nicht. Eine Person mit Zugriff auf die Richtlinie muss die Änderung vornehmen.

Über Tailscale Funnel im Internet veröffentlichen

Sobald das Attribut gesetzt ist, verwenden Sie den bereits bekannten Befehl mit einem anderen Verb.

sudo tailscale funnel --bg 3000
Available on the internet:
https://amelie-workstation.pango-lin.ts.net

 |-- / proxy http://127.0.0.1:3000

Press Ctrl+C to exit.

Lesen Sie diese erste Zeile jedes Mal aufmerksam. Available within your tailnet und Available on the internet sind der einzige sichtbare Unterschied zwischen einem privaten und einem öffentlichen Dienst. Die Befehle, mit denen sie erstellt werden, unterscheiden sich durch ein einziges Wort.

Seit August 2026 lauscht Funnel auf Port 443, 8443 oder 10000 und auf keinem anderen Port. Standardmäßig wird Port 443 verwendet. --https=8443 oder --https=10000 sind die Alternativen. Jeder andere Port wird abgewiesen, weil Funnel-Relays nur auf diesen Ports Verbindungen akzeptieren. Deshalb besteht eine Funnel-URL immer nur aus dem Hostnamen oder aus dem Hostnamen mit angehängtem :8443.

Was ist aktuell veröffentlicht?

Raten ist der Grund, warum ein Dashboard einen Monat lang öffentlich bleibt. Fragen Sie stattdessen den Node.

tailscale serve status
tailscale funnel status
tailscale serve status --json

Beide Statusbefehle lesen dieselbe Konfiguration. Daher zeigt jeder davon das vollständige Bild. Verwenden Sie die Form --json in einem Script oder einem geplanten Check, da die einfache Ausgabe für Menschen formatiert ist. Wenn nichts konfiguriert ist, erhalten Sie eine Zeile:

No serve config

Wenn diese Ausgabe nach einer nachweislich erfolgreichen Einrichtung erscheint, wurde das Mapping im Vordergrund erstellt und der Prozess ist beendet. Erstellen Sie es mit --bg erneut.

Um ein Mapping zu entfernen, wiederholen Sie den Befehl, mit dem es erstellt wurde, und setzen Sie off ans Ende. Um alle serve- und funnel-Mappings auf dem Node zu entfernen, verwenden Sie reset.

sudo tailscale funnel --https=443 3000 off
sudo tailscale serve reset

Führen Sie danach in beiden Fällen erneut tailscale serve status aus und prüfen Sie, was noch vorhanden ist, statt anzunehmen, dass der gewünschte Vorgang ausgeführt wurde.

Was Sie erhalten und was Sie aufgeben

Die Vorteile sind real. Deshalb entscheiden sich viele dafür statt für einen Reverse Proxy.

  • Ein von Browsern vertrauenswürdiges Zertifikat, das automatisch erneuert wird. Sie müssen keinen ACME-Client (automatic certificate management environment) installieren und keinen Erneuerungsjob im Blick behalten.
  • Kein eingehender Port in der VPS-Firewall. tailscaled baut ausgehende Verbindungen auf. Deshalb kann eine standardmäßig abweisende ufw-Firewall auf Ihrem VPS unverändert restriktiv bleiben.
  • Kein DNS-Eintrag, den Sie kaufen, setzen oder dessen Aktivierung Sie abwarten müssen.
  • Keine Portweiterleitung. Das ist der entscheidende Vorteil auf einem Rechner hinter NAT (network address translation) statt auf einem VPS mit öffentlicher IP-Adresse.

Die Nachteile sind ebenso real. funnel bringt sie alle mit sich.

  • Der Name gehört nicht Ihnen. Öffentliche Besucher sehen host.your-tailnet.ts.net. funnel unterstützt keine benutzerdefinierten Domains. Sie können daher app.example.com nicht davor setzen.
  • Der Pfad gehört nicht Ihnen. Der Datenverkehr erreicht zunächst ein Tailscale-Relay. Das Relay leitet den Datenstrom über das Tailnet an Ihren Node weiter. Tailscale gibt an, dass für funnel-Datenverkehr nicht veröffentlichte und nicht konfigurierbare Bandbreitenlimits gelten. Messen Sie daher Ihren eigenen Durchsatz, bevor Sie sich auf einen bestimmten Wert verlassen.
  • Die Steuerungsmöglichkeiten fehlen. Ein von Ihnen betriebener Reverse Proxy bietet Zugriffslogs, Ratenbegrenzungen, Begrenzungen für die Anforderungsgröße und eine Stelle für die Authentifizierung. funnel liefert Ihnen eine URL. Alles Weitere muss innerhalb Ihrer Anwendung umgesetzt werden.
  • Die Portliste ist wie oben beschrieben fest vorgegeben.

Beide Funktionen stützen sich außerdem auf Infrastruktur, die Tailscale betreibt: auf die Ausstellung von Zertifikaten für den Namen ts.net und auf die Funnel-Relays selbst. Ob Sie diese Abhängigkeit problematisch finden, hängt davon ab, was diese Server mit Ihrem Datenverkehr tun können und was nicht. Genau das beschreibt das Vertrauensmodell von Tailscale. Die Nutzung beider Funktionen ist kostenlos, weil der kostenlose Tarif bis zu sechs Benutzer mit jeweils unbegrenzt vielen Geräten abdeckt. Letztlich entscheidet die Anzahl der Benutzer und nicht die Funktionsliste darüber, wann ein Tailnet in einen kostenpflichtigen Tarif wechseln muss. Danach richtet sich die Rechnung nach Benutzern und nicht nach Maschinen. Daher sollten Sie prüfen, was ein Tailnet in einem kostenpflichtigen Tarif tatsächlich kostet, bevor Serve oder Funnel zu einer kritischen Abhängigkeit werden. Wenn Sie einen selbst gehosteten Headscale-Control-Server in Betracht ziehen, sollten Sie nicht davon ausgehen, dass eine dieser Funktionen mit Ihnen umzieht. Prüfen Sie die Release Notes für die Headscale-Version, die Sie ausführen möchten.

Welche Variante sollte ich verwenden?

Die Regel ist kurz.

Verwenden Sie serve für alles Interne: Administrationsoberflächen, Dashboards, eine Metrikoberfläche, die nicht indexiert werden soll, oder eine Staging-Kopie einer Website. Die Mitgliedschaft im Tailnet ist die Zugriffskontrolle, und sie ist zuverlässig. Ein Gerät, das sich nicht im Tailnet befindet, kann den Namen nicht einmal auflösen.

Verwenden Sie funnel für einen Demo-Link, einen Webhook-Empfänger, an den ein Dritter per POST senden muss, oder einen OAuth-Callback während der Entwicklung. Damit erhalten Sie am schnellsten eine öffentliche HTTPS-URL, und ein einzelner Befehl mit off beendet sie. Öffentlich bedeutet allerdings öffentlich: Der Hostname ist kein Geheimnis, und ein Funnel vor einer Anwendung ohne Anmeldung stellt einen offenen Dienst bereit. Alles dahinter muss seine Anfragen selbst authentifizieren, mit derselben Sorgfalt, die ein offener Ollama-API-Endpunkt erfordert.

Verwenden Sie für alles, was Sie als Produktion bezeichnen würden, einen echten Reverse Proxy. Ihre Domain, Ihr Zertifikat, Ihre Logs, Ihre Rate-Limits und niemand sonst im Anfragepfad. Nginx, Caddy und Traefik als Reverse Proxy im Vergleich erläutert die Auswahl.

Fehlerbilder mit den angezeigten Meldungen

Funnel startet nicht. Funnel not available; "funnel" node attribute not set. ist ein Policy-Problem, kein Befehlsproblem. Fügen Sie das Attribut funnel zur Tailnet-Policy-Datei hinzu, speichern Sie die Datei und wiederholen Sie den Versuch.

Der Zugriff hat funktioniert, und jetzt meldet tailscale serve status: No serve config. Das Mapping wurde im Vordergrund erstellt, und dieser Prozess wurde beendet. Führen Sie denselben Befehl erneut mit --bg aus.

Der Name wird aufgelöst, aber es antwortet nichts. Serve leitet Anfragen an das von Ihnen angegebene Ziel weiter. Wenn dort nichts lauscht, gibt es kein Ziel für die Weiterleitung. Prüfen Sie dies mit ss -ltnp | grep 3000 auf demselben Rechner, auf dem tailscaled läuft. Häufig veröffentlicht ein Container seinen Port auf einer Docker-Bridge-Adresse statt auf 127.0.0.1. Dadurch sieht der Host an der erwarteten Adresse keinen Listener. So funktioniert die Vernetzung mit Docker Compose zeigt, an welcher Stelle ein veröffentlichter Port tatsächlich ankommt.

Zertifikatsfehler beim Namen ts.net. HTTPS-Zertifikate sind für das Tailnet wahrscheinlich nicht aktiviert. Aktivieren Sie sie in der Administrationskonsole. Führen Sie anschließend den Zertifikatsschritt separat aus, damit sich seine Fehlermeldungen nicht mit der Serve-Ausgabe vermischen:

sudo tailscale cert your-host.your-tailnet.ts.net

Funnel wird über mobile Daten geladen, verhält sich aber anders als auf Ihrem Laptop. Ihr Laptop ist mit dem Tailnet verbunden. MagicDNS löst den Namen daher in die 100.x-Adresse auf, und Sie erreichen den Dienst direkt, ohne ein Relay zu verwenden. Das ist korrekt und bedeutet, dass Ihr Laptop die öffentliche Erreichbarkeit überhaupt nicht testen kann. Verwenden Sie curl auf einem Rechner, der nicht mit dem Tailnet verbunden ist.

FAQ

Was ist der Unterschied zwischen tailscale serve und tailscale funnel?

Wer kann das Ergebnis erreichen? tailscale serve veröffentlicht einen lokalen Port unter einer HTTPS-URL, die nur Geräte in Ihrem Tailnet erreichen können. tailscale funnel veröffentlicht denselben Port unter einer URL, die jeder im Internet erreichen kann. Die Verbindung wird über Relay-Server geleitet, die Tailscale betreibt. Die Flags und Ziele sind bei beiden Befehlen gleich. Die erste Ausgabezeile zeigt, welchen Befehl Sie erhalten haben: Available within your tailnet oder Available on the internet.

Warum meldet tailscale funnel, dass das Node-Attribut nicht gesetzt ist?

Weil funnel für ein Tailnet deaktiviert ist, bis es jemand aktiviert. Die Meldung lautet Funnel not available; "funnel" node attribute not set.. Sie stammt von Ihrem eigenen Client, bevor ein Relay kontaktiert wird. Fügen Sie in der Tailnet-Richtliniendatei unter Access Controls einen Eintrag nodeAttrs hinzu, der das Attribut funnel für autogroup:member oder für ein Tag gewährt, wenn nur eine Maschine veröffentlichen soll. Ein Tailnet-Administrator kann stattdessen der vom CLI ausgegebenen Zustimmungs-URL folgen.

Welche Ports kann Tailscale Funnel verwenden?

Nur 443, 8443 und 10000. Der Standardwert ist 443. Einen anderen Port wählen Sie mit --https=8443 oder --https=10000. Dies ist eine Einschränkung der Funnel-Relays und nicht Ihres Servers. Daher hebt weder eine Firewall-Änderung noch eine Konfigurationsänderung auf dem VPS diese Einschränkung auf. Für tailscale serve gilt diese Einschränkung nicht, weil der Datenverkehr Ihr Tailnet nie verlässt.

Bleibt eine serve- oder funnel-URL nach einem Reboot erhalten?

Nur wenn Sie --bg verwendet haben. Ohne diese Option läuft der Befehl im Vordergrund, gibt Press Ctrl+C to exit. aus und die Zuordnung verschwindet zusammen mit dem Prozess. Mit --bg wird die Zuordnung in die Serve-Konfiguration des Nodes geschrieben und kommt nach einem Reboot mit tailscaled wieder. Prüfen Sie dies mit tailscale serve status. Wenn nichts gesetzt ist, gibt der Befehl No serve config aus.

Ist es sicher, einen Funnel laufen zu lassen?

Im Hinblick auf den Transport ist es sicher: Die Verbindung verwendet HTTPS und an Ihrer Firewall wird kein Port geöffnet. Im üblichen Sinn ist es jedoch nicht sicher, weil die URL öffentlich ist und damit auch die dahinterliegende Anwendung öffentlich erreichbar ist. Lassen Sie einen Funnel nur vor einer Anwendung laufen, die ihre Anfragen selbst authentifiziert. Beenden Sie ihn, sobald die Demo oder der Webhook-Test abgeschlossen ist. Verwenden Sie dazu den Befehl, mit dem Sie ihn erstellt haben, und hängen Sie off an.

Quellen zum oben beschriebenen Befehlsverhalten sind die Tailscale-Dokumentation zu Serve und Funnel sowie die CLI-Referenz unter tailscale.com/docs.