跳转到主要内容

Tailscale(Gateway 网关仪表盘)

OpenClaw 可以为 Gateway 网关仪表盘和 WebSocket 端口自动配置 Tailscale Serve(tailnet)或 Funnel(公共)。这使 Gateway 网关保持绑定到 loopback,同时 Tailscale 提供 HTTPS、路由和(对于 Serve)身份头。 This keeps the Gateway bound to loopback while Tailscale provides HTTPS, routing, and (for Serve) identity headers.

模式

  • serve:仅限 Tailnet 的 Serve,通过 tailscale serve。Gateway 网关保持在 127.0.0.1 上。 The gateway stays on 127.0.0.1.
  • funnel:通过 tailscale funnel 的公共 HTTPS。OpenClaw 需要共享密码。 OpenClaw requires a shared password.
  • off:默认(无 Tailscale 自动化)。

认证

设置 gateway.auth.mode 来控制握手:
  • token(设置 OPENCLAW_GATEWAY_TOKEN 时的默认值)
  • password(通过 OPENCLAW_GATEWAY_PASSWORD 或配置的共享密钥)
tailscale.mode = "serve"gateway.auth.allowTailscaletrue 时, 有效的 Serve 代理请求可以通过 Tailscale 身份头(tailscale-user-login)进行认证,无需提供令牌/密码。OpenClaw 通过本地 Tailscale 守护进程(tailscale whois)解析 x-forwarded-for 地址并将其与头匹配来验证身份,然后才接受它。 OpenClaw 仅在请求从 loopback 到达并带有 Tailscale 的 x-forwarded-forx-forwarded-protox-forwarded-host 头时才将其视为 Serve 请求。 要要求显式凭证,设置 gateway.auth.allowTailscale: false 或强制 gateway.auth.mode: "password"。 OpenClaw verifies the identity by resolving the x-forwarded-for address via the local Tailscale daemon (tailscale whois) and matching it to the header before accepting it. OpenClaw only treats a request as Serve when it arrives from loopback with Tailscale’s x-forwarded-for, x-forwarded-proto, and x-forwarded-host headers. To require explicit credentials, set gateway.auth.allowTailscale: false or force 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 设备连接:
  • 控制 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 servetailscale funnel 配置,设置 gateway.tailscale.resetOnExit
  • gateway.bind: "tailnet" 是直接 Tailnet 绑定(无 HTTPS,无 Serve/Funnel)。
  • gateway.bind: "auto" 优先 loopback;如果你想要仅 Tailnet,使用 tailnet
  • Serve/Funnel 仅暴露 Gateway 网关控制 UI + WS。节点通过相同的 Gateway 网关 WS 端点连接,因此 Serve 可以用于节点访问。 节点通过 同一个 Gateway WS 端点连接,因此 Serve 可以用于节点访问。

浏览器控制(远程 Gateway 网关 + 本地浏览器)

如果你在一台机器上运行 Gateway 网关但想在另一台机器上驱动浏览器, 在浏览器机器上运行一个节点主机并让两者保持在同一个 tailnet 上。 Gateway 网关会将浏览器操作代理到节点;不需要单独的控制服务器或 Serve URL。 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 应用变体。

了解更多