メインコンテンツへスキップ

Tailscale(Gatewayダッシュボード)

OpenClawは、GatewayダッシュボードとWebSocketポート向けに、TailscaleのServe(tailnet)またはFunnel(公開)を自動設定できます。これにより、Gatewayをloopbackにbindしたまま、TailscaleがHTTPS、ルーティング、および(Serveでは)IDヘッダーを提供します。

モード

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

認証

ハンドシェイクを制御するにはgateway.auth.modeを設定します:
  • none(プライベートingressのみ)
  • tokenOPENCLAW_GATEWAY_TOKENが設定されている場合のデフォルト)
  • passwordOPENCLAW_GATEWAY_PASSWORDまたは設定による共有シークレット)
  • trusted-proxy(ID認識型リバースプロキシ。Trusted Proxy Authを参照)
tailscale.mode = "serve"かつgateway.auth.allowTailscaletrueの場合、 Control UI/WebSocket認証では、トークン/パスワードを渡さずにTailscaleのIDヘッダー (tailscale-user-login)を使用できます。OpenClawは、x-forwarded-forアドレスをローカルのTailscaleデーモン(tailscale whois)で解決し、それをヘッダーと照合してから受け入れることで、IDを検証します。 OpenClawは、リクエストがloopbackから到着し、かつTailscaleのx-forwarded-forx-forwarded-protox-forwarded-hostヘッダーを持つ場合にのみ、それをServeとして扱います。 HTTP APIエンドポイント(たとえば/v1/*/tools/invoke/api/channels/*)は、TailscaleのIDヘッダー認証を使用しません。これらは引き続きgatewayの通常のHTTP認証モードに従います。デフォルトでは共有シークレット認証で、意図的に設定されたtrusted-proxy / private-ingressのnone構成も可能です。 このトークン不要フローは、gatewayホストが信頼されていることを前提としています。同じホスト上で信頼できないローカルコードが実行される可能性がある場合は、gateway.auth.allowTailscaleを無効にし、代わりにtoken/password認証を必須にしてください。 明示的な共有シークレット認証情報を必須にするには、gateway.auth.allowTailscale: falseを設定し、gateway.auth.mode: "token"または"password"を使用してください。

設定例

tailnet専用(Serve)

{
  gateway: {
    bind: "loopback",
    tailscale: { mode: "serve" },
  },
}
開く: https://<magicdns>/(または設定したgateway.controlUi.basePath

tailnet専用(Tailnet IPにbind)

GatewayをTailnet IPで直接listenさせたい場合に使用します(Serve/Funnelなし)。
{
  gateway: {
    bind: "tailnet",
    auth: { mode: "token", token: "your-token" },
  },
}
別のTailnetデバイスから接続:
  • Control UI: http://<tailscale-ip>:18789/
  • WebSocket: ws://<tailscale-ip>:18789
注: このモードではloopback(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でない限り起動を拒否します。
  • 終了時にOpenClawがtailscale serveまたはtailscale funnel設定を元に戻すようにしたい場合は、gateway.tailscale.resetOnExitを設定してください。
  • gateway.bind: "tailnet"は直接のTailnet bindです(HTTPSなし、Serve/Funnelなし)。
  • gateway.bind: "auto"はloopbackを優先します。tailnet専用にしたい場合はtailnetを使用してください。
  • Serve/Funnelが公開するのはGateway control UI + WSのみです。ノードは同じGateway WSエンドポイント経由で接続するため、Serveはノードアクセスにも利用できます。

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

Gatewayをあるマシンで実行しつつ、別のマシン上のブラウザーを操作したい場合は、 ブラウザーマシン上でnode hostを実行し、両方を同じtailnet上に置いてください。 Gatewayはブラウザー操作をそのノードへプロキシするため、別個の制御サーバーやServe URLは不要です。 ブラウザー制御にFunnelは避けてください。ノードのペアリングは運用者アクセスとして扱ってください。

Tailscaleの前提条件と制限

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

詳しく見る