- Operators (jij of de macOS-app): een rechtstreekse LAN/Tailnet-WebSocket is het eenvoudigst wanneer de Gateway bereikbaar is; SSH-tunneling is de universele terugvaloptie.
- Nodes (iOS/Android en andere apparaten): maken verbinding met de WebSocket van de Gateway (LAN/tailnet of SSH-tunnel).
Het kernidee
De WebSocket van de Gateway bindt standaard aan loopback, op poort18789 (gateway.port). Voor extern gebruik maak je deze beschikbaar via Tailscale Serve / een vertrouwde LAN-Tailnet-binding, of stuur je de loopback-poort door via SSH.
Topologieopties
Voor de altijd actieve opstelling en de laptopopstelling wordt aangeraden
gateway.bind: "loopback" te behouden en Tailscale Serve voor de Control UI te gebruiken, of een vertrouwde LAN/Tailnet-binding met gateway.remote.transport: "direct". Een SSH-tunnel is de terugvaloptie die vanaf elke computer werkt.
Opdrachtstroom (wat waar wordt uitgevoerd)
Eén Gateway beheert status en kanalen; Nodes zijn randapparaten. Voorbeeld (een Telegram-bericht dat naar een Node-tool wordt doorgestuurd):- Een Telegram-bericht komt aan bij de Gateway.
- De Gateway voert de agent uit, die beslist of een Node-tool wordt aangeroepen.
- De Gateway roept de Node aan via de WebSocket van de Gateway (
node.invoke-RPC). - De Node retourneert het resultaat; de Gateway antwoordt via Telegram.
SSH-tunnel (CLI + tools)
openclaw health en openclaw status --deep de externe Gateway via ws://127.0.0.1:18789. openclaw gateway status, openclaw gateway health, openclaw gateway probe en openclaw gateway call kunnen via --url ook een doorgestuurde URL gebruiken.
Vervang
18789 door je geconfigureerde gateway.port (of --port / OPENCLAW_GATEWAY_PORT).Standaardwaarden voor externe CLI-toegang
Sla een extern doel op, zodat CLI-opdrachten dit standaard gebruiken:ws://127.0.0.1:18789 en open je eerst de SSH-tunnel. Bij het SSH-tunneltransport van de macOS-app komt de gedetecteerde hostnaam van de Gateway in gateway.remote.sshTarget (user@host of user@host:port); gateway.remote.url blijft de lokale tunnel-URL. Als de externe poort afwijkt van de lokale poort, stel je gateway.remote.remotePort in.
Hostsleutelverificatie is standaard strikt (gateway.remote.sshHostKeyPolicy: "strict"). Stel dit in op "openssh" om de verificatie in plaats daarvan aan je effectieve OpenSSH-configuratie over te laten; controleer je gebruikers- en systeeminstellingen voor SSH voordat je dit inschakelt.
Gebruik de rechtstreekse modus voor een Gateway die al via een vertrouwd LAN of Tailnet bereikbaar is:
Prioriteitsvolgorde van referenties
De resolutie van Gateway-referenties volgt één gedeeld contract voor aanroep-, probe- en statuspaden en voor de bewaking van uitvoeringsgoedkeuringen in Discord. De Node-host gebruikt hetzelfde contract, met één uitzondering voor de lokale modus (deze negeertgateway.remote.*).
- Expliciete referenties (
--token,--passwordof degatewayTokenvan een tool) hebben altijd voorrang op aanroeppaden die expliciete authenticatie accepteren. - Veiligheid bij URL-overschrijvingen:
- CLI-
--urlgebruikt nooit impliciete configuratie- of omgevingsreferenties opnieuw. - Omgevingsvariabele
OPENCLAW_GATEWAY_URLmag alleen omgevingsreferenties gebruiken (OPENCLAW_GATEWAY_TOKEN/OPENCLAW_GATEWAY_PASSWORD).
- CLI-
- Standaardwaarden voor lokale modus:
- token:
OPENCLAW_GATEWAY_TOKEN->gateway.auth.token->gateway.remote.token(alleen externe terugval wanneer het lokale token niet is ingesteld) - wachtwoord:
OPENCLAW_GATEWAY_PASSWORD->gateway.auth.password->gateway.remote.password(alleen externe terugval wanneer het lokale wachtwoord niet is ingesteld)
- token:
- Standaardwaarden voor externe modus:
- token:
gateway.remote.token->OPENCLAW_GATEWAY_TOKEN->gateway.auth.token - wachtwoord:
OPENCLAW_GATEWAY_PASSWORD->gateway.remote.password->gateway.auth.password
- token:
- Uitzondering voor lokale modus van de Node-host:
gateway.remote.token/gateway.remote.passwordworden genegeerd. - Tokencontroles voor externe probes/status zijn standaard strikt: bij gebruik van de externe modus gebruiken ze alleen
gateway.remote.token(geen terugval op een lokaal token). - Omgevingsoverschrijvingen voor de Gateway gebruiken alleen
OPENCLAW_GATEWAY_*.
Externe toegang tot de chatinterface
WebChat heeft geen afzonderlijke HTTP-poort; de SwiftUI-chatinterface maakt rechtstreeks verbinding met de WebSocket van de Gateway.- Stuur
18789door via SSH (zie hierboven) en verbind clients vervolgens metws://127.0.0.1:18789. - Voor de rechtstreekse LAN/Tailnet-modus verbind je clients met de geconfigureerde privé-URL
ws://of beveiligde URLwss://. - Op macOS beheert de externe modus van de app het geselecteerde transport automatisch.
Externe modus van de macOS-app
De menubalkapp voor macOS beheert dezelfde opstelling van begin tot eind: externe statuscontroles, WebChat en het doorsturen van Voice Wake. Draaiboek: externe toegang voor macOS.Beveiligingsregels (extern/VPN)
Houd de Gateway alleen via loopback bereikbaar, tenzij je zeker weet dat een binding nodig is.- Loopback + SSH/Tailscale Serve is de veiligste standaardinstelling (geen openbare blootstelling).
- Niet-versleutelde
ws://wordt geaccepteerd voor loopback-, privé-/LAN- (RFC 1918), link-local-, CGNAT-,.local- en.ts.net-hosts. Openbare externe hosts moetenwss://gebruiken. - Niet-loopback-bindingen (
lan/tailnet/custom, ofautowanneer loopback niet beschikbaar is) moeten Gateway-authenticatie gebruiken: een token, wachtwoord of identiteitsbewuste reverse proxy metgateway.auth.mode: "trusted-proxy". gateway.remote.token/.passwordzijn bronnen voor clientreferenties; ze configureren op zichzelf geen serverauthenticatie.- Lokale aanroeppaden mogen
gateway.remote.*alleen als terugval gebruiken wanneergateway.auth.*niet is ingesteld. - Als
gateway.auth.token/gateway.auth.passwordexpliciet via SecretRef is geconfigureerd en niet kan worden opgelost, mislukt de resolutie gesloten (zonder maskerende externe terugval). gateway.remote.tlsFingerprintlegt het externe TLS-certificaat voorwss://vast, voor zowel operator-/besturingsverkeer als de bijbehorende Node in de rechtstreekse macOS-modus. Zonder opgeslagen vastlegging legt macOS het certificaat bij het eerste gebruik pas vast nadat de normale systeemvertrouwenscontrole is geslaagd; Gateways met een zelfondertekend certificaat of privé-CA vereisen een expliciete vingerafdruk of externe toegang via SSH.- Tailscale Serve kan Control UI-/WebSocket-verkeer via identiteitsheaders authenticeren wanneer
gateway.auth.allowTailscale: true. HTTP API-eindpunten gebruiken deze headerauthenticatie niet en volgen in plaats daarvan de normale HTTP-authenticatiemodus van de Gateway. Deze tokenloze stroom veronderstelt dat de Gateway-host wordt vertrouwd; stel dit in opfalseom overal authenticatie met een gedeeld geheim te gebruiken. - Trusted-proxy-authenticatie verwacht standaard een niet-loopback, identiteitsbewuste proxy. Reverse proxies op dezelfde host via loopback vereisen expliciet
gateway.auth.trustedProxy.allowLoopback = true. - Behandel browserbesturing als operatortoegang: alleen via het tailnet en met bewuste Node-koppeling.
macOS: permanente SSH-tunnel via LaunchAgent
Voor macOS-clients gebruikt de eenvoudigste permanente opstelling een SSH-LocalForward-configuratievermelding plus een LaunchAgent die de tunnel actief houdt na herstarts en crashes.
Stap 1: SSH-configuratie toevoegen
Bewerk~/.ssh/config:
<REMOTE_IP> en <REMOTE_USER> door je eigen waarden.
Stap 2: SSH-sleutel kopiëren (eenmalig)
Stap 3: het Gateway-token configureren
gateway.remote.password als de externe Gateway wachtwoordauthenticatie gebruikt. OPENCLAW_GATEWAY_TOKEN blijft geldig als overschrijving op shellniveau, maar voor een duurzame externe clientopstelling gebruik je gateway.remote.token / gateway.remote.password.
Stap 4: de LaunchAgent maken
Sla op als~/Library/LaunchAgents/ai.openclaw.ssh-tunnel.plist:
Stap 5: de LaunchAgent laden
Als je nog een
com.openclaw.ssh-tunnel-LaunchAgent van een oudere opstelling hebt, verwijder deze dan uit het geheugen en verwijder het bestand.