一条命令把本地服务挂上公网:Cloudflare Quick Tunnels 深度测评——以及"9月18日新品"背后的真相


大家好,我是Neo。

这两天刷到一篇传播挺广的文章,标题大意是“Cloudflare 推出 AI Agent 专用隧道,一条命令 3 秒钟搞定本地公网访问”,文中说 Cloudflare 在 9 月 18 日 发布了这个叫 Quick Tunnels 的工具,还配了对比表格,把它夸成“AI 编码 Agent 的必备神器”。

读起来很爽,但作为一个常年和 Cloudflare 打交道的人,我本能地觉得哪里不对——cloudflared tunnel --url 这条命令,我怎么记得好几年前就用过?

于是我干了件写稿前最该干的事:去核对一手信息。结果把 Cloudflare 官方博客 8、9 月的发布列表、官方文档、甚至 cloudflared 的源码都翻了一遍之后,发现这篇文章有一个硬伤:

9 月 18 日,Cloudflare 官方博客发的是《Saving another 100TB of RAM with math (and Rust)》——一篇讲内存优化的工程博客,压根没提隧道。Quick Tunnels 也不是什么新品,它是 2020 年 5 月就存在的老功能,官方名字叫 TryCloudflare。

所以今天这篇,我不打算复述那篇文章的赞美词,而是做一次深度核查:这个工具到底是不是真的好用?官方文档里哪些限制被软文略过了?以及,作为一个独立站站长,你什么时候真的用得上它。

一、事实核查:这不是新品,是“旧酒装新瓶”

先把时间线摆出来:

  • 2020 年 5 月:cloudflared 2020.5.1 版本加入 tunnel --url 参数,TryCloudflare 上线。不需要账号、不需要域名,一条命令生成随机 *.trycloudflare.com 公网地址——六年前的功能,和今天头条文章描述的一模一样。
  • 2026 年 8 月初:Cloudflare 举办 Agents Week 2026,连发十几篇围绕 AI Agent 的产品发布(Agent 身份、钱包、MCP 下一代协议等)。
  • 2026 年 6 月起:Cloudflare Sandbox SDK 把隧道封装成代码 API——sandbox.tunnels.get(port) 直接返回结构化的 JSON(URL、hostname、创建时间),AI Agent 写代码就能开隧道,不用解析终端日志。

所以准确的说法应该是:隧道技术本身六年没变,变的是“包装”和“叙事”——从“开发者免费试用工具”, rebranding 成了“AI Agent 基础设施”。

那篇文章说的“JSON 结构化输出”也不是凭空捏造,但它混用了两件事:TryCloudflare 的后端接口(api.trycloudflare.com)返回的本来就是 JSON(hostname + 密钥),这在 2020 年的源码里就有;真正新的是 2026 年围绕 Sandbox SDK 和 AI 编码 Agent(Claude Code、Codex、Cursor)的一整套产品化动作。

Neo的解读:这类“旧功能+新名词+具体日期”的拼接,是 AI 批量产稿时代最典型的信息失真。工具本身是真的,命令也是真的,但“9 月 18 日发布”这个时间点是编的——因为没有这个时间点,文章就不像“新闻”,没人转。你以后看到任何“某月某日某某发布”的爆款技术文,都值得花 30 秒去官方博客核一眼。

二、它到底怎么做到“一条命令”的

理解了原理,你才能判断它适不适合你的场景。

传统的“本地服务上公网”路径是:买服务器 → 配 DNS → 开防火墙入站端口 → 装 SSL 证书 → 配反向代理。每一步都是时间成本和运维负担。

Quick Tunnels 的做法完全反过来了:

  1. 你本地的 cloudflared 进程主动向外建立一条加密连接(QUIC 或 HTTP/2)到 Cloudflare 边缘节点;
  2. 连接建立后,它向 Cloudflare 申请一份临时凭证,换来一个随机子域名,比如 quiet-marble-otter-canyon.trycloudflare.com;
  3. 之后任何人访问这个 URL,请求先到 Cloudflare 边缘,再顺着这条已经存在的出站连接回流到你本地的 localhost:端口。

关键在于“出站”两个字:你的机器上没有打开任何入站端口,防火墙规则不用动,坐在 NAT 和运营商内网后面也能用。打个比方——传统方案是“开门迎客”,你得开门、登记、装防盗门;Quick Tunnels 是“你给前台打电话,前台转分机进来”,门从头到尾没开过。

这条加密隧道同时白嫖了 Cloudflare 的三样东西:全球边缘节点的自动 HTTPS、DDoS 防护、以及 335+ 城市的接入点。对临时演示来说,这套组合拳确实是免费的顶配。

三、官方文档里没大写特写的 6 条限制

软文只会告诉你“3 秒出 URL”,但 Cloudflare 官方文档的 FAQ 和 Limitations section 里白纸黑字写着这些(我逐条核对过,原文引用):

1. 仅限测试和开发,没有 SLA。 官方原话大意为:免费隧道是 Cloudflare 的“功能试验田”,我们不保证任何可用性,新功能会先在这些免费隧道上测试。把客户演示挂在这上面,演示当天挂了你没处说理。

2. 并发硬上限:200 个在途请求。 超过直接返回 429。对演示和个人项目够用,但对任何有真实流量的东西来说,这个 ceiling 低得不能再低。

3. 不支持 SSE(Server-Sent Events)。 这一条被几乎所有吹它的文章略过。2026 年了,大量 AI 应用靠流式输出吃饭,而 Quick Tunnels 不支持服务器推送事件——意味着你的 AI 聊天 demo 在它的隧道下很可能根本跑不通流式响应。

4. URL 每次重启都变。 cloudflared 进程一重启,随机子域名重新生成。你昨天在 Stripe 后台配好的 webhook 地址,今天全作废。

5. 零鉴权。 任何人拿到 URL 就能访问。随机子域名只是“难猜到”,不是访问控制——见下一节。

6. 配置文件冲突。 如果你的 ~/.cloudflared 目录里存在 config.yaml,Quick Tunnel 直接不支持,得临时改名。

四、安全 deep dive:公网可达 ≠ 安全

这是我认为最有必要补的一层,也是那篇文章完全没提的一层。

第一,开发服务器不是为公网设计的。 本地跑的服务默认信任“访问者是我自己”:Django 开着 DEBUG 会回显完整堆栈和配置;Vite/webpack 的 dev server 会把源码、sourcemap、HMR 端点暴露出去;不少人本地还挂着 phpinfo、数据库管理界面、甚至 .git 目录。把这样的服务用 Quick Tunnel 挂到公网,等于把家门钥匙插在门上——URL 只是难猜,不是不能遍历。

第二,AI Agent 自动开隧道是新的风险放大器。 当 Claude Code、Codex 这类编码 Agent 在“构建-测试-演示”循环里自己执行 cloudflared tunnel --url 时,人往往不会细看它暴露的是哪个端口。Agent 觉得你“让它把应用展示给你看”,于是开了隧道;但那个应用的后台接口、调试端点、测试数据,全都跟着上了公网。出站的便利是双向的:它方便了你,也方便了误操作。

第三,正确姿势其实很简单。 Cloudflare 的 Named Tunnel(命名隧道)+ Access(Zero Trust 鉴权层)是免费的:绑你自己的域名、URL 稳定、没有 200 并发和 SSE 的限制,还能给访问加一层登录鉴权(Google 账号、GitHub 账号、一次性验证码都行)。Quick Tunnels 负责“3 秒临时演示”,Named Tunnel + Access 负责“任何带真实数据的预览”。这个分工记牢,比记住那条命令重要得多。

五、横向对比:它是不是真的比 ngrok 强

那篇文章给的对比表几乎一边倒,我补一张更中立的:

维度 Cloudflare Quick Tunnels ngrok Tailscale Funnel zrok Named Tunnel + Access
注册账号 不需要 需要 需要(tailnet) 可自建 需要
费用 免费 免费版有限速+访客插页 免费档可用 开源免费 免费
访问鉴权 无 有 tailnet 身份体系 可配置 Zero Trust,强
稳定域名 无(重启即变) 付费才有 有 可配置 有(自己的域名)
并发上限 200 在途请求 免费版约数千/分钟 视节点 自建决定 无此限制
SSE 支持 不支持 支持 支持 支持 支持
适用场景 秒级临时演示 团队协作测试 已入 Tailscale 的团队 不想依赖第三方 半生产/带数据预览

评论区有个说法值得专门回应:“延迟太高,本质上和 Tailscale 的本地代理没啥区别。“这话一半对一半不对。对的一半:如果你的访问者就在你自己的设备生态里(手机+电脑都登录了同一个 tailnet),Tailscale Serve 确实更优——流量不绕公网,延迟低,还自带身份鉴权。不对的一半:Tailscale 解决的是”我自己访问我自己“,而 Quick Tunnels 解决的是“公网上任何一个陌生人访问我的本地服务“——给客户看 demo、接 Stripe webhook、让 WebPageTest 从新加坡节点测速,这些场景 Tailscale 帮不了你,除非对方也装客户端进你的 tailnet。

六、独立站站长什么时候真的用得上

抛开 AI 叙事的 hype,这几个场景对做独立站的人是实打实的:

  1. 给客户/老板演示未上线的改版。 设计稿吵三天,不如 3 秒发个真链接。看完关掉进程,隧道自动销毁。
  2. 支付和登录的 webhook 联调。 Stripe、PayPal、GitHub OAuth 的回调只认公网 HTTPS 地址,本地 localhost 它们根本不搭理。Quick Tunnels 是零成本方案;只是记住联调完要去第三方后台把回调地址删掉。
  3. 手机真机预览。 电脑上的开发版想让手机(蜂窝网络,非同 Wi-Fi)看一眼,隧道是最短路径。
  4. AI 编码 Agent 的“验收闭环”。 用 Claude Code / Codex 改完代码,让 Agent 自己开隧道,你点开链接验收——“改没改好”从描述问题变成了眼见为实。
  5. 多地域速度测试。 把 trycloudflare 地址丢给 Pingdom 或 WebPageTest,直接看全球各节点到你本地机器的链路表现(当然,这个表现包含了隧道的额外一跳,别当成生产数据)。

写在最后

Quick Tunnels 是个好东西,但它是“2020 年的好东西”。六年里它的命令没变、原理没变,变的只是 Cloudflare 给它换了个讲法——从“免费试用我们的隧道”变成“给 AI Agent 的基础设施”。这两件事本身都没问题,有问题的是中间那层转述:加上一个编造的发布日期,旧闻就成了新闻。

工具层面记住三句话就够了:临时演示用它,带数据的东西上 Named Tunnel + Access,开了隧道就默认全世界都能看见。

而信息层面,这次核查给我的提醒更大:AI 产稿时代,“具体的日期+权威的语气+真实的工具”组合出来的内容,迷惑性远超从前。你看到任何让你心潮澎湃的“新品发布”,先花 30 秒看看官方博客那天到底发了什么——这 30 秒,可能比那篇文章本身值钱。

我是Neo,咱们下篇见。