暴露像 OpenClaw 这样有执行能力的 agent 到公网,不要草率地只开放端口,而要借助成熟的 Zero Trust 平台来管理安全边界。
本文由叽歪同步助手自动同步而来,原文链接是: https://jefftian.dev/posts/zqag8tg778xwen0d 。🐾 在公网上优雅地暴露 OpenClaw Gateway(Cloudflare Tunnel + Zero Trust)
作者:哈德韦 · 程序员 · 技术博文 | 2026 年
本文将以真实工程场景出发,带你理解如何把一个只监听本机的 OpenClaw Gateway 安全地暴露到互联网,借助 Cloudflare Tunnel 和 Access 做 Zero Trust 保护,同时避免常见坑与安全误区。
今天在树莓派上安装了 OpenClaw,其支持的 Channel,没有一个是我平时在用的,有点小遗憾。我后面可能会开始研究和使用飞书,这样就能方便地随时随地鞭策自己的个人小助手了。不过,OpenClaw 有一个带界面的 Gateway,用浏览器就能使用,所以我暂时也不着急去研究飞书等其他的 Channel 了,就先用浏览器吧!
不过,要做到随时随地鞭策,就需要将它暴露在公网才行。我看到它内置了 tailscale 的支持,不过,我这次也没有使用它,我直接用了 Cloudflare Tunnel + Zero Trust ,最终实现了自己想要的效果。
当然,只有认证通过才能进入以上界面,我直接使用了默认的 Cloudflare ZeroTrust 样式,长这样:
OpenClaw 的设计哲学是安全优先:
- 默认只监听 127.0.0.1:18789,不对公网开放。
- Gateway 默认要求 认证(token/password) 才允许 WebSocket 连接。
- 如果简单把端口放到公网,就像把家门钥匙贴在门上:外人只需一份日志就能控制你的 agent。 :contentReference[oaicite:0]{index=0}
OpenClaw 官方建议:
“Keep the Gateway loopback-only unless you’re sure you need remote exposure.” :contentReference[oaicite:1]{index=1}
“不暴露端口,反向代理 + Tunnel + Zero Trust”才是现代做法。
| 痛点 | 传统做法 | 风险 | 更佳方案 |
|---|---|---|---|
| Gateway 只监听本地 | 修改 bind=0.0.0.0 | 开放公网端口风险大 | 保持 loopback + Tunnel |
| 需要远程访问 | SSH + 端口转发 | 复杂、不稳定 | Cloudflare Tunnel |
| 需要身份认证 | 单纯 token | token 可能泄露 | Cloudflare Access + trusted proxy |
| 安全策略 | Gateway auth | 缺乏 Zero Trust | Cloudflare Zero Trust + auth |
┌───────────────────┐ Client —->│ Cloudflare Access │ (OAuth / SSO 登录)
GPT plus 代充 只需 145 └───────▲───────────┘ │ │ HTTPS │ ┌───────┴───────────┐ │ Cloudflare Tunnel │ (反向代理到 localhost) └───────▲───────────┘ │ │ Loopback │ 127.0.0.1:18789 <-- OpenClaw Gateway</code></pre></div><p data-pid="n0xeiNwt">这套架构的核心理念是:</p><ol><li data-pid="ZzbSxEaL"><b>Gateway 只在本机监听</b>(安全边界明确)<br/></li><li data-pid="PfUZ33ZZ"><b>Cloudflare Tunnel 负责公网入口</b><br/></li><li data-pid="xVcLzmUX"><b>Cloudflare Access 做 Zero Trust 登录认证</b><br/></li><li data-pid="iuNFe3FO">只有经过 Access 的请求才能通过 Tunnel 再到 Gateway</li></ol><p data-pid="nWTo2B28">安全路径就像一条“安全栈”:只有通过每层校验的请求才能真正到达终点。</p><hr/><p data-pid="m67BVick">默认配置即可:</p><div class="highlight"><pre><code class="language-text">openclaw gateway start</code></pre></div><p data-pid="Iktxm9Mh">输出应该显示:</p><div class="highlight"><pre><code class="language-text">Gateway: bind=loopback (127.0.0.1), port=18789</code></pre></div><p data-pid="IC8rD5D-">这意味着只有本机能访问。</p><hr/><p class="ztext-empty-paragraph"><br/></p><figure data-size="normal"><img src="https://pic1.zhimg.com/v2-6c72fda270e766ae2d544ea_r.jpg" data-caption="" data-size="normal" data-rawwidth="2656" data-rawheight="1160" data-original-token="v2-cb141abd2bdf7090e5cfc22121" class="origin_image zh-lightbox-thumb" width="2656" data-original="https://pic1.zhimg.com/v2-6c72fda270e766ae2d544ea_r.jpg"/></figure><p class="ztext-empty-paragraph"><br/></p><p data-pid="yaKqbxMW">前往 Zero Trust → Tunnels → 创建一个 Tunnel,指向:</p><div class="highlight"><pre><code class="language-text">localhost:18789</code></pre></div><p data-pid="Zttd4whE">将域名设置为你的公网域名:</p><div class="highlight"><pre><code class="language-text">openclaw.your-domain.net</code></pre></div><p data-pid="BU-ayq9i">这样所有请求都会被 Cloudflare 接管。<br/></p><figure data-size="normal"><img src="https://pic1.zhimg.com/v2-4f3ca9ca91583f6dd9296beb6_r.jpg" data-caption="" data-size="normal" data-rawwidth="2570" data-rawheight="628" data-original-token="v2-47e918f6d75654c426e50cbe54e005c5" class="origin_image zh-lightbox-thumb" width="2570" data-original="https://pic1.zhimg.com/v2-4f3ca9ca91583f6dd9296beb6_r.jpg"/></figure><p class="ztext-empty-paragraph"><br/></p><p data-pid="whdXkaI0">Tip:确认 DNS 成功 CNAME 指向 Cloudflare Tunnel。<br/>Cloudflare 会在后台显示 Tunnel 健康状态是否正常。</p><hr/><p data-pid="5kl2S7PB">在 Zero Trust → Access → Applications 中:</p><ul><li data-pid="wGDI0-ra">添加你的域名 <code>openclaw.your-domain.net</code></li><li data-pid="DjSFPMKF">选择登录策略(比如 Google / GitHub 登录)<br/>我这里对接了 Azure AD、<span class="invisible">http://</span><span class="visible">Authing.cn</span><span class="invisible"></span> 以及 Cloudflare 自带的邮箱验证码登录策略,一共3个:<br/></li></ul><figure data-size="normal"><img src="https://pic1.zhimg.com/v2-7ba11cadff0a46d01d5ea5f4_r.jpg" data-caption="" data-size="normal" data-rawwidth="2732" data-rawheight="1504" data-original-token="v2-46263d5de0fe075314fb287f" class="origin_image zh-lightbox-thumb" width="2732" data-original="https://pic1.zhimg.com/v2-7ba11cadff0a46d01d5ea5f4_r.jpg"/></figure><p class="ztext-empty-paragraph"><br/></p><ul><li data-pid="V6aIqw5s">把访问限制到指定邮件/组<br/>我目前只允许自己一个人使用:</li></ul><figure data-size="normal"><img src="https://pic3.zhimg.com/v2-a1663acdb9607a26ee9e73ad009cb4a4_r.jpg" data-caption="" data-size="normal" data-rawwidth="2358" data-rawheight="1692" data-original-token="v2-ea53a2b03bbf76c31507c8fa" class="origin_image zh-lightbox-thumb" width="2358" data-original="https://pic3.zhimg.com/v2-a1663acdb9607a26ee9e73ad009cb4a4_r.jpg"/></figure><p class="ztext-empty-paragraph"><br/></p><p data-pid="oV1-d4ng">这样,当用户访问这个 URL 时,Cloudflare 会要求登录。</p><hr/><p data-pid="jkkpGnpi">打开你的 <code>~/.openclaw/openclaw.json</code>,添加:</p><div class="highlight"><pre><code class="language-text">{
“gateway”: {
"bind": "loopback", "trustedProxies": ["127.0.0.1"]
} }
解释:
trustedProxies: 只信任来自本机的代理
完成后重启 Gateway:
GPT plus 代充 只需 145openclaw gateway restart
所以去掉 token 后 Gateway 会无法启动。
- 请确保 Gateway 绑定为
loopback,不要使用0.0.0.0监听。 - 使用 Cloudflare Access 做强认证,而不要简单依赖 token。
- 如果非要让代理把客户端 IP 传给 Gateway,务必配置
trustedProxies。 - 避免直接将 OpenClaw Gateway 端口暴露给公网。
| 步骤 | 关键点 |
|---|---|
| ① 启动 Gateway | 绑定本地、不要对公网开放基本端口 |
| ② 建立 Tunnel | 将公网域名到本机端口的安全隧道 |
| ③ 设 Zero Trust | 登录/策略控制 |
| ④ 网关信任代理 | 通过 trusted proxy 传递身份 |
| ⑤ 安全审计 | 定期检查 config + audit |
暴露像 OpenClaw 这样有执行能力的 agent 到公网,不要草率地只开放端口,而要借助成熟的 Zero Trust 平台来管理安全边界。Cloudflare 提供了全球流量入口 + Access 认证 + Tunnel 安全转发,是一个既成熟又实用的方案。
有问题欢迎留言,我们一起把这个博客做成开放式实践指南。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/216029.html