谁会遇到问题:已能跑起 OpenClaw Gateway,但不想让 18789 挂在公网,又希望笔记本、CI 与常驻机都在同一可信小网里用 CLI/通道完成握手。本文结论:把 gateway.bind收敛到 tailnet 语义,并用 Tailscale ACL 明确谁可对谁开放 18789;验证顺序遵循 openclaw gateway status → 尾网 ping → 最小对话。结构与分工:与《Nginx/Caddy 反代与 TLS》《Cloudflare Tunnel + systemd》形成三角——分别覆盖公网 TLS 入口、出站隧道、以及纯尾网零公网暴露;Compose 内细节仍回《Docker Compose 配对》《远程 Mac 零信任接入》。
*:* 或宽泛 tag 让每台节点都能扫描 18789,等于只是把攻击面搬进尾网——尾网同样需要最小权限。loopback/lan/tailnet而不更新 CLI 侧的 GATEWAY_URL,会出现tailscale ping 成功但握手仍走旧地址。白板检查:尾网拓扑不是「省了防火墙」,而是把防火墙搬进 ACL hujson;《安全加固/CVE 响应》里的端口集合与密钥轮换纪律仍然适用——只是收口对象从 iptables/Nginx 换成了 tailnet。
| 暴露模型 | 适用前提 | 主要权衡 |
|---|---|---|
| 公网 + 反向代理与 TLS | 需要外部 SaaS webhook、移动办公跨网且无统一 agent。 | WAF/Cert/Let’s Encrypt/限流复杂度上升;参阅《反代清单》。 |
| Cloudflare Tunnel 等出站隧道 | 要隐藏源站 IP、又不想开入站端口映射。 | 依赖第三方 POP 与控制面;《Tunnel Runbook》。 |
tailnet-only + gateway.bind=tailnet |
团队已全员 tailnet enrolled;Gateway 运行在六国独占 Mac或可装 tailscale 的 Linux。 | ACL/tag 要写清;无 tailnet Client 的机器天然不可达≠不安全。 |
别把 tailnet 当「隐性 VPN 任意门」:一旦把网关设备 tag 设为过于通用的 group:dev 又允许全盘互 ping,复盘时你无法回答「那晚到底是谁连上过 18789」——每条 ACL 都应能对应到工单号。
最小闭环:**G**ateway 常驻节点(常为远程独占 Mac)、**O**perator 笔记本、必要时 **SR**subnet router。G 上 tailscale up 后仅向白名单 tags 通告 TCP 18789。O 侧 CLI 配置的 OPENCLAW_GATEWAY_URL 应写成 MagicDNS 名或 tailnet IPv4/v6,禁止使用已废弃的局域网入口如果你已声明「仅 tailnet」。
若 CI Runner 也需直连 Gateway,可把 Runner enrollment 在同一个 tailnet tag(例如tag:ci),并在 ACL 只允许 tag:ci -> tag:gateway 的单列端口;不要把 Runner 扔进「全能 dev」分组。
与六国远程基础设施组合时,《零信任 Tailscale/SSH 接入》提供 SSH/Tunnel 侧的决策矩阵;本条只在OpenClaw 网关端口语义上向前推进一步。
tailscale status记下 Hostname/IP;工单里只允许这些名字出现在 Runbook——避免口述「就是那台大阪机」。~/.openclaw/openclaw.json,容器则挂载同源卷)中将 gateway.bind 设为 tailnet 并复核 gateway.mode 是否与官方文档对齐;调整后只允许尾网前缀访问监听面。字段层级若随版本微调,请以当前发行日志为准。OPENCLAW_GATEWAY_TOKEN 与文件内gateway.auth.token择一并记录指纹;可参考《Compose 配对》中的双源对照表。openclaw gateway status → openclaw doctor;失败时截取尾网与控制面两侧同时间日志。curl -v --max-time 5 https://...或文档推荐的 WS 握手路径,再用最小对话脚本验证上下文未截断;《doctor 第一站》可辅助分诊。{
"gateway": {
"mode": "local",
"bind": "tailnet",
"port": 18789,
"auth": {
"mode": "token",
"token": "${OPENCLAW_GATEWAY_TOKEN}"
}
}
}
// ⚠️ 以上为示意:请用你的发行版的 schema 逐项校验;调整后务必重启网关进程或容器。
// ACL 示意:只允许 operator 访问 gateway 上的 Control/Gateway 端口 —— 请将 tag 改成你方命名规范
{
"groups": { "group:ops": ["[email protected]"] },
"tagOwners": { "tag:gateway": ["autogroup:admin"], "tag:ops": ["autogroup:admin"] },
"acls": [
{
"action": "accept",
"src": ["tag:ops"],
"dst": ["tag:gateway:18789"],
"proto": "tcp"
}
]
}
gateway healthy 但通道无响应——把MagicDNS 分流策略写进工单附录。睡眠、合盖、补丁重启与家用上行抖动会破坏可预测的 18789 SLA;同时个人隐私盘与网关日志混载增加取证难度。相对之下,独占、可巡检的六国 Apple Silicon远端 Mac更适合作为OpenClaw 常驻神经中枢。
Nginx 公钥暴露、Tunnel 出站、尾网收口三条路线可以同时存在不同环境档位,但每一条都必须有 RACI:MACCOME提供与远程 Mac/弹性租期匹配的硬件与出口稳定度,可把 tailnet ACL 条目写进和业务节点一致的工单——先对齐公开租赁价格与帮助中心,再回到绑定与冒烟。
若不能在白板上三分钟画清「谁对谁放通 18789」,就不值得直接改配置文件——否则下一任值班只能依赖 Magic。「tailnet-only」的目标是可复述的链路,不是口号。
下一跳:按需回到《Compose 配对》《反代 TLS》《Tunnel》《安全加固》;当你需要把 SLA 与地面节点绑定时再评估六国独占算力与经济租期。
常见问题
必须放弃 Docker 吗?
不必。容器只是把监听搬进了 netns,《Compose 配对篇》仍可复用——只要宿主 tailnet IP/DNS 与容器 publish 逻辑一致。
尾网就绪后仍能混用 SSH 跳板吗?
可以;《零信任远程 Mac 接入》给 SSH/Tunnel/直连决策;OpenClaw 层请保持TCP18789 ACL 独立条目不要与 22/tcp 混在一起写糊涂账。