Modalità
gateway.tailscale.mode:
L’output di stato e controllo usa esposizione Tailscale per questa modalità Serve/Funnel di OpenClaw.
off indica che OpenClaw non gestisce Serve o Funnel; non significa che il daemon Tailscale locale sia arrestato o disconnesso.
Esempi di configurazione
Solo tailnet (Serve)
https://<magicdns>/ (oppure il valore configurato per gateway.controlUi.basePath)
Per esporre l’interfaccia di controllo tramite un servizio Tailscale denominato anziché tramite il nome host del dispositivo, imposta gateway.tailscale.serviceName sul nome del servizio:
https://openclaw.<tailnet-name>.ts.net/ anziché il nome host del dispositivo. I servizi Tailscale richiedono che l’host sia un Node con tag approvato nella tailnet: configura il tag e approva il servizio in Tailscale prima di abilitare questa opzione; in caso contrario, tailscale serve --service=... non riesce durante l’avvio del Gateway.
Solo tailnet (associazione all’IP della tailnet)
Usa questa configurazione affinché il Gateway ascolti direttamente sull’IP della tailnet, senza Serve/Funnel:- Interfaccia di controllo:
http://<tailscale-ip>:18789/ - WebSocket:
ws://<tailscale-ip>:18789
Quando è presente un indirizzo IPv4 associabile della tailnet, il Gateway richiede anche
http://127.0.0.1:18789 per i client autenticati sullo stesso host. Se all’avvio non è disponibile alcun indirizzo della tailnet, utilizza solo il local loopback; riavvialo dopo che Tailscale è diventato disponibile per aggiungere l’accesso diretto dalla tailnet. Nessuno dei due percorsi aggiunge un’esposizione LAN o pubblica.Internet pubblico (Funnel + password condivisa)
OPENCLAW_GATEWAY_PASSWORD anziché salvare una password su disco.
Esempi CLI
Autenticazione
gateway.auth.mode controlla l’handshake:
Intestazioni di identità Tailscale (solo Serve)
Quandotailscale.mode: "serve" e gateway.auth.allowTailscale è true, l’autenticazione dell’interfaccia di controllo/WebSocket può usare le intestazioni di identità Tailscale (tailscale-user-login) anziché un token o una password. OpenClaw verifica l’intestazione risolvendo l’indirizzo x-forwarded-for della richiesta tramite il daemon Tailscale locale (tailscale whois) e confrontandolo con l’accesso indicato nell’intestazione prima di accettarlo. Una richiesta può usare questo percorso solo quando proviene dal local loopback e contiene le intestazioni x-forwarded-for, x-forwarded-proto e x-forwarded-host di Tailscale.
Questo flusso senza token presuppone che l’host del Gateway sia attendibile. Se sullo stesso host potrebbe essere eseguito codice locale non attendibile, imposta gateway.auth.allowTailscale: false e richiedi invece l’autenticazione tramite token o password.
Ambito dell’esclusione:
- Si applica solo alla superficie di autenticazione WebSocket dell’interfaccia di controllo. Gli endpoint dell’API HTTP (
/v1/*,/tools/invoke,/api/channels/*e così via) non usano mai l’autenticazione tramite intestazione di identità Tailscale; seguono sempre la normale modalità di autenticazione HTTP del Gateway. - Per le sessioni operatore dell’interfaccia di controllo che contengono già l’identità del dispositivo del browser, un’identità Tailscale verificata evita il passaggio di associazione tramite token di bootstrap/codice QR.
- Non esclude l’identità del dispositivo: i client senza dispositivo vengono comunque rifiutati e le connessioni con ruolo Node continuano a essere sottoposte alle normali verifiche di associazione e autenticazione.
Note
- Tailscale Serve/Funnel richiede che la CLI
tailscalesia installata e connessa. tailscale.mode: "funnel"rifiuta di avviarsi a meno che la modalità di autenticazione non siapassword, per evitare l’esposizione pubblica.gateway.tailscale.serviceNamesi applica solo alla modalità Serve e viene passato atailscale serve --service=<name>. Il valore deve usare il formatosvc:<dns-label>di Tailscale, ad esempiosvc:openclaw. Tailscale richiede che gli host del servizio siano Node con tag e potrebbe essere necessario approvare il servizio nella console di amministrazione prima che Serve possa pubblicarlo.gateway.tailscale.resetOnExitannulla la configurazione ditailscale serve/tailscale funnelall’arresto.gateway.tailscale.preserveFunnel: truemantiene attiva tra i riavvii del Gateway una routetailscale funnelconfigurata esternamente. Conmode: "serve", OpenClaw controllatailscale funnel statusprima di riapplicare Serve e non lo applica se una route Funnel copre già la porta del Gateway. Il criterio di OpenClaw che limita Funnel gestito alla sola password rimane invariato.gateway.bind: "tailnet"usa un’associazione diretta alla tailnet (senza HTTPS né Serve/Funnel) insieme all’indirizzo locale obbligatorio127.0.0.1quando è disponibile un indirizzo IPv4 della tailnet; altrimenti utilizza solo il local loopback.gateway.bind: "auto"preferisce il local loopback; usatailnetper limitare l’esposizione di rete alla tailnet mantenendo l’accesso dal local loopback sullo stesso host.- Serve/Funnel espongono solo l’interfaccia di controllo del Gateway + WS. I Node si connettono tramite lo stesso endpoint WS del Gateway, quindi Serve funziona anche per l’accesso dei Node.
Prerequisiti e limiti di Tailscale
- Serve richiede che HTTPS sia abilitato per la tailnet; la CLI mostra una richiesta se manca.
- Serve inserisce le intestazioni di identità Tailscale; Funnel no.
- Funnel richiede Tailscale v1.38.3 o successiva, MagicDNS, HTTPS abilitato e un attributo Funnel per il Node.
- Funnel supporta solo le porte
443,8443e10000tramite TLS. - Funnel su macOS richiede la variante open source dell’app Tailscale.
Controllo del browser (Gateway remoto + browser locale)
Per eseguire il Gateway su un computer ma controllare un browser su un altro, esegui un host Node sul computer del browser e mantienili entrambi nella stessa tailnet. Il Gateway inoltra le azioni del browser al Node; non sono necessari un server di controllo separato né un URL Serve. Evita Funnel per il controllo del browser; considera l’associazione del Node equivalente all’accesso dell’operatore.Ulteriori informazioni
- Panoramica di Tailscale Serve: https://tailscale.com/kb/1312/serve
- Comando
tailscale serve: https://tailscale.com/kb/1242/tailscale-serve - Panoramica di Tailscale Funnel: https://tailscale.com/kb/1223/tailscale-funnel
- Comando
tailscale funnel: https://tailscale.com/kb/1311/tailscale-funnel