Protected Quick Tunnels:给开发预览链接加上免账号邮箱验证

**原文标题:** Protected Quick Tunnels: simple accountless authentication for your next dev project **作者:** Nikita Cano、Hugo Vicente、Alessandro Frigerio **来源:** Cloudflare Blog,2026 年 10 月 2 日 **原文:** https://blog.cloudflare.com/protected-quick-tunnels/

临时隧道方便分享,也会把服务公开

Cloudflare Quick Tunnels 的用途,是把本机开发环境里运行的服务临时变成一个可访问的网址。通常只需运行一条命令:


cloudflared tunnel --url http://localhost:5173

cloudflared 会通过随机的 trycloudflare.com 地址转发到本地端口。无需注册 Cloudflare 账号、准备域名或付费,适合把尚在开发中的页面发给同事查看,也适合让手机访问家中电脑上的开发服务。对代码代理而言,它同样提供了一个从本地端口快速获得 URL 的方式。

但传统 Quick Tunnel 的链接本身就是访问入口:拿到链接的人都能打开服务。若本地应用包含私人资料、调试接口或尚未完善的功能,单纯“链接不公开”并不是访问控制。

从 cloudflared 2026.9.3 开始,可以使用 --allowed-mail 给 Quick Tunnel 加上邮箱允许名单。访问者通过 Cloudflare Access 收到一次性 PIN 并证明自己控制相应邮箱;访问者和隧道发起者都不需要 Cloudflare 账号。

只允许指定邮箱或域名访问

指定一个邮箱的示例:


cloudflared tunnel --url http://localhost:8080 \
  --allowed-mail alice@example.com

Alice 打开隧道网址,输入邮箱,再输入发到收件箱的一次性验证码,通过后才会到达本地应用。其他访问者会在请求到达开发者机器之前被拦截。整个过程不需要创建 DNS 记录、编写配置文件或打开控制台。

可重复传入参数,允许多个邮箱;也可以用通配域名规则:


cloudflared tunnel --url http://localhost:8080 \
  --allowed-mail alice@example.com \
  --allowed-mail bob@example.com \
  --allowed-mail '*@example.com'

未设置 --allowed-mail 时,Quick Tunnel 的原有公开行为不变。要调整允许名单,停止当前 cloudflared 进程并启动一个新隧道;进程一旦退出,当前隧道的所有访问会话也随之结束。

若需要固定主机名或身份提供方群组等更丰富的规则,应使用 Cloudflare Tunnel 搭配 Cloudflare Access。若要从个人设备访问家中的代理,同时避免公开 URL 并建立双向连接,文章建议使用 Cloudflare Mesh。

也可以从 Wrangler 启动

使用 Workers 的开发者可以从最新版 Wrangler 启动受保护的 Quick Tunnel:


npx wrangler tunnel quick-start http://localhost:8080 \
  --allowed-mail alice@example.com

Wrangler 支持重复传入参数、逗号分隔的值和通配域名;它也会从调试日志中移除 --allowed-mail 的值。

对于代码代理,可以把默认规则写进它读取的指令文件,例如 AGENTS.md:


When you start a Quick Tunnel, always add --allowed-mail me@example.com.

之后代理创建预览隧道时就能按这条规则添加邮箱限制。不过,代理可能没有遵循指令,因此仍应查看实际启动命令。cloudflared 会说明隧道是否启用邮箱验证以及包含多少条规则,但不会打印具体邮箱地址。

邮箱认证与访问授权分别在哪里完成

受保护网址的访问过程分成“确认来访者是谁”和“判断此人是否在允许名单中”两步。Cloudflare Access 负责验证邮箱:访问者输入邮箱并使用发送到该邮箱的一次性 PIN 登录。这个步骤只证明访问者控制这个邮箱,不决定该邮箱是否获准访问。

允许名单保存在运行 cloudflared 的开发者机器上,由本地连接器作出授权判断。这样既复用了 Access 处理邮件送达、滥用防护、安全挑战、会话管理、可访问的登录页和多语言体验等认证能力,也避免了为每条短暂运行的 Quick Tunnel 单独创建 Cloudflare Access 应用和策略。原文指出,Quick Tunnel 数量很大,许多只运行几分钟;为它们逐一建立账号归属和策略空间并不合适。

设计还满足几个约束:Quick Tunnel 仍然免账号;未启用保护的公开隧道请求路径保持原样;用户登录后不必在每次请求时访问中央策略服务;开发者在终端输入的邮箱地址也应受到保护。

为此,Cloudflare Access 验证邮箱后,一个运行在 Cloudflare Workers 上的小型认证代理会把已验证身份转换成短时、带签名的交接凭证。代理按无状态方式运行,不保存隧道策略、访客会话或身份记录,也看不到隧道的允许名单。随后 cloudflared 在内存中校验凭证,并依照开发者输入的规则自行授权。Cloudflare 知道这个隧道要求邮箱认证,但不会知道开发者邀请了哪些人。

首次访问时的请求流程

受保护隧道仍以免账号方式创建;cloudflared 额外发送的只有认证模式,不发送邮箱规则。如果服务端未确认该模式,cloudflared 会拒绝启动,避免意外创建一个实际公开的 URL。

访客首次打开链接时,流程如下:

  1. cloudflared 发现请求没有会话,将浏览器重定向至 login.trycloudflare.com。重定向携带与该浏览器绑定的随机一次性状态值,有效期为 10 分钟。
  2. Cloudflare Access 向访客邮箱发送一次性 PIN 并验证邮箱。
  3. 认证代理检查 Access 身份,返回一个短时签名断言,并将其绑定到隧道主机名和上述状态值。浏览器通过表单 POST 提交断言,所以断言不会进入 URL、浏览历史或日志。
  4. cloudflared 校验断言、消耗该状态值,再将邮箱与本地规则匹配。匹配时创建本地会话并把访客送回原请求页面;不匹配时返回通用响应,不泄露允许名单内容。
  5. 后续请求可复用会话,最长四小时;如果访客的 Access 登录更早过期,会话也会提前结束。停止 cloudflared 同样会结束会话。

会话 Cookie 只含随机值和到期时间,不包含访客身份。cloudflared 会在把请求转发到本地应用前移除认证凭证,所以应用无需接收这些凭证,也不必自行实现登录流程。任何校验失败都会使请求止步于隧道入口;受保护的隧道不会退回公开模式。

快速开始

文章给出的最短示例是安装或更新 cloudflared、启动本地服务,再执行:


cloudflared tunnel --url http://localhost:8080 --allowed-mail you@example.com

邮箱保护与 Quick Tunnels 本身一样免费。--allowed-mail 的配置细节、匹配规则和限制应以原文关联的 Quick Tunnels 文档为准;本文不展开未在原文中列出的规则。

**版本提示:** 邮箱保护从 cloudflared 2026.9.3 开始提供。以上命令、产品能力和收费说明均来自原文所述版本与时间点。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
相关推荐
评论 抢沙发

请登录后发表评论

    暂无评论内容