Gateway
Detectie en transporten
OpenClaw heeft twee verschillende problemen die aan de oppervlakte op elkaar lijken:
- Externe bediening door operator: de macOS-menubalkapp die een Gateway bestuurt die elders draait.
- Node-koppeling: iOS/Android (en toekomstige nodes) die een Gateway vinden en veilig koppelen.
Het ontwerpdoel is om alle netwerkdetectie/advertering in de Node Gateway (openclaw gateway) te houden en clients (Mac-app, iOS) als consumenten te houden.
Termen
- Gateway: een enkel langlopend Gateway-proces dat eigenaar is van state (sessies, koppeling, node-register) en kanalen uitvoert. De meeste setups gebruiken er een per host; geisoleerde setups met meerdere Gateways zijn mogelijk.
- Gateway WS (besturingsvlak): het WebSocket-eindpunt standaard op
127.0.0.1:18789; kan aan LAN/tailnet worden gebonden viagateway.bind. - Direct WS-transport: een Gateway WS-eindpunt gericht op LAN/tailnet (geen SSH).
- SSH-transport (terugvaloptie): externe bediening door
127.0.0.1:18789via SSH door te sturen. - Verouderde TCP-brug (verwijderd): ouder node-transport (zie Brugprotocol); wordt niet langer geadverteerd voor detectie en maakt geen deel meer uit van huidige builds.
Protocoldetails:
Waarom we zowel direct als SSH behouden
- Direct WS biedt de beste UX op hetzelfde netwerk en binnen een tailnet:
- automatische detectie op LAN via Bonjour
- koppelingstokens + ACL's beheerd door de Gateway
- geen shelltoegang vereist; het protocoloppervlak kan strak en controleerbaar blijven
- SSH blijft de universele terugvaloptie:
- werkt overal waar je SSH-toegang hebt (zelfs over niet-gerelateerde netwerken)
- blijft werken bij multicast-/mDNS-problemen
- vereist geen nieuwe inkomende poorten naast SSH
Detectie-inputs (hoe clients leren waar de Gateway is)
1) Bonjour- / DNS-SD-detectie
Multicast Bonjour is best effort en werkt niet over netwerken heen. OpenClaw kan ook dezelfde Gateway-beacon doorzoeken via een geconfigureerd wide-area DNS-SD-domein, zodat detectie het volgende kan dekken:
local.op hetzelfde LAN- een geconfigureerd unicast DNS-SD-domein voor detectie over netwerken heen
Doelrichting:
- De Gateway adverteert zijn WS-eindpunt via Bonjour wanneer de gebundelde
bonjour-Plugin is ingeschakeld. De Plugin start automatisch op macOS-hosts en is elders opt-in. - Clients bladeren en tonen een lijst "kies een Gateway" en slaan daarna het gekozen eindpunt op.
Details voor probleemoplossing en beacons: Bonjour.
Servicebeacondetails
- Servicetypen:
_openclaw-gw._tcp(Gateway-transportbeacon)
- TXT-sleutels (niet geheim):
role=gatewaytransport=gatewaydisplayName=<friendly name>(door operator geconfigureerde weergavenaam)lanHost=<hostname>.localgatewayPort=18789(Gateway WS + HTTP)gatewayTls=1(alleen wanneer TLS is ingeschakeld)gatewayTlsSha256=<sha256>(alleen wanneer TLS is ingeschakeld en de fingerprint beschikbaar is)canvasPort=<port>(canvas-hostpoort; momenteel hetzelfde alsgatewayPortwanneer de canvas-host is ingeschakeld)tailnetDns=<magicdns>(optionele hint; automatisch gedetecteerd wanneer Tailscale beschikbaar is)sshPort=<port>(alleen mDNS-volledige modus; wide-area DNS-SD kan dit weglaten, in welk geval SSH-standaarden op22blijven)cliPath=<path>(alleen mDNS-volledige modus; wide-area DNS-SD schrijft dit nog steeds als remote-install-hint)
Beveiligingsopmerkingen:
- Bonjour-/mDNS-TXT-records zijn niet geauthenticeerd. Clients moeten TXT-waarden alleen als UX-hints behandelen.
- Routing (host/poort) moet de voorkeur geven aan het opgeloste service-eindpunt (SRV + A/AAAA) boven door TXT geleverde
lanHost,tailnetDnsofgatewayPort. - TLS-pinning mag nooit toestaan dat een geadverteerde
gatewayTlsSha256een eerder opgeslagen pin overschrijft. - iOS-/Android-nodes moeten een expliciete bevestiging "vertrouw deze fingerprint" vereisen voordat een eerste pin wordt opgeslagen (out-of-band verificatie) wanneer de gekozen route veilig/op TLS gebaseerd is.
Inschakelen/uitschakelen/overschrijven:
openclaw plugins enable bonjourschakelt LAN-multicastadvertenties in.OPENCLAW_DISABLE_BONJOUR=1schakelt advertering uit.- Wanneer de Bonjour-Plugin is ingeschakeld en
OPENCLAW_DISABLE_BONJOURniet is ingesteld, adverteert Bonjour op normale hosts en schakelt automatisch uit binnen gedetecteerde containers. Opstarten van de macOS-Gateway met lege configuratie schakelt de Plugin automatisch in; Linux, Windows en containerized deployments moeten expliciet worden ingeschakeld. Gebruik0alleen op host, macvlan of een ander mDNS-geschikt netwerk; gebruik1om uitschakeling af te dwingen. gateway.bindin~/.openclaw/openclaw.jsonbeheert de Gateway-bindmodus.OPENCLAW_SSH_PORToverschrijft de geadverteerde SSH-poort wanneersshPortwordt uitgestuurd.OPENCLAW_TAILNET_DNSpubliceert eentailnetDns-hint (MagicDNS).OPENCLAW_CLI_PATHoverschrijft het geadverteerde CLI-pad.
2) Tailnet (over netwerken heen)
Voor setups in de stijl Londen/Wenen helpt Bonjour niet. Het aanbevolen "directe" doel is:
- Tailscale MagicDNS-naam (voorkeur) of een stabiel tailnet-IP.
Als de Gateway kan detecteren dat deze onder Tailscale draait, publiceert deze tailnetDns als een optionele hint voor clients (inclusief wide-area beacons).
De macOS-app geeft nu de voorkeur aan MagicDNS-namen boven ruwe Tailscale-IP's voor Gateway-detectie. Dit verbetert de betrouwbaarheid wanneer tailnet-IP's wijzigen (bijvoorbeeld na node-herstarts of CGNAT-hertoewijzing), omdat MagicDNS-namen automatisch naar het huidige IP verwijzen.
Voor koppeling van mobiele nodes versoepelen detectiehints de transportbeveiliging op tailnet-/publieke routes niet:
- iOS/Android vereisen nog steeds een veilig eerste tailnet-/publiek verbindingspad (
wss://of Tailscale Serve/Funnel). - Een ontdekt ruw tailnet-IP is een routinghint, geen toestemming om plaintext externe
ws://te gebruiken. - Private LAN-direct-connect
ws://blijft ondersteund. - Als je het eenvoudigste Tailscale-pad voor mobiele nodes wilt, gebruik Tailscale Serve zodat detectie en de setupcode beide naar hetzelfde veilige MagicDNS-eindpunt verwijzen.
3) Handmatig / SSH-doel
Wanneer er geen directe route is (of direct is uitgeschakeld), kunnen clients altijd via SSH verbinden door de loopback-Gateway-poort door te sturen.
Zie Externe toegang.
Transportselectie (clientbeleid)
Aanbevolen clientgedrag:
- Als een gekoppeld direct eindpunt is geconfigureerd en bereikbaar is, gebruik dat.
- Anders, als detectie een Gateway vindt op
local.of het geconfigureerde wide-area domein, bied een een-tik-keuze "Deze Gateway gebruiken" aan en sla die op als het directe eindpunt. - Anders, als een tailnet-DNS/IP is geconfigureerd, probeer direct.
Voor mobiele nodes op tailnet-/publieke routes betekent direct een veilig eindpunt, geen plaintext externe
ws://. - Anders, val terug op SSH.
Koppeling + auth (direct transport)
De Gateway is de bron van waarheid voor toelating van nodes/clients.
- Koppelingsverzoeken worden in de Gateway aangemaakt/goedgekeurd/geweigerd (zie Gateway-koppeling).
- De Gateway dwingt het volgende af:
- auth (token / sleutelpaar)
- scopes/ACL's (de Gateway is geen ruwe proxy naar elke methode)
- rate limits
Verantwoordelijkheden per component
- Gateway: adverteert detectiebeacons, beheert koppelingsbeslissingen en host het WS-eindpunt.
- macOS-app: helpt je een Gateway te kiezen, toont koppelingsprompts en gebruikt SSH alleen als terugvaloptie.
- iOS-/Android-nodes: bladeren door Bonjour voor gemak en verbinden met de gekoppelde Gateway WS.