- デフォルト:
http://<host>:18789/ gateway.tls.enabled: trueを使用する場合:https://<host>:18789/- 任意のプレフィックス:
gateway.controlUi.basePathを設定(例:/openclaw)
設定(デフォルトで有効)
アセットが存在する場合(dist/control-ui)、Control UI はデフォルトで有効です。
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(推奨)
- Tailnet バインド + トークン
- パブリックインターネット(Funnel)
Gateway を loopback 上に維持し、Tailscale Serve でプロキシします。Gateway を起動します。
https://<magicdns>/(または設定した gateway.controlUi.basePath)を開きます。セキュリティ上の注意
- Gateway 認証はデフォルトで必須です。有効な方式は、トークン、パスワード、信頼済みプロキシ、または有効化されている場合の Tailscale Serve ID ヘッダーです。
- 非 loopback バインドでも Gateway 認証は必須です。トークン/パスワード認証、または
gateway.auth.mode: "trusted-proxy"を備えた ID 対応リバースプロキシを使用してください。 - オンボーディングウィザードは、デフォルトで共有シークレット認証を作成し、loopback 上でも通常は 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 認証チェックは共有シークレットではなく、リクエストヘッダーによって満たされます。 - 公開された非 loopback Control UI デプロイでは、
gateway.controlUi.allowedOriginsを明示的に設定してください(完全なオリジン)。loopback、RFC1918/link-local、.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 から静的ファイルを提供します。