Detectie & transportlagen
OpenClaw heeft twee afzonderlijke problemen die aan de oppervlakte op elkaar lijken:- Externe bediening door de operator: de macOS-menubalkapp die een Gateway bestuurt die elders draait.
- Node-pairing: iOS/Android (en toekomstige nodes) die een Gateway vinden en veilig pairen.
openclaw gateway) te houden en clients (mac-app, iOS) als consumenten te laten fungeren.
Termen
- Gateway: één langlopende Gateway-proces dat de state bezit (sessies, pairing, node-register) en kanalen draait. De meeste setups gebruiken er één per host; geïsoleerde multi-Gateway-setup zijn mogelijk.
- Gateway WS (control plane): het WebSocket-eindpunt op
127.0.0.1:18789standaard; kan aan LAN/tailnet worden gebonden viagateway.bind. - Direct WS transport: een LAN-/tailnet-gericht Gateway WS-eindpunt (zonder SSH).
- SSH transport (fallback): externe bediening door het forwarden van
127.0.0.1:18789via SSH. - Legacy TCP bridge (verouderd/verwijderd): ouder node-transport (zie Bridge protocol); niet langer geadverteerd voor discovery.
Waarom we zowel “direct” als SSH behouden
- Direct WS biedt de beste UX op hetzelfde netwerk en binnen een tailnet:
- auto-discovery op LAN via Bonjour
- pairing-tokens + ACL’s in beheer van de Gateway
- geen shell-toegang vereist; het protocoloppervlak kan strak en auditbaar blijven
- SSH blijft de universele fallback:
- werkt overal waar je SSH-toegang hebt (zelfs over niet-verwante netwerken)
- overleeft multicast/mDNS-problemen
- vereist geen nieuwe inkomende poorten naast SSH
Discovery-inputs (hoe clients leren waar de Gateway is)
1. Bonjour / mDNS (alleen LAN)
Bonjour is best-effort en gaat niet over netwerken heen. Het wordt alleen gebruikt voor gemak binnen “hetzelfde LAN”. Doel richting:- De Gateway adverteert zijn WS-eindpunt via Bonjour.
- Clients browsen en tonen een lijst “kies een Gateway”, en slaan daarna het gekozen eindpunt op.
Service-beacon-details
- Servicetypen:
_openclaw-gw._tcp(Gateway-transportbeacon)
- TXT-sleutels (niet-geheim):
role=gatewaylanHost=<hostname>.localsshPort=22(of wat er ook geadverteerd wordt)gatewayPort=18789(Gateway WS + HTTP)gatewayTls=1(alleen wanneer TLS is ingeschakeld)gatewayTlsSha256=<sha256>(alleen wanneer TLS is ingeschakeld en een fingerprint beschikbaar is)canvasPort=18793(standaard canvas-hostpoort; bedient/__openclaw__/canvas/)cliPath=<path>(optioneel; absoluut pad naar een uitvoerbaaropenclaw-entrypoint of binaire)tailnetDns=<magicdns>(optionele hint; automatisch gedetecteerd wanneer Tailscale beschikbaar is)
- Bonjour/mDNS TXT-records zijn niet-geauthenticeerd. Clients moeten TXT-waarden uitsluitend als UX-hints behandelen.
- Routing (host/poort) moet de voorkeur geven aan het opgeloste service-endpoint (SRV + A/AAAA) boven via TXT opgegeven
lanHost,tailnetDnsofgatewayPort. - TLS-pinning mag nooit toestaan dat een geadverteerde
gatewayTlsSha256een eerder opgeslagen pin overschrijft. - iOS/Android-nodes moeten discovery-gebaseerde directe verbindingen behandelen als alleen-TLS en een expliciete “vertrouw deze fingerprint”-bevestiging vereisen voordat een eerste pin wordt opgeslagen (out-of-band verificatie).
OPENCLAW_DISABLE_BONJOUR=1schakelt adverteren uit.gateway.bindin~/.openclaw/openclaw.jsonbepaalt de Gateway-bindmodus.OPENCLAW_SSH_PORToverschrijft de SSH-poort die in TXT wordt geadverteerd (standaard 22).OPENCLAW_TAILNET_DNSpubliceert eentailnetDns-hint (MagicDNS).OPENCLAW_CLI_PATHoverschrijft het geadverteerde CLI-pad.
2. Tailnet (cross-network)
Voor London/Vienna-achtige setups helpt Bonjour niet. Het aanbevolen “directe” doel is:- Tailscale MagicDNS-naam (bij voorkeur) of een stabiel tailnet-IP-adres.
tailnetDns als optionele hint voor clients (inclusief wide-area beacons).
3. Handmatig / SSH-doel
Wanneer er geen directe route is (of direct is uitgeschakeld), kunnen clients altijd via SSH verbinden door de local loopback Gateway-poort te forwarden. Zie Remote access.Transportselectie (clientbeleid)
Aanbevolen clientgedrag:- Als een gepaird direct eindpunt is geconfigureerd en bereikbaar, gebruik dit.
- Anders, als Bonjour een Gateway op LAN vindt, bied een een-tik-keuze “Gebruik deze Gateway” aan en sla deze op als het directe eindpunt.
- Anders, als een tailnet-DNS/IP is geconfigureerd, probeer direct.
- Anders, val terug op SSH.
Pairing + auth (direct transport)
De Gateway is de bron van waarheid voor toelating van nodes/clients.- Pairing-verzoeken worden aangemaakt/goedgekeurd/afgewezen in de Gateway (zie Gateway pairing).
- De Gateway handhaaft:
- authenticatie (token / sleutelpaar)
- scopes/ACL’s (de Gateway is geen ruwe proxy naar elke methode)
- rate limits
Verantwoordelijkheden per component
- Gateway: adverteert discovery-beacons, beheert pairing-beslissingen en host het WS-eindpunt.
- macOS-app: helpt je een Gateway te kiezen, toont pairing-prompts en gebruikt SSH alleen als fallback.
- iOS/Android-nodes: browsen Bonjour als gemak en verbinden met de gepairde Gateway WS.