Web interfaces
Web
Gateway は、Gateway WebSocket と同じポートから小規模な ブラウザー Control UI(Vite + Lit)を提供します。
- デフォルト:
http://<host>:18789/ gateway.tls.enabled: trueの場合:https://<host>:18789/- オプションのプレフィックス:
gateway.controlUi.basePathを設定(例:/openclaw)
機能については Control UI を参照してください。このページでは、バインドモード、セキュリティ、その他の Web 向けサーフェスについて説明します。
設定(デフォルトで有効)
アセット(dist/control-ui)が存在する場合、Control UI はデフォルトで有効です。
{ gateway: { controlUi: { enabled: true, basePath: "/openclaw" }, // basePath はオプション },}Webhook
hooks.enabled=true の場合、Gateway は同じ HTTP サーバー上で Webhook エンドポイントも公開します。認証とペイロードについては、Gateway 設定リファレンスの hooks を参照してください。
管理 HTTP RPC
POST /api/v1/admin/rpc は、選択された Gateway コントロールプレーンメソッドを HTTP 経由で公開します。デフォルトでは無効で、admin-http-rpc Plugin が有効な場合にのみ登録されます。認証モデル、許可されるメソッド、WebSocket API との比較については、管理 HTTP RPCを参照してください。
Tailscale アクセス
統合 Serve(推奨)
Gateway をループバックのままにして、Tailscale Serve でプロキシします。
{ gateway: { bind: "loopback", tailscale: { mode: "serve" }, },}Gateway を起動します。
openclaw gatewayhttps://<magicdns>/(または設定した gateway.controlUi.basePath)を開きます。
Tailnet バインド + トークン
{ gateway: { bind: "tailnet", controlUi: { enabled: true }, auth: { mode: "token", token: "your-token" }, },}Gateway を起動します(この非ループバックの例では共有シークレットによるトークン認証を使用します)。
openclaw gatewayhttp://<tailscale-ip>:18789/(または設定した gateway.controlUi.basePath)を開きます。
パブリックインターネット(Funnel)
{ gateway: { bind: "loopback", tailscale: { mode: "funnel" }, auth: { mode: "password" }, // または OPENCLAW_GATEWAY_PASSWORD },}tailscale.mode: "funnel" には gateway.auth.mode: "password" が必要です。Serve と Funnel はどちらも gateway.bind: "loopback" を必要とします。
セキュリティ上の注意
- Gateway 認証はデフォルトで必須です。有効にした場合、トークン、パスワード、信頼済みプロキシ、または Tailscale Serve の ID ヘッダーを使用できます。
- 非ループバックのバインドでも、Gateway 認証は必須です。トークン/パスワード認証、または
gateway.auth.mode: "trusted-proxy"を設定した ID 対応リバースプロキシを使用します。 - オンボーディングウィザードはデフォルトで共有シークレット認証を作成し、ループバック上でも通常は Gateway トークンを生成します。
- 共有シークレットモードでは、UI は WebSocket ハンドシェイク中に
connect.params.auth.tokenまたはconnect.params.auth.passwordを送信します。 gateway.tls.enabled: trueの場合、ローカルのダッシュボード/ステータスヘルパーはhttps://URL とwss://WebSocket URL を表示します。- ID を含むモード(Tailscale Serve、
trusted-proxy)では、WebSocket 認証チェックは共有シークレットではなくリクエストヘッダーによって満たされます。 - パブリックな非ループバック Control UI デプロイでは、
gateway.controlUi.allowedOriginsに完全なオリジンを明示的に設定してください。ループバック、RFC1918/リンクローカル、.local、.ts.net、および Tailscale CGNAT ホストからのプライベートな同一オリジン読み込みは、この設定がなくても受け入れられます。 gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback: trueは Host ヘッダーによるオリジンフォールバックを有効にします。これはセキュリティを危険な水準まで低下させます。- Serve を使用する場合、
gateway.auth.allowTailscale: trueであれば、Tailscale ID ヘッダーによって Control UI/WebSocket 認証が満たされます(トークン/パスワードは不要です)。HTTP API エンドポイントでは Tailscale ID ヘッダーは使用されず、常に Gateway の通常の HTTP 認証モードに従います。Serve 経由でも明示的な認証情報を必須にするには、gateway.auth.allowTailscale: falseを設定します。このトークンなしのフローでは、Gateway ホスト自体が信頼されていることを前提とします。Tailscaleおよびセキュリティを参照してください。
UI のビルド
Gateway は dist/control-ui から静的ファイルを提供します。
pnpm ui:build