Gateway
探索與傳輸方式
OpenClaw 有兩個彼此相關但不同的探索問題:
- 操作員遠端控制:macOS 選單列應用程式控制在其他位置執行的閘道。
- 節點配對:iOS/Android(及未來的節點)尋找閘道並進行安全配對。
所有網路探索/廣告功能都位於節點閘道
(openclaw gateway);用戶端(Mac 應用程式、iOS)只負責使用這些資訊。
術語
- 閘道:單一長時間執行的程序,負責管理狀態(工作階段、 配對、節點登錄檔)並執行頻道。大多數設定會在每部主機上使用一個; 也可以設定彼此隔離的多個閘道。
- 閘道 WS(控制平面):預設位於
127.0.0.1:18789的 WebSocket 端點;透過gateway.bind將其繫結至區域網路/tailnet。 - 直接 WS 傳輸:面向區域網路/tailnet 的閘道 WS 端點(不使用 SSH)。
- SSH 傳輸(備援):透過 SSH 轉送
127.0.0.1:18789來進行遠端控制。 - 舊版 TCP 橋接器(已移除):較舊的節點傳輸方式(請參閱 橋接器通訊協定);探索功能不再廣告此方式, 目前的建置版本也不再包含此方式。
通訊協定詳細資料:閘道通訊協定、 橋接器通訊協定(舊版)。
為何直接連線和 SSH 會同時存在
- 直接 WS 在相同網路及 tailnet 內可提供最佳使用者體驗:透過 Bonjour 在區域網路上自動探索、由閘道管理配對權杖與 ACL, 而且不需要 Shell 存取權。
- SSH 是通用的備援方式:只要能透過 SSH 存取,無論位於何處皆可使用, 即使跨越互不相關的網路也可以運作,且不受多播/mDNS 問題影響, 除了 SSH 之外不需要新的傳入連接埠。
探索輸入
1) Bonjour / DNS-SD
多播 Bonjour 是盡力而為的機制,無法跨越網路。OpenClaw 也支援透過已設定的廣域 DNS-SD
網域瀏覽相同的閘道信標,因此探索範圍可以同時涵蓋相同區域網路上的
local.,以及用於跨網路探索的已設定單播 DNS-SD 網域。
啟用隨附的 bonjour 外掛時,閘道會透過 Bonjour 廣告其 WS 端點;
用戶端會瀏覽並顯示「選擇閘道」清單,然後儲存所選端點。
疑難排解與信標詳細資料:Bonjour。
服務信標詳細資料
-
服務類型:
_openclaw-gw._tcp(閘道傳輸信標)。 -
TXT 鍵(非機密):
鍵 備註 role=gateway一律存在。 transport=gateway一律存在。 displayName=<name>由操作員設定的顯示名稱。 lanHost=<hostname>.local僅限區域網路 mDNS 廣告器;不由廣域 DNS-SD 寫入。 gatewayPort=18789閘道 WS + HTTP 連接埠。 gatewayTls=1僅在啟用 TLS 時存在。 gatewayTlsSha256=<sha256>僅在啟用 TLS 且可取得指紋時存在。 tailnetDns=<magicdns>選用提示;可使用 Tailscale 時會自動偵測。 sshPort=<port>僅在 discovery.mdns.mode="full"時存在;在預設"minimal"模式中會省略(SSH 預設為22),區域網路廣告器與廣域 DNS-SD 皆是如此。cliPath=<path>使用與 sshPort相同的discovery.mdns.mode="full"閘門;供命令列介面路徑使用的遠端安裝提示。外掛探索合約中定義了
canvasPortTXT 鍵,供未來的畫布主機連接埠使用, 但目前沒有任何程式碼路徑設定其值,因此現今絕不會發出此鍵。
安全性注意事項:
- Bonjour/mDNS TXT 記錄未經驗證。用戶端必須僅將 TXT 值視為使用者體驗提示。
- 路由(主機/連接埠)應優先採用解析後的服務端點
(SRV + A/AAAA),而非 TXT 提供的
lanHost、tailnetDns或gatewayPort。 - TLS 釘選絕不可讓廣告的
gatewayTlsSha256覆寫 先前儲存的釘選。 - 只要選擇的路由是安全/以 TLS 為基礎,iOS/Android 節點在儲存首次使用的釘選前, 應要求明確確認「信任此指紋」(頻外驗證)。
啟用、停用及覆寫:
openclaw plugins enable bonjour會啟用區域網路多播廣告。openclaw.json中的discovery.mdns.mode控制 mDNS 廣播:"minimal"(預設)、"full"(將cliPath/sshPort同時加入區域網路 信標與任何廣域 DNS-SD 區域),或"off"(停用 mDNS)。OPENCLAW_DISABLE_BONJOUR=1會強制停用廣告;discovery.mdns.mode="off"則會獨立停用廣告。OPENCLAW_DISABLE_BONJOUR=0是明確的選擇加入設定, 可覆寫外掛在偵測到容器(Docker、containerd、Kubernetes、LXC)內時的自動停用行為; 但不會覆寫discovery.mdns.mode="off"。隨附的bonjour外掛會在 macOS 主機(enabledByDefaultOnPlatforms: ["darwin"])上自動啟動,並在偵測到容器內時自動停用; Linux、Windows 及其他容器化部署需要明確設定plugins enable bonjour。~/.openclaw/openclaw.json中的gateway.bind控制閘道繫結模式。OPENCLAW_SSH_PORT會覆寫廣告的 SSH 連接埠(僅在discovery.mdns.mode="full"時生效)。OPENCLAW_TAILNET_DNS會發布tailnetDns提示(MagicDNS)。OPENCLAW_CLI_PATH會覆寫廣告的命令列介面路徑。
2) Tailnet(跨網路)
對位於不同實體網路上的閘道而言,Bonjour 無法提供協助。建議的直接目標是 Tailscale MagicDNS 名稱(優先)或穩定的 tailnet IP。
如果閘道偵測到自己在 Tailscale 下執行,便會發布
tailnetDns 作為用戶端的選用提示(包括廣域信標)。
macOS 應用程式在探索閘道時,會優先採用 MagicDNS 名稱而非原始 Tailscale IP;
因此當 tailnet IP 因節點重新啟動或 CGNAT 重新指派而變更時,仍可維持可靠性,
因為 MagicDNS 會自動解析至目前的 IP。
對於行動節點配對,探索提示絕不會放寬 tailnet/公用路由上的傳輸安全性:
- iOS/Android 仍需要安全的首次 tailnet/公用連線路徑
(
wss://或 Tailscale Serve/Funnel)。 - 探索到的原始 tailnet IP 是路由提示,並非使用
明文遠端
ws://的許可。 - 仍支援私人區域網路直接連線
ws://。 - 若要在行動節點上使用最簡單的 Tailscale 路徑,請使用 Tailscale Serve, 讓探索與設定都解析至相同的安全 MagicDNS 端點。
3) 手動/SSH 目標
沒有直接路由(或直接連線已停用)時,用戶端仍可透過 SSH 轉送 迴路閘道連接埠來連線。請參閱遠端存取。
傳輸選擇(用戶端政策)
- 如果已設定配對的直接端點且可以連線,則使用該端點。
- 否則,如果探索功能在
local.或已設定的廣域 網域中找到閘道,請提供一鍵「使用此閘道」選項,並將其儲存為 直接端點。 - 否則,如果已設定 tailnet DNS/IP,則嘗試直接連線。對使用
tailnet/公用路由的行動節點而言,直接連線表示安全端點,而非明文
遠端
ws://。 - 否則,回退至 SSH。
配對與驗證(直接傳輸)
閘道是節點/用戶端准入的真實資料來源:
- 配對要求會在閘道中建立/核准/拒絕(請參閱 閘道配對)。
- 閘道會強制執行驗證(權杖/金鑰組)、範圍/ACL(並非 對所有方法提供原始代理),以及速率限制。
各元件的責任
- 閘道:廣告探索信標、負責配對決策,並託管 WS 端點。
- macOS 應用程式:協助你選擇閘道、顯示配對提示,且僅將 SSH 作為備援方式。
- iOS/Android 節點:為了便利性而瀏覽 Bonjour,並連線至 已配對的閘道 WS。