リモートアクセス

Tailscale

OpenClawは、GatewayダッシュボードとWebSocketポートに対してTailscale Serve(tailnet)またはFunnel(公開)を自動設定できます。これにより、Gatewayはループバックにバインドされたまま、TailscaleがHTTPS、ルーティング、および(Serveの場合)アイデンティティヘッダーを提供します。

モード

  • serve: tailscale serveによるTailnet専用のServe。ゲートウェイは127.0.0.1のままです。
  • funnel: tailscale funnelによる公開HTTPS。OpenClawは共有パスワードを必要とします。
  • off: デフォルト(Tailscale自動化なし)。

認証

gateway.auth.modeを設定してハンドシェイクを制御します:

  • tokenOPENCLAW_GATEWAY_TOKENが設定されている場合のデフォルト)
  • passwordOPENCLAW_GATEWAY_PASSWORDまたは設定による共有シークレット)

tailscale.mode = "serve"かつgateway.auth.allowTailscaletrueの場合、Control UI/WebSocket認証は、トークン/パスワードを提供せずにTailscaleアイデンティティヘッダー(tailscale-user-login)を使用できます。OpenClawは、x-forwarded-forアドレスをローカルのTailscaleデーモン(tailscale whois)経由で解決し、ヘッダーと一致することを確認してから受け入れます。OpenClawは、リクエストがTailscaleのx-forwarded-forx-forwarded-protox-forwarded-hostヘッダーと共にループバックから到着した場合にのみ、Serveとして扱います。HTTP APIエンドポイント(例:/v1/*/tools/invoke/api/channels/*)は引き続きトークン/パスワード認証を必要とします。このトークンレスフローは、ゲートウェイホストが信頼されていることを前提としています。信頼できないローカルコードが同じホストで実行される可能性がある場合は、gateway.auth.allowTailscaleを無効にし、代わりにトークン/パスワード認証を要求してください。明示的な認証情報を要求するには、gateway.auth.allowTailscale: falseを設定するか、gateway.auth.mode: "password"を強制します。

設定例

Tailnet専用(Serve)

{
  gateway: {
    bind: "loopback",
    tailscale: { mode: "serve" },
  },
}

開く:https://<magicdns>/(または設定したgateway.controlUi.basePath

Tailnet専用(Tailnet IPにバインド)

GatewayをTailnet IPで直接リッスンさせたい場合(Serve/Funnelなし)に使用します。

{
  gateway: {
    bind: "tailnet",
    auth: { mode: "token", token: "your-token" },
  },
}

別のTailnetデバイスから接続:

  • Control UI: http://<tailscale-ip>:18789/
  • WebSocket: ws://<tailscale-ip>:18789

注:このモードではループバック(http://127.0.0.1:18789)は動作しません

公開インターネット(Funnel + 共有パスワード)

{
  gateway: {
    bind: "loopback",
    tailscale: { mode: "funnel" },
    auth: { mode: "password", password: "replace-me" },
  },
}

パスワードをディスクに保存するよりもOPENCLAW_GATEWAY_PASSWORDの使用を推奨します。

CLI例

openclaw gateway --tailscale serve
openclaw gateway --tailscale funnel --auth password

注意事項

  • Tailscale Serve/Funnelには、tailscale CLIがインストールされ、ログインされている必要があります。
  • tailscale.mode: "funnel"は、公開露出を避けるため、認証モードがpasswordでない限り起動を拒否します。
  • シャットダウン時にtailscale serveまたはtailscale funnelの設定を元に戻したい場合は、gateway.tailscale.resetOnExitを設定してください。
  • gateway.bind: "tailnet"は直接のTailnetバインドです(HTTPSなし、Serve/Funnelなし)。
  • gateway.bind: "auto"はループバックを優先します;Tailnet専用にしたい場合はtailnetを使用してください。
  • Serve/FunnelはGateway control UI + WSのみを公開します。ノードは同じGateway WSエンドポイント経由で接続するため、Serveはノードアクセスにも機能します。

ブラウザ制御(リモートGateway + ローカルブラウザ)

Gatewayを1台のマシンで実行し、別のマシン上のブラウザを操作したい場合は、ブラウザマシン上でノードホストを実行し、両方を同じtailnet上に維持してください。Gatewayはブラウザの操作をノードにプロキシします;別個の制御サーバーやServe URLは必要ありません。ブラウザ制御にはFunnelを使用しないでください;ノードペアリングはオペレーターアクセスと同様に扱います。

Tailscaleの前提条件と制限

  • ServeにはtailnetでHTTPSが有効になっている必要があります;CLIは不足している場合にプロンプトを表示します。
  • ServeはTailscaleアイデンティティヘッダーを注入します;Funnelは注入しません。
  • FunnelにはTailscale v1.38.3以上、MagicDNS、HTTPS有効化、およびfunnelノード属性が必要です。
  • FunnelはTLS経由のポート443844310000のみをサポートします。
  • macOSでのFunnelには、オープンソースのTailscaleアプリバリアントが必要です。

詳細情報

リモートGateway設定形式検証(セキュリティモデル)