Gateway 导读

Tailscale Serve/Funnel 一键配好,网关不用暴露端口

OpenClaw 能自动配置 Tailscale Serve(仅 tailnet)或 Funnel(公网 HTTPS),让网关始终绑定在 loopback,由 Tailscale 处理 HTTPS 和路由。选 Serve 模式时,控制台和 WebSocket 可以免 token 直接用 Tailscale 身份头认证,但 API 端点仍走普通共享密钥认证——注意这个信任假设,如果宿主机上可能运行不可信代码,记得关掉 allowTailscale 强制用 token。

先讲这一页到底在解决什么

Tailscale Serve/Funnel 一键配好,网关不用暴露端口

OpenClaw 能自动配置 Tailscale Serve(仅 tailnet)或 Funnel(公网 HTTPS),让网关始终绑定在 loopback,由 Tailscale 处理 HTTPS 和路由。选 Serve 模式时,控制台和 WebSocket 可以免 token 直接用 Tailscale 身份头认证,但 API 端点仍走普通共享密钥认证——注意这个信任假设,如果宿主机上可能运行不可信代码,记得关掉 allowTailscale 强制用 token。

原文共 12 节,先看 Start Here 路径:/gateway/tailscale 查看官方原文

第一步

🚍 三种模式,像三种开门方式

别一看到 Tailscale 就想着“能远程了”。先分清你到底是给谁开门。

🏠

serve

像只给自家尾网成员开的接驳车。Gateway 还待在 127.0.0.1,但尾网里的人能走 HTTPS 进来。

📣

funnel

像把一个展台开到公网门口。风险更高,所以官方强制你至少带共享密码。

😴

off

默认就是关着。没有自动 Tailscale 接驳。

🎈

一句话

serve 是尾网专用接驳车,funnel 是公开展台。

第二步

🔐 Auth 这一段,其实是在讲“到门口以后还要怎么验票”

用了 Tailscale,不等于就完全不要认证。官方很仔细地区分了不同场景。

gateway.auth.mode: "token"

像进门时还要出示共享令牌。是最常见那种“有票才能进”。

gateway.auth.mode: "password"

像大门口还要说暗号。特别是公网 Funnel,官方要求必须这样更稳。

gateway.auth.allowTailscale: true

像门卫会信任 Tailscale 发来的身份牌。对 Control UI 和 WebSocket 来说,尾网身份头就能当一部分通行证。

🚫 但不是所有门都免票

官方特别提醒:HTTP API 这些门还是要 token 或 password。也就是说,Tailscale 身份头不是万能通行证。

第三步

🏠 Tailnet-only Serve,像“楼还是锁在家里,但家人有专属接驳入口”

这是最像官方推荐主路的用法。Gateway 自己不跑到外面去,还是待在 loopback。

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

像说:“大门继续锁在家里,但请 Tailscale 帮我在尾网里做一个安全前台。”

打开地址

官方给的意思是:之后你可以走 MagicDNS 那个 HTTPS 地址进来,而不是非要死盯本机地址。

为什么舒服

因为 HTTPS、路由、身份头这些外层工作,都交给 Tailscale。Gateway 本体不用硬撑在公网门口。

第四步

📍 直接绑 Tailnet IP,像“把门直接开在尾网街区”

这不是 Serve/Funnel,而是另一种更直接的路。

bind: "tailnet"

像不再通过接驳车中转,而是直接把门开在 Tailscale 那条街上。

🔑 这时更要自己带认证

官方示例里直接写了 token,因为这时候不是借 Serve 的那套包装壳了。

⚠️ 记住那句提示

你开成 tailnet 以后,本机 127.0.0.1 那条路就不是原来那种用法了。不要还拿旧地址去试。

第五步

📣 Funnel 像“把展台摆到公共广场上”,所以官方才死命强调密码

只要看到 Funnel,就自动把安全警惕心拉高一档。

tailscale: { mode: "funnel" }

像告诉 Tailscale:“把这个入口公开出去。”

auth: { mode: "password" }

像官方直接要求你在公开展台前再加一层口令门,不允许裸奔。

📌 为什么文档这么凶

因为一旦到公网,你面对的就不只是自家尾网成员。官方宁愿你麻烦一点,也不让你图省事把整扇门敞开。

🏷 最好别把密码写死

官方还顺手提醒你,优先用环境变量,不要把密码直接抄在磁盘账本上。

第六步

🛠 CLI 命令像什么?像让接驳车司机现场切模式

这两条命令不用背参数学问,把它们看成“现场开关模式”就行。

🚍

openclaw gateway --tailscale serve

像对司机说:“今天开尾网专线接驳车。”

📣

openclaw gateway --tailscale funnel --auth password

像说:“今天开公开展台,但一定把口令门也立上。”

🧹

resetOnExit

像演出散场后,要不要把临时搭的展台和路标顺手拆掉。

🎈

一句话

命令不是玄学,就是在切换接驳模式。

第七步

🧷 前置条件和限制,像“这条接驳车不是哪里都能开”

官方最后列了一堆前提,别嫌烦。这些通常就是为什么你照抄却跑不起来的根源。

Serve 要求

得先有 Tailscale CLI,而且它已经登录。HTTPS、MagicDNS 这些基础设施也得就位。

Funnel 更挑

版本、端口、节点属性、macOS 应用形态都有限制。它不是“随便一台机器都能开公开展台”。

浏览器控制建议

如果 Gateway 和浏览器不在同一台机器,官方更建议用 node host 代理浏览器动作,不要把 Funnel 当万能遥控器。

最后总结

🎈 把 Tailscale 这页压成一句最好记的话

最舒服的主路通常是 serve:Gateway 继续缩在本地回环口,Tailscale 帮你做安全接驳。funnel 是公开展台,只适合你真的知道自己在把什么暴露到外面时再开。

如果你下一步还是要继续抠字段,那就回配置参考页;如果你准备实际远程连上控制台,就从 Serve 模式先试。