Skip to main content
OpenClaw 可以为 Gateway 仪表盘和 WebSocket 端口自动配置 Tailscale Serve(tailnet)或 Funnel(公网)。这样可以让 gateway 绑定到回环地址,同时由 Tailscale 提供 HTTPS、路由,以及(对于 Serve)身份标头。
需要分步设置指南?请参阅为 Gateway 提供稳定的 HTTPS URL

模式

gateway.tailscale.mode: 状态和审计输出会针对这种 OpenClaw Serve/Funnel 模式使用 Tailscale 暴露off 表示 OpenClaw 不管理 Serve 或 Funnel;这并不意味着本地 Tailscale 守护进程已停止或已登出。

配置示例

仅限 Tailnet(Serve)

打开:https://<magicdns>/(或你配置的 gateway.controlUi.basePath 要通过命名的 Tailscale Service 而不是设备主机名来暴露 Control UI,请将 gateway.tailscale.serviceName 设置为 Service 名称:
启动后会报告该 Service URL 为 https://openclaw.<tailnet-name>.ts.net/,而不是设备主机名。Tailscale Services 要求主机必须是你 tailnet 中已批准的带标签节点——在启用此功能之前,请先配置标签并在 Tailscale 中批准该 Service,否则 tailscale serve --service=... 会在 gateway 启动期间失败。

仅限 Tailnet(绑定到 Tailnet IP)

使用此方式可让 gateway 直接监听 Tailnet IP,不使用 Serve/Funnel:
从另一台 Tailnet 设备连接原生客户端或 CLI 客户端:
  • WebSocket:ws://<tailscale-ip>:18789
不要在浏览器 Control UI 中使用直接的纯 HTTP 地址。远程纯 HTTP 无法创建浏览器设备身份,而令牌/密码身份验证无法替代这一点。请使用 Tailscale Serve 访问 Control UI。
当存在可绑定的 Tailnet IPv4 时,Gateway 还需要 http://127.0.0.1:18789 以便经过身份验证的同主机客户端使用。如果启动时没有可用的 Tailnet 地址,它会回退为仅绑定 loopback;在 Tailscale 可用后重新启动,即可添加直接的 Tailnet 访问。两种路径都不会带来 LAN 或公网暴露。

公共互联网(Funnel + 共享密码)

建议使用 OPENCLAW_GATEWAY_PASSWORD,不要将密码提交到磁盘。

CLI 示例

身份验证

gateway.auth.mode 控制握手方式:

Tailscale 身份头(仅适用于 Serve)

tailscale.mode: "serve"gateway.auth.allowTailscaletrue 时,Control UI/WebSocket 身份验证可以使用 Tailscale 身份头(tailscale-user-login)而不是令牌/密码。OpenClaw 会通过本地 Tailscale 守护进程(tailscale whois)解析请求的 x-forwarded-for 地址,并在接受请求之前将其与该头中的登录名进行匹配,从而验证该头。只有当请求来自回环地址,并携带 Tailscale 的 x-forwarded-forx-forwarded-protox-forwarded-host 头时,才符合此路径的条件。 这种无令牌流程默认主机是受信任的。如果同一主机上可能运行不受信任的本地代码,请改为设置 gateway.auth.allowTailscale: false,并要求使用令牌/密码认证。 绕过的适用范围:
  • 适用于 Control UI WebSocket 身份验证界面,以及 Control UI 配置文件头像的只读 GET/HEAD 请求。其他 HTTP API 端点(/v1/*/tools/invoke/api/channels/* 等)绝不会使用 Tailscale 身份头身份验证;它们始终遵循网关的常规 HTTP 身份验证模式。
  • 对于已经携带浏览器设备身份的 Control UI 操作员会话,经过验证的 Tailscale 身份可以跳过引导令牌/二维码配对往返流程。
  • 它不会绕过设备身份验证本身:没有设备身份的客户端仍会被拒绝,节点角色连接仍会经过正常的配对和身份验证检查。

说明

  • Tailscale Serve/Funnel 需要已安装并登录的 tailscale CLI。
  • tailscale.mode: "funnel" 会拒绝启动,除非认证模式是 password,以避免公开暴露。
  • gateway.tailscale.serviceName 仅适用于 Serve 模式,并会传递给 tailscale serve --service=<name>。该值必须使用 Tailscale 的 svc:<dns-label> 格式,例如 svc:openclaw。Tailscale 要求 Service 主机必须是带标签的节点,并且该 Service 在 Serve 进行发布前可能需要管理员控制台批准。
  • gateway.tailscale.resetOnExit 会在关闭时撤销 tailscale serve/tailscale funnel 配置。
  • gateway.tailscale.preserveFunnel: true 会在网关重启期间保持外部配置的 tailscale funnel 路由持续生效。使用 mode: "serve" 时,OpenClaw 会在重新应用 Serve 之前检查 tailscale funnel status,如果已有 Funnel 路由覆盖网关端口,则会跳过。OpenClaw 管理的仅密码策略的 Funnel 不受影响。
  • gateway.bind: "tailnet" 使用直接 Tailnet 绑定(无 HTTPS、无 Serve/Funnel),并在可用 Tailnet IPv4 时同时要求本地 127.0.0.1;否则会退回到仅 loopback。
  • gateway.bind: "auto" 优先使用 loopback;使用 tailnet 可将网络暴露限制在 Tailnet 内,同时保留同主机 loopback 访问。
  • Serve/Funnel 仅暴露 Gateway 控制界面 + WS。节点通过相同的 Gateway WS 端点连接,因此 Serve 也可用于节点访问。

Tailscale 前置条件和限制

  • Serve 需要为你的 tailnet 启用 HTTPS;如果缺少该项,CLI 会提示。
  • Serve 会注入 Tailscale 身份标头;Funnel 不会。
  • Funnel 需要 Tailscale v1.38.3+、MagicDNS、已启用 HTTPS,以及 funnel 节点属性。
  • Funnel 仅支持通过 TLS 的端口 443844310000
  • macOS 上的 Funnel 需要开源版 Tailscale 应用变体。

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

要在一台机器上运行 Gateway,但在另一台机器上控制浏览器,请在浏览器所在机器上运行一个 node host,并确保两者位于同一个 tailnet 中。Gateway 会将浏览器操作代理到该节点;不需要单独的控制服务器或 Serve URL。 请避免将 Funnel 用于浏览器控制;将 node 配对视为操作员访问。

了解更多

相关内容