Back

使用 Cloudflare Tunnel 安全地暴露本地服务

使用 Cloudflare Tunnel 安全地暴露本地服务

每个开发者都会遇到这样的场景:你在 localhost:3000 上构建了一个出色的应用,现在需要向地球另一端的客户展示它,或者测试来自第三方服务的 webhook。传统的端口转发会在防火墙上打开安全漏洞,暴露你的 IP 地址,并且需要复杂的路由器配置。动态 IP 让情况变得更糟——路由器重启一次,你的演示链接就失效了。

核心要点

  • Cloudflare Tunnel 创建安全连接,无需开放入站端口或暴露 IP 地址
  • 配置简单,自动提供 SSL 证书和 DDoS 防护
  • 非常适合客户演示、webhook 测试和移动开发,无需部署到预发布环境
  • 支持临时 URL 用于快速测试,免费套餐支持自定义域名(高级子域名或证书选项可能需要付费计划)

Cloudflare Tunnel:现代化的本地服务暴露方案

Cloudflare Tunnel 在你的本地开发服务器和 Cloudflare 全球网络之间创建安全连接,无需开放任何入站端口。你的应用可以通过自定义域名的 HTTPS 访问,受到 Cloudflare 安全基础设施的保护。

与需要公网服务器的传统反向代理设置不同,Cloudflare Tunnel 通过 cloudflared 守护进程使用纯出站连接。这意味着零路由器配置、自动 SSL 证书,并且没有暴露的攻击面。

Cloudflare Tunnel 的工作原理

可以把 Cloudflare Tunnel 想象成一条连接你的本地服务和 Cloudflare Zero Trust 网络的安全管道。cloudflared 客户端与 Cloudflare 边缘服务器建立加密的出站连接,然后边缘服务器通过该隧道反向代理传入的请求到你的本地应用。

流量流转如下:

  1. 访问者请求 https://demo.yourdomain.com
  2. Cloudflare 边缘网络接收请求
  3. 请求通过加密隧道传输到你的 cloudflared 守护进程
  4. 守护进程转发到你的本地应用(例如 localhost:3000)
  5. 响应通过相同的安全路径返回

快速设置:Cloudflared 安装与配置

步骤 1:安装 Cloudflared

Cloudflare 官方页面下载:

macOS:

brew install cloudflared

Linux: 你可以通过 Cloudflare 软件包仓库 ↗ 下载并安装 cloudflared。 或者,从上述链接直接下载最新版本。

Windows: 从下载页面下载 .msi 安装程序。

步骤 2:使用 Cloudflare 进行身份验证

cloudflared tunnel login

这会打开浏览器进行身份验证。选择你的域名,Cloudflare 会在本地保存凭证。

步骤 3:创建隧道

cloudflared tunnel create dev-tunnel

这会生成一个唯一的隧道 ID 和凭证文件,保存在 ~/.cloudflared/ 目录中。

步骤 4:配置路由

创建 ~/.cloudflared/config.yml:

tunnel: YOUR_TUNNEL_ID
credentials-file: /home/user/.cloudflared/YOUR_TUNNEL_ID.json

ingress:
  - hostname: demo.yourdomain.com
    service: http://localhost:3000
  - service: http_status:404

步骤 5:配置 DNS 路由

cloudflared tunnel route dns dev-tunnel demo.yourdomain.com

这会创建一条 CNAME 记录,将你的子域名指向隧道。

步骤 6:启动隧道

cloudflared tunnel run dev-tunnel

现在你的本地应用可以通过 https://demo.yourdomain.com 访问,并通过 Cloudflare 边缘网络自动提供 HTTPS 加密。

无需域名的快速测试

对于无需域名设置的快速原型开发:

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

这会生成一个临时 URL,如 https://random-words.trycloudflare.com,非常适合快速演示或 webhook 测试。

相比端口转发的安全优势

无需开放端口: 传统端口转发会在防火墙上打洞。Cloudflare Tunnel 通过纯出站连接保持安全性。

隐藏源 IP: 你的真实 IP 地址保持私密。攻击者无法直接针对你的家庭网络。

内置 DDoS 防护: 所有流量通过 Cloudflare 网络路由,自动过滤恶意请求。

Zero Trust 集成: 通过 Cloudflare Access 添加身份验证,要求用户登录后才能访问你的应用。

Web 应用测试的常见用例

  • 客户演示: 无需部署到预发布环境即可分享进行中的工作
  • Webhook 开发: 针对本地代码测试 Stripe、GitHub 或 Slack 的 webhook
  • 移动测试: 从手机和平板电脑访问本地开发服务器
  • 团队协作: 让远程开发者访问你的本地环境
  • API 开发: 暴露本地 API 用于第三方集成测试

将 Cloudflared 作为服务运行

对于需要在重启后持续运行的隧道:

Linux/macOS:

sudo cloudflared service install
sudo systemctl start cloudflared  # Linux
sudo launchctl start com.cloudflare.cloudflared  # macOS

Windows:

cloudflared service install

始终保持 cloudflared 更新到最新版本(cloudflared update),因为旧版本会出于安全原因定期弃用。

总结

Cloudflare Tunnel 将本地开发共享从安全噩梦转变为简单命令。不再需要端口转发、动态 DNS 服务或自签名证书警告。你的本地服务成为互联网上的一等公民——安全可访问、专业呈现,并受到企业级基础设施的保护。

从快速的 trycloudflare.com 选项开始测试,然后升级到自定义域名用于客户演示。你的本地开发环境现在和任何已部署的应用一样易于分享。

常见问题

可以,Cloudflare Tunnel 适用于生产部署。许多团队使用它将本地应用连接到互联网,而无需直接暴露服务器。它提供与开发用例相同的安全性和性能优势。

当连接恢复时,隧道会自动重新连接。Cloudflared 维护持久连接并优雅地处理网络中断。重新连接后你的隧道 URL 保持不变。

免费账户有适合开发和小型生产工作负载的慷慨限制。没有硬性带宽限制,但过度使用可能需要升级到付费计划以获得更好的性能和支持。

每个隧道需要绑定到 Cloudflare 账户的唯一凭证。对于团队协作,可以为每个开发者创建单独的隧道,或使用 Cloudflare Access 通过适当的身份验证管理共享隧道访问。

Understand every bug

Uncover frustrations, understand bugs and fix slowdowns like never before with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay