在前后端联调、移动端真机测试、或是调试 Webhook 回调时,我们总会遇到同一个难题:如何让外网用户安全地访问我本地的端口(如 localhost:3000)?
传统做法要么是部署到测试服务器(太慢),要么是折腾路由器端口映射(不安全且受限于公网 IP)。虽然 ngrok 曾是这一领域的霸主,但随着 Cloudflare Tunnel 的普及,开发者们有了一个更安全、完全免费且无限制的新选择。
为什么我们需要"隧道"?
在远程办公和 AI 驱动开发的 2025 年,本地服务的快速共享已成为刚需:
- 协作演示: 临时写个 Demo 或原型,想发给异地的同事预览,而不是录屏或发截图。
- Webhook 调试: 开发支付接口(Stripe/微信支付)或 GitHub App 时,必须有一个公网 HTTPS URL 来接收回调。
- 移动端适配: 手机扫码直接访问电脑上的开发页面,测试触控体验。
- 安全合规: 在零信任(Zero Trust)架构下,我们希望关闭所有入站端口,仅允许受控的出站连接。
主流方案对决:ngrok vs. Cloudflare Tunnel
虽然两者都能实现内网穿透,但产品逻辑和成本结构截然不同:
| 维度 | ngrok (免费版) | Cloudflare Tunnel (Quick Share) |
|---|---|---|
| 易用性 | 极高,一键启动 | 极高,单命令行工具 |
| 稳定性 | 2 小时会话限制,超时断开 | 无时长限制 |
| 账号需求 | 必须注册并绑定 Token | 无需注册(使用 quick tunnel 模式) |
| 域名固定 | 随机生成的子域名 | 支持绑定自定义域名(需 CF 托管) |
| 网络性能 | 一般,带宽受限 | 极佳,基于 CF 全球 300+ 边缘节点 |
| 安全性 | 基础加密 | 强制 HTTPS,集成 Zero Trust 认证 |
结论: ngrok 适合一分钟的临时演示,而 Cloudflare Tunnel 则是长期开发和生产环境的首选方案。
技术原理:为什么它不需要公网 IP?
Cloudflare Tunnel 的核心是 "出站仅连接"(Outbound-only Connection) 模型。
- 建立连接: 当你运行
cloudflared时,它会主动向 Cloudflare 边缘节点发起四个持久化的出站连接(基于 QUIC 协议)。 - 无需打洞: 因为连接是"由内向外"发起的,你的防火墙会认为这是正常的流量,从而无需在路由器上开启任何入站端口。
- 智能路由: 用户请求你的公网 URL 时,流量会通过 Cloudflare 的 Argo Smart Routing 找到最快的路径,经由上述持久连接转发到你的本地端口。
- 安全屏障: 你的真实 IP 被隐藏在 Cloudflare 网络之后,同时自动享受了 DDoS 防护和 TLS 加密。
快速上手:三秒开启公网访问
如果你只是想快速分享一个本地端口(比如 3000),甚至不需要注册 Cloudflare 账号:
1. 安装工具
Mac OS & Linux 系统
brew install cloudflared
Windows 系统
winget install Cloudflare.cloudflared
2. 启动隧道
arduino
cloudflared tunnel --url http://localhost:3000
3. 获取链接
终端会输出一个类似 https://random-words-generated.trycloudflare.com 的地址,直接发给同事即可。
进阶技巧与潜在"坑点"
1. 域名固定与权限控制
如果你有 Cloudflare 托管的域名,可以通过配置文件将隧道映射到子域名(如 dev.yourdomain.com),并结合 Cloudflare Access 增加一层 GitHub/Google 登录验证,防止 Demo 被无关人员扫描。
2. 关于 QUIC 协议被运营商拦截
Cloudflare Tunnel 默认优先使用 QUIC (UDP) 协议。在某些内网环境或特定运营商下,UDP 可能会被 QOS 限制导致连接极慢。
解决方法: 强制使用 TCP 模式启动。
css
cloudflared tunnel --protocol http2 --url http://localhost:3000
3. 性能表现
虽然经过了中转,但得益于 Cloudflare 庞大的边缘网络,延迟通常在可接受范围内。但在国内部分地区,连接到 CF 海外节点的稳定性偶尔会有波动,这属于"公网环境"的常规挑战。
总结
Cloudflare Tunnel 彻底改变了本地开发服务的共享方式。它不仅解决了"能不能看"的问题,更通过"零信任"模型解决了"安不安全"的问题。
你在内网穿透过程中还遇到过哪些奇怪的坑?欢迎在评论区一起讨论。
本文使用 markdown.com.cn 排版