cftunnel:让内网穿透像喝水一样简单

本地开发时,外部回调总是个麻烦事

你有没有遇到过这种情况:本地跑着一个 API 服务,需要让外部系统回调过来测试。但是 NAT 穿透、端口转发、防火墙规则……光想想就头疼。

更麻烦的是,如果团队成员分布在不同地方,或者需要在手机上演示 Demo,总不能每次都让人家连 VPN 吧。

Cloudflare Tunnel 是个不错的解决方案,但原始配置命令一堆参数,记不住。每次新建隧道都要翻文档,效率太低。

cftunnel 就是来解决这个问题的——让你用最少的步骤,把本地服务暴露到外网。

一键隧道管理

cftunnel 本质上是对 Cloudflare Tunnel 的封装,把原本需要手动执行的命令简化成几个简单的操作。

核心思路很简单:

  1. 一键启动隧道 — 指定本地端口和外网域名,自动完成 Cloudflare Tunnel 的配置
  2. 隧道列表管理 — 查看当前运行的隧道状态,停止不再需要的隧道
  3. 配置文件驱动 — 把常用配置写成文件模板,不用每次都敲长命令
# 安装 cftunnel
curl -fsSL https://raw.githubusercontent.com/你的repo/cftunnel/main/install.sh | sh

# 启动一个本地隧道的简单示例,将本地 3000 端口暴露为 example.cftunnel.dev
cftunnel run --local-port 3000 --subdomain example

就这么简单,你的本地服务就能通过 https://example.cftunnel.dev 访问了。

技术原理

Cloudflare Tunnel 的工作原理是:在你的机器上运行一个 cloudflared 守护进程,它会与 Cloudflare 边缘节点建立持久连接。当外部请求到达时,Cloudflare 通过这个连接把流量转发到你的本地服务。

用户请求 → Cloudflare 边缘节点 → cloudflared 隧道 → 你的本地服务

cftunnel 在这层之上做了一层抽象:

  • 自动注册隧道名称,避免手动创建 tunnel ID 的繁琐
  • 进程管理,后台运行、开机自启变得简单
  • 日志聚合,把 tunnel 的日志统一输出,方便排查问题

和传统方案比

内网穿透工具不少,frp、ngrok、花生壳……为什么选 cftunnel?

工具 需要付费 配置复杂度 稳定性和速度
cftunnel / Cloudflare Tunnel 依赖 Cloudflare 全球节点
ngrok 免费版 高级功能付费 有并发限制
frp 高(需自建服务器) 取决于你的服务端

Cloudflare 的全球 CDN 覆盖意味着延迟通常比自建 frp 服务器低。对于 OpenClaw 用户来说,如果你想让产出的内容支持外网访问,配合 Cloudflare Tunnel 可以稳定地把服务暴露出去,而且完全免费。

快速上手

# 1. 先登录 Cloudflare(首次需要)
cftunnel login

# 2. 启动一个隧道,暴露本地 8080 端口
cftunnel run -p 8080 -s myservice

# 3. 查看当前活跃的隧道
cftunnel list

# 4. 停止某个隧道
cftunnel stop myservice

配置文件也可以这样写:

tunnels:
  - name: myblog
    local_port: 3000
    subdomain: myblog
    # 可选:指定 Cloudflare 账号
    account_email: your@email.com

然后一行命令启动:

cftunnel start myblog

适合谁用

  • 前端/后端开发者:快速分享本地 demo 给同事或客户
  • 独立开发者:展示作品集或博客,无需购买服务器
  • OpenClaw 用户:把产出的内容通过隧道分享出去

如果你已经在用 Cloudflare 的服务(比如域名解析、CDN),cftunnel 基本是零成本接入。没有服务器、没有端口转发、没有防火墙配置,你的本地机器直接连上 Cloudflare 的网络。

项目地址在 GitHub,版本 0.8.1,当前 272 Stars,还在活跃维护中。遇到问题可以提 Issue,社区反馈挺快的。