Discovery & Transporte
OpenClaw hat zwei verschiedene Probleme, die sich oberflächlich ähneln:
- Operator-Fernsteuerung: Die macOS-Menüleisten-App steuert ein Gateway, das anderswo läuft.
- Node-Pairing: iOS/Android (und zukünftige Nodes) finden ein Gateway und koppeln sich sicher.
Das Designziel ist, die gesamte Netzwerk-Discovery/Werbung im Node-Gateway (openclaw gateway) zu halten und Clients (Mac-App, iOS) als Konsumenten zu verwenden.
Begriffe
- Gateway: Ein einzelner lang laufender Gateway-Prozess, der den State verwaltet (Sessions, Pairing, Node-Registry) und Kanäle betreibt. Die meisten Setups verwenden eins pro Host; isolierte Multi-Gateway-Setups sind möglich.
- Gateway WS (Control Plane): Der WebSocket-Endpoint auf
127.0.0.1:18789standardmäßig; kann übergateway.bindan LAN/Tailnet gebunden werden. - Direkter WS-Transport: Ein LAN-/Tailnet-seitiger Gateway-WS-Endpoint (kein SSH).
- SSH-Transport (Fallback): Fernsteuerung durch Weiterleitung von
127.0.0.1:18789über SSH. - Legacy TCP Bridge (veraltet/entfernt): Älterer Node-Transport (siehe Bridge-Protokoll); wird für Discovery nicht mehr beworben.
Protokolldetails:
Warum es “direkt” und SSH gibt
- Direkter WS bietet die beste UX im selben Netzwerk und innerhalb eines Tailnets:
- Auto-Discovery im LAN via Bonjour
- Pairing-Token + ACLs werden vom Gateway verwaltet
- Kein Shell-Zugang erforderlich; die Protokolloberfläche bleibt schlank und auditierbar
- SSH bleibt der universelle Fallback:
- Funktioniert überall, wo du SSH-Zugang hast (auch über unverbundene Netzwerke hinweg)
- Übersteht Multicast/mDNS-Probleme
- Benötigt keine neuen eingehenden Ports außer SSH
Discovery-Eingaben (wie Clients das Gateway finden)
1) Bonjour / mDNS (nur LAN)
Bonjour arbeitet nach dem Best-Effort-Prinzip und überwindet keine Netzwerkgrenzen. Es wird nur für die “gleiches LAN”-Komfortfunktion verwendet.
Zielrichtung:
- Das Gateway kündigt seinen WS-Endpoint via Bonjour an.
- Clients suchen und zeigen eine “Gateway auswählen”-Liste, dann speichern sie den gewählten Endpoint.
Fehlersuche und Beacon-Details: Bonjour.
Service-Beacon-Details
- Service-Typen:
_openclaw-gw._tcp(Gateway-Transport-Beacon)
- TXT-Schlüssel (nicht-geheim):
role=gatewaylanHost=<hostname>.localsshPort=22(oder was angekündigt wird)gatewayPort=18789(Gateway WS + HTTP)gatewayTls=1(nur wenn TLS aktiviert)gatewayTlsSha256=<sha256>(nur wenn TLS aktiviert und Fingerprint verfügbar)canvasPort=<port>(Canvas-Host-Port; derzeit identisch mitgatewayPort, wenn der Canvas-Host aktiviert ist)cliPath=<pfad>(optional; absoluter Pfad zu einem ausführbarenopenclaw-Einstiegspunkt oder Binary)tailnetDns=<magicdns>(optionaler Hinweis; automatisch erkannt, wenn Tailscale verfügbar)
Sicherheitshinweise:
- Bonjour/mDNS-TXT-Records sind nicht authentifiziert. Clients müssen TXT-Werte nur als UX-Hinweise behandeln.
- Routing (Host/Port) sollte den aufgelösten Service-Endpoint (SRV + A/AAAA) gegenüber TXT-bereitgestelltem
lanHost,tailnetDnsodergatewayPortbevorzugen. - TLS-Pinning darf niemals zulassen, dass ein angekündigter
gatewayTlsSha256einen zuvor gespeicherten Pin überschreibt. - iOS/Android-Nodes sollten Discovery-basierte Direktverbindungen als TLS-only behandeln und eine explizite “Diesem Fingerprint vertrauen”-Bestätigung erfordern, bevor ein erstmaliger Pin gespeichert wird (Out-of-Band-Verifizierung).
Deaktivierung/Override:
OPENCLAW_DISABLE_BONJOUR=1deaktiviert das Senden von Beacons.gateway.bindin~/.openclaw/openclaw.jsonsteuert den Gateway-Bindungsmodus.OPENCLAW_SSH_PORTüberschreibt den in TXT angekündigten SSH-Port (Standard 22).OPENCLAW_TAILNET_DNSveröffentlicht einentailnetDns-Hinweis (MagicDNS).OPENCLAW_CLI_PATHüberschreibt den angekündigten CLI-Pfad.
2) Tailnet (netzwerkübergreifend)
Für London/Wien-artige Setups hilft Bonjour nicht weiter. Das empfohlene “direkte” Ziel ist:
- Tailscale MagicDNS-Name (bevorzugt) oder eine stabile Tailnet-IP.
Wenn das Gateway erkennt, dass es unter Tailscale läuft, veröffentlicht es tailnetDns als optionalen Hinweis für Clients (einschließlich Wide-Area-Beacons).
3) Manuell / SSH-Ziel
Wenn kein direkter Weg existiert (oder direkt deaktiviert ist), können sich Clients immer per SSH verbinden, indem sie den Loopback-Gateway-Port weiterleiten.
Siehe Remote-Zugang.
Transport-Auswahl (Client-Policy)
Empfohlenes Client-Verhalten:
- Wenn ein gepairter Direkt-Endpoint konfiguriert und erreichbar ist, verwende ihn.
- Andernfalls: Wenn Bonjour ein Gateway im LAN findet, biete eine Ein-Tipp-Auswahl “Dieses Gateway verwenden” an und speichere es als Direkt-Endpoint.
- Andernfalls: Wenn ein Tailnet-DNS/IP konfiguriert ist, versuche direkt.
- Andernfalls: Falle auf SSH zurück.
Pairing + Auth (direkter Transport)
Das Gateway ist die Single Source of Truth für Node-/Client-Zulassung.
- Pairing-Anfragen werden im Gateway erstellt/genehmigt/abgelehnt (siehe Gateway-Pairing).
- Das Gateway erzwingt:
- Auth (Token / Schlüsselpaar)
- Scopes/ACLs (das Gateway ist kein offener Proxy für alle Methoden)
- Rate Limits
Verantwortlichkeiten nach Komponente
- Gateway: Sendet Discovery-Beacons, trifft Pairing-Entscheidungen und hostet den WS-Endpoint.
- macOS-App: Hilft bei der Gateway-Auswahl, zeigt Pairing-Aufforderungen und verwendet SSH nur als Fallback.
- iOS/Android-Nodes: Durchsuchen Bonjour als Komfortfunktion und verbinden sich mit dem gepaarten Gateway-WS.