cftunnel:让内网穿透像喝水一样简单
本地开发时,外部回调总是个麻烦事
你有没有遇到过这种情况:本地跑着一个 API 服务,需要让外部系统回调过来测试。但是 NAT 穿透、端口转发、防火墙规则……光想想就头疼。
更麻烦的是,如果团队成员分布在不同地方,或者需要在手机上演示 Demo,总不能每次都让人家连 VPN 吧。
Cloudflare Tunnel 是个不错的解决方案,但原始配置命令一堆参数,记不住。每次新建隧道都要翻文档,效率太低。
cftunnel 就是来解决这个问题的——让你用最少的步骤,把本地服务暴露到外网。
一键隧道管理
cftunnel 本质上是对 Cloudflare Tunnel 的封装,把原本需要手动执行的命令简化成几个简单的操作。
核心思路很简单:
- 一键启动隧道 — 指定本地端口和外网域名,自动完成 Cloudflare Tunnel 的配置
- 隧道列表管理 — 查看当前运行的隧道状态,停止不再需要的隧道
- 配置文件驱动 — 把常用配置写成文件模板,不用每次都敲长命令
# 安装 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,社区反馈挺快的。