Tailscale (Gateway-Dashboard)
OpenClaw kann Tailscale Serve (Tailnet) oder Funnel (öffentlich) für das Gateway-Dashboard und den WebSocket-Port automatisch konfigurieren. Der Gateway bleibt an Loopback gebunden, während Tailscale HTTPS, Routing und (bei Serve) Identity-Header bereitstellt.
Modi
serve: Nur-Tailnet-Serve übertailscale serve. Der Gateway bleibt auf127.0.0.1.funnel: Öffentliches HTTPS übertailscale funnel. OpenClaw verlangt ein gemeinsames Passwort.off: Standard (keine Tailscale-Automatik).
Auth
gateway.auth.mode steuert den Handshake:
token(Standard, wennCLAWDBOT_GATEWAY_TOKENgesetzt ist)password(gemeinsames Geheimnis überCLAWDBOT_GATEWAY_PASSWORDoder Konfiguration)
Bei tailscale.mode = "serve" und gateway.auth.allowTailscale: true können gültige Serve-Proxy-Anfragen sich über Tailscale-Identity-Header (tailscale-user-login) authentifizieren, ohne Token/Passwort zu liefern. OpenClaw prüft die Identität, indem die x-forwarded-for-Adresse über den lokalen Tailscale-Daemon (tailscale whois) aufgelöst und mit dem Header abgeglichen wird. OpenClaw behandelt eine Anfrage nur als Serve, wenn sie von Loopback mit Tailscales x-forwarded-for, x-forwarded-proto und x-forwarded-host-Headern eingeht. Für explizite Credentials gateway.auth.allowTailscale: false setzen oder gateway.auth.mode: "password" erzwingen.
Konfigurationsbeispiele
Nur Tailnet (Serve)
{
gateway: {
bind: "loopback",
tailscale: { mode: "serve" }
}
}Öffnen: https://<magicdns>/ (oder Ihr konfigurierter gateway.controlUi.basePath)
Nur Tailnet (an Tailnet-IP binden)
Nutzen, wenn der Gateway direkt auf der Tailnet-IP lauschen soll (ohne Serve/Funnel).
{
gateway: {
bind: "tailnet",
auth: { mode: "token", token: "your-token" }
}
}Von einem anderen Tailnet-Gerät verbinden:
- Control-UI:
http://<tailscale-ip>:18789/ - WebSocket:
ws://<tailscale-ip>:18789
Hinweis: Loopback (http://127.0.0.1:18789) funktioniert in diesem Modus nicht.
Öffentliches Internet (Funnel + gemeinsames Passwort)
{
gateway: {
bind: "loopback",
tailscale: { mode: "funnel" },
auth: { mode: "password", password: "replace-me" }
}
}CLAWDBOT_GATEWAY_PASSWORD dem Speichern eines Passworts auf Disk vorziehen.
CLI-Beispiele
openclaw gateway --tailscale serve
openclaw gateway --tailscale funnel --auth passwordHinweise
- Tailscale Serve/Funnel setzt voraus, dass die
tailscale-CLI installiert und eingeloggt ist. tailscale.mode: "funnel"startet nicht, wenn der Auth-Modus nichtpasswordist (gegen öffentliche Exposition).gateway.tailscale.resetOnExitsetzen, wenn OpenClaw dietailscale serve- bzw.tailscale funnel-Konfiguration beim Herunterfahren rückgängig machen soll.gateway.bind: "tailnet"ist ein direkter Tailnet-Bind (kein HTTPS, kein Serve/Funnel).gateway.bind: "auto"bevorzugt Loopback;tailnetnutzen für Nur-Tailnet.- Serve/Funnel exponieren nur Gateway-Control-UI + WS. Nodes verbinden sich über denselben Gateway-WS-Endpunkt, Serve funktioniert also auch für Node-Zugriff.
Browser-Steuerung (Remote-Gateway + lokaler Browser)
Läuft der Gateway auf einer Maschine, der Browser soll aber auf einer anderen laufen: Node-Host auf der Browser-Maschine betreiben und beide im selben Tailnet halten. Der Gateway proxyt Browser-Aktionen zum Node; kein separater Control-Server oder Serve-URL nötig. Funnel für Browser-Steuerung vermeiden; Node-Pairing wie Operator-Zugriff behandeln.
Tailscale-Voraussetzungen + Grenzen
- Serve setzt HTTPS für Ihr Tailnet voraus; die CLI fragt nach, wenn es fehlt.
- Serve fügt Tailscale-Identity-Header ein; Funnel nicht.
- Funnel setzt Tailscale v1.38.3+, MagicDNS, HTTPS und ein Funnel-Node-Attribut voraus.
- Funnel unterstützt nur die Ports
443,8443und10000über TLS. - Funnel unter macOS erfordert die Open-Source-Tailscale-App-Variante.
Weiterführend
- Tailscale-Serve-Überblick: https://tailscale.com/kb/1312/serve
tailscale serve-Befehl: https://tailscale.com/kb/1242/tailscale-serve- Tailscale-Funnel-Überblick: https://tailscale.com/kb/1223/tailscale-funnel
tailscale funnel-Befehl: https://tailscale.com/kb/1311/tailscale-funnel