Remote access
Tailscale
OpenClaw może automatycznie skonfigurować Tailscale Serve (tailnet) lub Funnel (publiczny) dla panelu Gateway i portu WebSocket. Dzięki temu Gateway pozostaje powiązany z loopback, podczas gdy Tailscale zapewnia HTTPS, routing oraz (dla Serve) nagłówki tożsamości.
Tryby
serve: Serve tylko w tailnet przeztailscale serve. Gateway pozostaje na127.0.0.1.funnel: Publiczny HTTPS przeztailscale funnel. OpenClaw wymaga wspólnego hasła.off: Domyślne (bez automatyzacji Tailscale).
Dane wyjściowe statusu i audytu używają ekspozycji Tailscale dla tego trybu
OpenClaw Serve/Funnel. off oznacza, że OpenClaw nie zarządza Serve ani Funnel; nie oznacza to, że
lokalny demon Tailscale jest zatrzymany albo wylogowany.
Uwierzytelnianie
Ustaw gateway.auth.mode, aby kontrolować uzgadnianie:
none(tylko prywatny ruch przychodzący)token(domyślne, gdy ustawionoOPENCLAW_GATEWAY_TOKEN)password(wspólny sekret przezOPENCLAW_GATEWAY_PASSWORDlub konfigurację)trusted-proxy(odwrotne proxy świadome tożsamości; zobacz Uwierzytelnianie zaufanego proxy)
Gdy tailscale.mode = "serve" i gateway.auth.allowTailscale ma wartość true,
uwierzytelnianie Control UI/WebSocket może używać nagłówków tożsamości Tailscale
(tailscale-user-login) bez podawania tokenu/hasła. OpenClaw weryfikuje
tożsamość, rozwiązuje adres x-forwarded-for przez lokalnego demona Tailscale
(tailscale whois) i dopasowuje go do nagłówka przed zaakceptowaniem.
OpenClaw traktuje żądanie jako Serve tylko wtedy, gdy pochodzi z loopback z nagłówkami
Tailscale x-forwarded-for, x-forwarded-proto i x-forwarded-host.
W przypadku sesji operatora Control UI, które obejmują tożsamość urządzenia przeglądarki, ta
zweryfikowana ścieżka Serve pomija też podróż w obie strony parowania urządzenia. Nie omija ona
tożsamości urządzenia przeglądarki: klienci bez urządzenia nadal są odrzucani, a połączenia WebSocket
z rolą węzła lub spoza Control UI nadal przechodzą przez zwykłe parowanie i
kontrole uwierzytelniania.
Punkty końcowe API HTTP (na przykład /v1/*, /tools/invoke i /api/channels/*)
nie używają uwierzytelniania nagłówkiem tożsamości Tailscale. Nadal stosują zwykły
tryb uwierzytelniania HTTP Gateway: domyślnie uwierzytelnianie wspólnym sekretem albo celowo
skonfigurowaną konfigurację zaufanego proxy / prywatnego ruchu przychodzącego none.
Ten przepływ bez tokenu zakłada, że host Gateway jest zaufany. Jeśli na tym samym hoście
może działać niezaufany kod lokalny, wyłącz gateway.auth.allowTailscale i zamiast tego wymagaj
uwierzytelniania tokenem/hasłem.
Aby wymagać jawnych poświadczeń wspólnego sekretu, ustaw gateway.auth.allowTailscale: false
i użyj gateway.auth.mode: "token" lub "password".
Przykłady konfiguracji
Tylko tailnet (Serve)
{ gateway: { bind: "loopback", tailscale: { mode: "serve" }, },}Otwórz: https://<magicdns>/ (lub skonfigurowane gateway.controlUi.basePath)
Aby udostępnić Control UI przez nazwaną usługę Tailscale zamiast nazwy hosta
urządzenia, ustaw gateway.tailscale.serviceName na nazwę usługi:
{ gateway: { bind: "loopback", tailscale: { mode: "serve", serviceName: "svc:openclaw" }, },}W powyższym przykładzie podczas uruchamiania adres URL usługi jest zgłaszany jako
https://openclaw.<tailnet-name>.ts.net/ zamiast nazwy hosta urządzenia.
Usługi Tailscale wymagają, aby host był zatwierdzonym oznaczonym węzłem w Twoim
tailnet. Skonfiguruj tag i zatwierdź usługę w Tailscale przed włączeniem
tej opcji, w przeciwnym razie tailscale serve --service=... zakończy się niepowodzeniem podczas uruchamiania
Gateway.
Tylko tailnet (powiązanie z adresem IP tailnet)
Użyj tego, gdy chcesz, aby Gateway nasłuchiwał bezpośrednio na adresie IP tailnet (bez Serve/Funnel).
{ gateway: { bind: "tailnet", auth: { mode: "token", token: "your-token" }, },}Połącz z innego urządzenia w tailnet:
- Control UI:
http://<tailscale-ip>:18789/ - WebSocket:
ws://<tailscale-ip>:18789
Publiczny internet (Funnel + wspólne hasło)
{ gateway: { bind: "loopback", tailscale: { mode: "funnel" }, auth: { mode: "password", password: "replace-me" }, },}Preferuj OPENCLAW_GATEWAY_PASSWORD zamiast zapisywania hasła na dysku.
Przykłady CLI
openclaw gateway --tailscale serveopenclaw gateway --tailscale funnel --auth passwordUwagi
- Tailscale Serve/Funnel wymaga zainstalowanego CLI
tailscalei zalogowania. tailscale.mode: "funnel"odmawia uruchomienia, chyba że tryb uwierzytelniania topassword, aby uniknąć publicznego wystawienia.gateway.tailscale.serviceNamedotyczy tylko trybu Serve i jest przekazywane dotailscale serve --service=<name>. Wartość musi używać formatu nazwy usługi Tailscalesvc:<dns-label>, na przykładsvc:openclaw. Tailscale wymaga, aby hosty usług były oznaczonymi węzłami, a usługa może wymagać zatwierdzenia w konsoli administratora, zanim Serve będzie mogło ją opublikować.- Ustaw
gateway.tailscale.resetOnExit, jeśli chcesz, aby OpenClaw cofnął konfiguracjętailscale servelubtailscale funnelprzy zamykaniu. - Ustaw
gateway.tailscale.preserveFunnel: true, aby utrzymać zewnętrznie skonfigurowaną trasętailscale funnelmiędzy restartami Gateway. Gdy opcja jest włączona, a Gateway działa wmode: "serve", OpenClaw sprawdzatailscale funnel statusprzed ponownym zastosowaniem Serve i pomija je, gdy trasa Funnel już obejmuje port Gateway. Zarządzana przez OpenClaw polityka Funnel tylko z hasłem pozostaje bez zmian. gateway.bind: "tailnet"to bezpośrednie powiązanie z tailnet (bez HTTPS, bez Serve/Funnel).gateway.bind: "auto"preferuje loopback; użyjtailnet, jeśli chcesz tylko tailnet.- Serve/Funnel udostępniają tylko interfejs sterowania Gateway + WS. Węzły łączą się przez ten sam punkt końcowy Gateway WS, więc Serve może działać na potrzeby dostępu węzłów.
Sterowanie przeglądarką (zdalny Gateway + lokalna przeglądarka)
Jeśli uruchamiasz Gateway na jednej maszynie, ale chcesz sterować przeglądarką na innej maszynie, uruchom host węzła na maszynie z przeglądarką i utrzymuj oba w tym samym tailnet. Gateway będzie pośredniczyć w akcjach przeglądarki do węzła; nie jest potrzebny osobny serwer sterowania ani adres URL Serve.
Unikaj Funnel do sterowania przeglądarką; traktuj parowanie węzła jak dostęp operatora.
Wymagania wstępne i limity Tailscale
- Serve wymaga włączonego HTTPS dla Twojego tailnet; CLI wyświetli monit, jeśli go brakuje.
- Serve wstrzykuje nagłówki tożsamości Tailscale; Funnel tego nie robi.
- Funnel wymaga Tailscale v1.38.3+, MagicDNS, włączonego HTTPS i atrybutu węzła funnel.
- Funnel obsługuje tylko porty
443,8443i10000przez TLS. - Funnel na macOS wymaga wariantu aplikacji Tailscale o otwartym kodzie źródłowym.
Dowiedz się więcej
- Omówienie Tailscale Serve: https://tailscale.com/kb/1312/serve
- Polecenie
tailscale serve: https://tailscale.com/kb/1242/tailscale-serve - Omówienie Tailscale Funnel: https://tailscale.com/kb/1223/tailscale-funnel
- Polecenie
tailscale funnel: https://tailscale.com/kb/1311/tailscale-funnel