- Operatorzy (Ty lub aplikacja macOS): bezpośrednie połączenie WebSocket przez LAN/Tailnet jest najprostsze, gdy Gateway jest osiągalny; tunelowanie SSH stanowi uniwersalne rozwiązanie awaryjne.
- Node’y (iOS/Android i inne urządzenia): łączą się z WebSocketem Gateway (przez LAN/Tailnet lub tunel SSH).
Główna idea
WebSocket Gateway domyślnie nasłuchuje na interfejsie loopback, na porcie18789 (gateway.port). Aby korzystać z niego zdalnie, udostępnij go przez Tailscale Serve / zaufane powiązanie z LAN/Tailnet albo przekieruj port loopback przez SSH.
Opcje topologii
W przypadku konfiguracji stale aktywnej i laptopowej najlepiej pozostawić
gateway.bind: "loopback" i używać Tailscale Serve dla interfejsu sterowania albo zaufanego powiązania z LAN/Tailnet wraz z gateway.remote.transport: "direct". Tunel SSH jest rozwiązaniem awaryjnym działającym z każdego komputera.
Przepływ poleceń (co i gdzie działa)
Jeden Gateway zarządza stanem i kanałami; Node’y są urządzeniami peryferyjnymi. Przykład (wiadomość Telegram przekierowana do narzędzia Node’a):- Wiadomość Telegram dociera do Gateway.
- Gateway uruchamia agenta, który decyduje, czy wywołać narzędzie Node’a.
- Gateway wywołuje Node przez WebSocket Gateway (RPC
node.invoke). - Node zwraca wynik; Gateway odpowiada w Telegramie.
Tunel SSH (CLI i narzędzia)
openclaw health i openclaw status --deep uzyskują dostęp do zdalnego Gateway przez ws://127.0.0.1:18789. Polecenia openclaw gateway status, openclaw gateway health, openclaw gateway probe i openclaw gateway call mogą również wskazywać przekierowany adres URL za pomocą --url.
Zastąp
18789 skonfigurowaną wartością gateway.port (lub --port / OPENCLAW_GATEWAY_PORT).Domyślne ustawienia zdalne CLI
Zapisz zdalny cel, aby polecenia CLI domyślnie z niego korzystały:ws://127.0.0.1:18789 i najpierw otwórz tunel SSH. W transporcie tunelu SSH aplikacji macOS wykryta nazwa hosta Gateway trafia do gateway.remote.sshTarget (user@host lub user@host:port); gateway.remote.url pozostaje lokalnym adresem URL tunelu. Jeśli port zdalny różni się od lokalnego, ustaw gateway.remote.remotePort.
Weryfikacja klucza hosta jest domyślnie rygorystyczna (gateway.remote.sshHostKeyPolicy: "strict"). Ustaw wartość "openssh", aby zamiast tego powierzyć ją obowiązującej konfiguracji OpenSSH; przed włączeniem tej opcji przejrzyj ustawienia SSH użytkownika i systemu.
Dla Gateway, który jest już osiągalny w zaufanej sieci LAN lub Tailnet, użyj trybu bezpośredniego:
Pierwszeństwo poświadczeń
Rozpoznawanie poświadczeń Gateway podlega jednej wspólnej umowie w ścieżkach wywołań, sondowania i stanu oraz podczas monitorowania zatwierdzeń wykonania w Discordzie. Host Node’a używa tej samej umowy z jednym wyjątkiem dla trybu lokalnego (ignorujegateway.remote.*).
- Jawne poświadczenia (
--token,--passwordlubgatewayTokennarzędzia) zawsze mają pierwszeństwo w ścieżkach wywołań obsługujących jawne uwierzytelnianie. - Bezpieczeństwo nadpisania adresu URL:
- Opcja CLI
--urlnigdy nie używa niejawnych poświadczeń z konfiguracji ani środowiska. - Zmienna środowiskowa
OPENCLAW_GATEWAY_URLmoże używać wyłącznie poświadczeń ze środowiska (OPENCLAW_GATEWAY_TOKEN/OPENCLAW_GATEWAY_PASSWORD).
- Opcja CLI
- Domyślne ustawienia trybu lokalnego:
- token:
OPENCLAW_GATEWAY_TOKEN->gateway.auth.token->gateway.remote.token(zdalna wartość awaryjna tylko wtedy, gdy token lokalny nie jest ustawiony) - hasło:
OPENCLAW_GATEWAY_PASSWORD->gateway.auth.password->gateway.remote.password(zdalna wartość awaryjna tylko wtedy, gdy hasło lokalne nie jest ustawione)
- token:
- Domyślne ustawienia trybu zdalnego:
- token:
gateway.remote.token->OPENCLAW_GATEWAY_TOKEN->gateway.auth.token - hasło:
OPENCLAW_GATEWAY_PASSWORD->gateway.remote.password->gateway.auth.password
- token:
- Wyjątek trybu lokalnego hosta Node’a:
gateway.remote.token/gateway.remote.passwordsą ignorowane. - Zdalne kontrole tokena podczas sondowania/sprawdzania stanu są domyślnie rygorystyczne: gdy celem jest tryb zdalny, używają wyłącznie
gateway.remote.token(bez awaryjnego użycia tokena lokalnego). - Nadpisania środowiskowe Gateway używają wyłącznie
OPENCLAW_GATEWAY_*.
Zdalny dostęp do interfejsu czatu
WebChat nie ma osobnego portu HTTP; interfejs czatu SwiftUI łączy się bezpośrednio z WebSocketem Gateway.- Przekieruj
18789przez SSH (zobacz wyżej), a następnie połącz klientów zws://127.0.0.1:18789. - W trybie bezpośrednim LAN/Tailnet połącz klientów ze skonfigurowanym prywatnym adresem
ws://lub bezpiecznym adresem URLwss://. - W systemie macOS tryb zdalny aplikacji automatycznie zarządza wybranym transportem.
Tryb zdalny aplikacji macOS
Aplikacja paska menu systemu macOS obsługuje tę samą konfigurację od początku do końca: zdalne kontrole stanu, WebChat i przekazywanie funkcji Voice Wake. Instrukcja: zdalny dostęp w macOS.Reguły bezpieczeństwa (dostęp zdalny/VPN)
Pozostaw Gateway dostępny wyłącznie przez interfejs loopback, chyba że masz pewność, że potrzebujesz innego powiązania.- Loopback + SSH/Tailscale Serve to najbezpieczniejsze ustawienie domyślne (bez publicznego udostępniania).
- Nieszyfrowany protokół
ws://jest akceptowany dla interfejsu loopback, sieci prywatnych/LAN (RFC 1918), adresów lokalnych dla łącza, CGNAT oraz hostów.locali.ts.net. Publiczne hosty zdalne muszą używaćwss://. - Powiązania inne niż loopback (
lan/tailnet/customlubauto, gdy loopback jest niedostępny) muszą korzystać z uwierzytelniania Gateway: tokena, hasła lub odwrotnego serwera proxy rozpoznającego tożsamość z ustawieniemgateway.auth.mode: "trusted-proxy". gateway.remote.token/.passwordsą źródłami poświadczeń klienta; same nie konfigurują uwierzytelniania serwera.- Lokalne ścieżki wywołań mogą używać
gateway.remote.*jako wartości awaryjnej tylko wtedy, gdygateway.auth.*nie jest ustawione. - Jeśli
gateway.auth.token/gateway.auth.passwordskonfigurowano jawnie za pomocą SecretRef, ale nie uda się ich rozpoznać, rozpoznawanie kończy się bezpieczną odmową (bez maskującego awaryjnego użycia ustawień zdalnych). gateway.remote.tlsFingerprintprzypina zdalny certyfikat TLS dlawss://, również w trybie bezpośrednim macOS. Bez zapisanego odcisku palca system macOS przypina certyfikat przy pierwszym użyciu dopiero po pomyślnym przejściu standardowej weryfikacji zaufania systemowego; Gateway z certyfikatem samopodpisanym lub prywatnym urzędem certyfikacji wymaga jawnego odcisku palca albo połączenia zdalnego przez SSH.- Tailscale Serve może uwierzytelniać ruch interfejsu sterowania/WebSocket za pomocą nagłówków tożsamości, gdy
gateway.auth.allowTailscale: true. Punkty końcowe API HTTP nie używają tego uwierzytelniania nagłówkowego i zamiast tego stosują standardowy tryb uwierzytelniania HTTP Gateway. Ten przepływ bez tokena zakłada, że host Gateway jest zaufany; ustaw wartośćfalse, aby wszędzie używać uwierzytelniania współdzielonym sekretem. - Uwierzytelnianie zaufanego serwera proxy domyślnie oczekuje serwera proxy rozpoznającego tożsamość, który nie działa na interfejsie loopback. Odwrotne serwery proxy działające na tym samym hoście i interfejsie loopback wymagają jawnego ustawienia
gateway.auth.trustedProxy.allowLoopback = true. - Traktuj sterowanie przez przeglądarkę jak dostęp operatora: tylko w tailnecie i z celowym parowaniem Node’a.
macOS: trwały tunel SSH przez LaunchAgent
W przypadku klientów macOS najłatwiejsza trwała konfiguracja korzysta z wpisuLocalForward w konfiguracji SSH oraz LaunchAgent, który utrzymuje tunel po ponownym uruchomieniu systemu i awarii.
Krok 1: dodaj konfigurację SSH
Edytuj~/.ssh/config:
<REMOTE_IP> i <REMOTE_USER> własnymi wartościami.
Krok 2: skopiuj klucz SSH (jednorazowo)
Krok 3: skonfiguruj token Gateway
gateway.remote.password. OPENCLAW_GATEWAY_TOKEN nadal jest prawidłowym nadpisaniem na poziomie powłoki, ale trwała konfiguracja klienta zdalnego korzysta z gateway.remote.token / gateway.remote.password.
Krok 4: utwórz LaunchAgent
Zapisz jako~/Library/LaunchAgents/ai.openclaw.ssh-tunnel.plist:
Krok 5: załaduj LaunchAgent
Jeśli pozostał Ci LaunchAgent
com.openclaw.ssh-tunnel ze starszej konfiguracji, wyładuj go i usuń.