設定
proxy.enabled: true 保留在設定中:
proxy.proxyUrl 的優先順序高於 OPENCLAW_PROXY_URL。如果 proxy.enabled 為 true,但無法解析出有效 URL,受保護的命令會在啟動時失敗,而不是退回直接網路存取。
| 鍵 | 類型 | 預設值 | 備註 |
|---|---|---|---|
proxy.enabled | boolean | 未設定 | 必須為 true 才會啟用路由。 |
proxy.proxyUrl | string | 未設定 | http:// 或 https:// 正向代理 URL。嵌入 URL 的認證資料會視為敏感資訊,並從快照/日誌中遮蔽。 |
proxy.tls.caFile | string | 未設定 | 用於驗證由私有 CA 簽署的 https:// 代理端點的 CA bundle。 |
proxy.loopbackMode | gateway-only | proxy | block | gateway-only | 控制 loopback 繞過行為;請見下方。 |
OPENCLAW_PROXY_URL 環境變數備援最適合前景執行。若要搭配已安裝的服務使用,請將它放進服務的持久環境($OPENCLAW_STATE_DIR/.env,預設為 ~/.openclaw/.env),然後重新安裝,讓 launchd/systemd/Scheduled Tasks 讀取它。
使用私有 CA 的 HTTPS 代理端點
proxy.tls.caFile 會驗證代理端點自己的 TLS 憑證。它不是目的地 MITM 信任設定、用戶端憑證,也不是代理目的地政策的替代品。只有當整個 節點 程序必須從啟動時就信任額外 CA(例如企業 TLS 檢查系統重新簽署每個 HTTPS 目的地憑證)時,才改用 NODE_EXTRA_CA_CERTS;該變數是程序全域的,而且必須在 節點 啟動前設定,因此 OpenClaw 無法像套用 proxy.tls.caFile 那樣在執行中套用它。HTTPS 代理端點信任請優先使用 proxy.tls.caFile:它的作用範圍限定於受管理的代理路由,而不是整個程序。
路由運作方式
在proxy.enabled: true 且 URL 有效時,受保護的執行階段程序(openclaw gateway run、openclaw node run、openclaw agent --local)會透過代理路由一般 HTTP 與 WebSocket 對外流量:
fetch、undici 支援的用戶端、node:http/node:https、常見的 WebSocket 用戶端,以及由輔助工具建立的 CONNECT 通道,並且會取代呼叫端提供的 節點 HTTP agent,因此明確指定的 agent(包括 axios、got、node-fetch,以及類似以 節點 agent 為基礎的用戶端)無法默默繞過代理。
代理 URL scheme 描述的是從 OpenClaw 到代理的那一跳,而不是到最終目的地:
http://proxy.example:3128— 以純 TCP 連到代理;OpenClaw 會傳送 HTTP 代理請求,包括 HTTPS 目的地使用的CONNECT。https://proxy.example:8443— OpenClaw 會對代理本身開啟 TLS(驗證代理的憑證),然後在該 session 中傳送 HTTP 代理請求。
CONNECT 通道,並透過該通道啟動目的地 TLS。
代理啟用時,OpenClaw 會清除 no_proxy/NO_PROXY。這些繞過清單是以目的地為基礎;若將 localhost 或 127.0.0.1 留在其中,會讓 SSRF 目標完全略過代理。關閉時,OpenClaw 會還原先前的代理環境,並重設已快取的路由狀態。
有些外掛擁有自訂傳輸,即使程序層級路由已啟用,也需要自己的代理接線。Telegram 的 Bot API 用戶端使用自己的 HTTP/1 undici dispatcher,並另外遵循程序代理環境加上 OPENCLAW_PROXY_URL 備援。
閘道 loopback 模式
local loopback WebSocket 例如ws://127.0.0.1:18789。proxy.loopbackMode 會控制該流量是否繞過受管理的代理:
| 模式 | 行為 |
|---|---|
gateway-only(預設) | OpenClaw 會將作用中的閘道 loopback authority 註冊為直接連線例外,因此 local 閘道 WebSocket 流量會不經代理直接連線。自訂 loopback 連接埠可正常運作,因為例外會鎖定精確設定的主機/連接埠。內建瀏覽器外掛會為 OpenClaw 啟動的受管理瀏覽器之精確 local CDP 就緒狀態與 DevTools WebSocket URL,註冊相同類型的例外;內建 Ollama 記憶體 embedding provider 則針對其精確設定的主機 local loopback embedding origin,提供較窄且受防護的直接路徑。 |
proxy | 不會註冊任何 loopback 例外;閘道與 Ollama loopback 流量會經由代理。遠端代理必須能路由回 OpenClaw 主機的 loopback 服務(例如透過可到達的主機名稱、IP 或通道),標準遠端代理會針對自身解析 127.0.0.1/localhost,而不是針對 OpenClaw 主機解析。 |
block | OpenClaw 會在開啟 socket 之前,拒絕閘道 loopback 控制平面連線,以及受防護的 Ollama loopback embedding 連線。 |
localhost 與字面 loopback IP URL — 請使用 ws://127.0.0.1:18789、ws://[::1]:18789 或 ws://localhost:18789。其他主機名稱會像一般流量一樣路由。
容器
對於openclaw --container ... 命令,當 OPENCLAW_PROXY_URL 已設定時,OpenClaw 會將它轉送到以容器為目標的子命令列介面。該 URL 必須能從容器內部到達 — 那裡的 127.0.0.1 指的是容器本身,而不是主機。OpenClaw 會拒絕以容器為目標的命令使用 loopback 代理 URL,除非你設定 OPENCLAW_CONTAINER_ALLOW_LOOPBACK_PROXY_URL=1 以明確覆寫該檢查。
相關代理術語
proxy.enabled/proxy.proxyUrl— 執行階段對外流量的出站正向代理路由。本頁。gateway.auth.mode: "trusted-proxy"— 用於閘道存取的入站身分感知反向代理驗證。請見受信任代理驗證。openclaw proxy— 用於開發與支援的 local 除錯代理與擷取檢查器。請見 openclaw proxy。tools.web.fetch.useTrustedEnvProxy— 讓web_fetch可選擇使用操作者控制的 HTTP(S) 環境代理來解析 DNS,同時預設保留嚴格 DNS pinning 與主機名稱政策。請見 Web fetch。- 通道或 provider 專用代理設定 — 單一傳輸的 owner 專用覆寫。若要在整個執行階段集中控制對外流量,請優先使用受管理的網路代理。
驗證代理
代理的目的地政策才是真正的安全邊界;OpenClaw 無法驗證你的代理是否封鎖了正確目標。請將其設定為:- 僅綁定到 loopback 或私有受信任介面,且只有 OpenClaw 程序/主機/容器/服務帳戶能到達。
- 自行解析目的地,並在 DNS 解析後、連線時,針對純 HTTP 與 HTTPS
CONNECT通道都依 IP 封鎖。 - 拒絕以目的地為基礎的繞過,範圍包括 loopback、私有、link-local、metadata、multicast、保留與文件範圍。
- 避免使用主機名稱允許清單,除非你完全信任 DNS 解析路徑。
- 記錄目的地、決策、狀態與原因 — 絕不記錄請求 body、授權標頭、cookie 或其他秘密。
- 將政策納入版本控制,並將變更視為安全敏感項目審查。
| 旗標 | 用途 |
|---|---|
--proxy-url <url> | 驗證此 URL,而不是解析 config/env。 |
--proxy-ca-file <path> | HTTPS 代理端點的 CA bundle。 |
--allowed-url <url> | 預期會成功的目的地(可重複)。 |
--denied-url <url> | 預期會被封鎖的目的地(可重複)。 |
--apns-reachable | 也驗證代理可以透通直接的沙盒 APNs HTTP/2 探測。 |
--apns-authority <url> | 覆寫以 --apns-reachable 探測的 APNs authority。 |
--timeout-ms <ms> | 每個請求的逾時時間。 |
--json | 機器可讀輸出。 |
proxy.enabled 不是 true,且未提供 --proxy-url,此命令會回報設定問題而不是執行驗證;在變更設定前,請傳入 --proxy-url 進行一次性預檢。
如果沒有 --allowed-url/--denied-url,預設檢查為:https://example.com/ 必須成功,而且代理不得連到一個暫時的 loopback canary 伺服器,該連線必須被封鎖。loopback 檢查會在傳輸失敗時通過,或在非 2xx 回應且缺少該 canary 每次執行 token 時通過;如果收到缺少 token 的 2xx 回應(來自 canary 以外來源的非預期成功)則失敗,尤其是任何帶有相符 token 的回應都會失敗,因為這證明代理實際上轉送了一個本應拒絕的 loopback 目的地。自訂 --denied-url 目標沒有這種 canary token,因此採 fail-closed:任何 HTTP 回應都算作可連線(失敗),而傳輸錯誤會回報為不確定,而不是已證明被封鎖,因為 OpenClaw 無法確認你的代理是拒絕了可連線來源,還是其他地方出錯。--apns-reachable 會傳送刻意無效的 provider token,因此 403 InvalidProviderToken 回應可作為通道已連到 Apple 的證明。此命令在任何驗證失敗時以 1 結束;代理 URL 認證資訊會同時從文字與 JSON 輸出中遮蔽。
curl 檢查(公開請求應成功;loopback 與 metadata 請求應由代理本身封鎖,單靠 curl 無法像 openclaw proxy validate 的內建 canary 那樣區分代理拒絕與來源無法連線):
建議封鎖的目的地
任何正向代理、防火牆或輸出政策的初始 denylist。OpenClaw 自身的 SSRF 分類器位於src/infra/net/ssrf.ts 與 packages/net-policy/src/ip.ts(BLOCKED_HOSTNAMES、BLOCKED_IPV4_SPECIAL_USE_RANGES、BLOCKED_IPV6_SPECIAL_USE_RANGES、RFC 2544 benchmark 前綴,以及 NAT64/6to4/Teredo/ISATAP/IPv4-mapped 形式的嵌入式 IPv4 處理),是有用的參考,但 OpenClaw 不會在你的外部代理中匯出或強制執行這些規則。
| 範圍或主機 | 封鎖原因 |
|---|---|
127.0.0.0/8, localhost, localhost.localdomain | IPv4 loopback |
::1/128 | IPv6 loopback |
0.0.0.0/8, ::/128 | 未指定/本網路位址 |
10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 | RFC 1918 私有網路 |
169.254.0.0/16, fe80::/10 | link-local,包含常見雲端 metadata 路徑 |
169.254.169.254, metadata.google.internal | 雲端 metadata 服務 |
100.64.0.0/10 | 電信級 NAT 共用位址空間 |
198.18.0.0/15, 2001:2::/48 | benchmark 範圍 |
192.0.0.0/24, 192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24, 2001:db8::/32 | special-use 與文件範圍 |
224.0.0.0/4, ff00::/8 | multicast |
240.0.0.0/4 | 保留 IPv4 |
fc00::/7, fec0::/10 | IPv6 本機/私有範圍 |
100::/64, 2001:20::/28 | IPv6 discard 與 ORCHIDv2 範圍 |
64:ff9b::/96, 64:ff9b:1::/48 | 含嵌入式 IPv4 的 NAT64 前綴 |
2002::/16, 2001::/32 | 含嵌入式 IPv4 的 6to4 與 Teredo |
::/96, ::ffff:0:0/96 | IPv4-compatible 與 IPv4-mapped IPv6 |
限制
| 表面 | 受管理代理狀態 |
|---|---|
fetch, node:http, node:https, common WebSocket clients | 設定後會透過受管理代理 hook 路由。 |
| APNs direct HTTP/2 | 透過 APNs 受管理的 CONNECT 輔助工具路由。 |
| Gateway control-plane loopback | 僅針對確切設定的 local loopback 閘道 URL 直接連線。 |
| Debug proxy upstream forwarding | 受管理代理模式啟用時會停用,除非為本機診斷明確啟用。 |
| IRC | 原始 TCP/TLS;不會由受管理 HTTP 代理模式代理。如果你的部署要求所有輸出都經過正向代理,請設定 channels.irc.enabled: false。 |
Other raw net, tls, or http2 client calls | 登陸前必須由原始 socket guard 分類。 |
- 這是 JavaScript HTTP/WebSocket 用戶端的程序層級覆蓋,而不是作業系統層級的網路沙盒。
- 原始
net、tls、http2socket、native addons,以及非 OpenClaw 子程序可能會繞過節點層級路由,除非它們繼承並遵守代理環境變數。分叉的 OpenClaw 子命令列介面會繼承受管理代理 URL 與proxy.loopbackMode狀態。 - 使用者本機 WebUI 與本機模型伺服器不受一般本機網路旁路涵蓋;如有需要,請在 operator proxy policy 中將它們加入 allowlist。例外是 bundled Ollama memory embedding provider 的受保護直接路徑,其範圍限於其設定
baseUrl的確切 host-local loopback origin;LAN、tailnet、private-network 與 public Ollama 主機仍會使用受管理代理。 - 本機 debug proxy 的直接 upstream forwarding(用於代理請求與
CONNECT通道)在受管理代理模式啟用時預設停用;僅針對已核准的本機診斷啟用。 - OpenClaw 不會檢查、測試或認證你的代理政策。請將代理政策變更視為安全敏感的營運變更。