cftunnel 实战:用 Cloudflare Tunnel 一键打通内网与公网
痛点场景:本地开发环境的公网访问困境
你有没有遇到过这种情况:凌晨两点调试 Webhook,本地服务跑得好好的,却没法让外部服务回调过来?或者部署了一套内部工具,团队成员在不同网络环境下无法直接访问?
传统的内网穿透方案要么配置繁琐——你需要熟悉 SSH 隧道、Nginx 反向代理;要么存在安全隐患——暴露真实服务器 IP、端口容易被扫描攻击;要么就是贵——商业方案按流量或并发收费。
cftunnel 正是为解决这些痛点而来。
Cloudflare Tunnel 原生方案的局限
Cloudflare Tunnel(cloudflared)本身已经是一款优秀的工具,它通过在服务器和 Cloudflare 边缘节点之间建立加密隧道,将内网服务暴露到公网。相比直接暴露 IP + 端口的方式,它有以下优势:
- 真实服务器 IP 完全隐藏,攻击者只能看到 Cloudflare 边缘节点
- 自动 HTTPS 加密,无需操心证书配置
- 免费额度足够个人和小型团队使用
但原生的 cloudflared 存在几个问题:
- 配置文件格式晦涩,新手容易出错
- 多隧道管理不便,需要手动维护进程
- 没有统一的 Web 管理界面
- 与 OpenClaw 等平台集成困难
cftunnel 在此基础上做了减法,把"一键启动、图形管理、OpenClaw 集成"变成了开箱即用的体验。
核心原理:加密隧道的建立与流量转发
Cloudflare Tunnel 的工作原理可以概括为三个步骤:
用户请求 → Cloudflare 边缘节点 → 加密隧道 → cloudflared → 内网服务
具体流程如下:
- 隧道建立:在 Cloudflare 账号下创建一个命名的 Tunnel,获取 Tunnel UUID 和 Token
- 进程启动:本地或服务器上的 cloudflared 进程使用 Token 连接 Cloudflare 边缘节点
- 流量路由:外部请求到达边缘节点后,通过加密隧道转发给 cloudflared,再由它代理到实际的内网服务
cftunnel 做了两件事优化这个流程:
- 配置封装:将 YAML 配置转换为用户友好的参数,隐藏底层细节
- 进程管理:自动处理 tunnel 的启动、重启、状态监控
安装与快速上手
支持 Linux/macOS,一行命令搞定:
curl -fsSL https://raw.githubusercontent.com/openclaw/cftunnel/main/install.sh | bash
安装完成后,初始化配置:
cftunnel init
创建第一个隧道,只需一条命令:
cftunnel create my-tunnel -t your-tunnel-token -s localhost:3000
启动隧道:
cftunnel up my-tunnel
查看运行状态:
cftunnel status
配合 OpenClaw 使用,还能通过 Web 面板统一管理多个隧道和内网服务。
与同类工具横向对比
| 特性 | cftunnel | frp | ngrok | Cloudflare Tunnel (原生) |
|---|---|---|---|---|
| 费用 | 免费 | 免费(需自建服务器) | 免费版有限制 | 免费 |
| IP 隐藏 | ✅ | ❌ | ✅ | ✅ |
| 自定义域名 | ✅ | ✅ | ❌(免费版) | ✅ |
| 配置复杂度 | 低 | 中 | 低 | 中 |
| Web 管理界面 | ✅ | ❌ | ✅ | ❌ |
| OpenClaw 集成 | ✅ | ❌ | ❌ | ❌ |
核心差异在于:frp 需要自己维护中转服务器,ngrok 免费版限制颇多,而 cftunnel 在保留 Cloudflare Tunnel 安全优势的同时,大幅降低了使用门槛。
适用场景
- 本地开发调试:快速让 Webhook、回调服务可被外部访问
- 小型团队协作:无需暴露真实服务器 IP,安全共享内部工具
- OpenClaw 用户:配合 ClawPanel 管理,体验更流畅
- 边缘计算实验:将边缘节点的本地服务接入云端
如果你正在使用 Cloudflare,并且需要一个简单可靠的内网穿透方案,cftunnel 值得一试。版本 0.8.1 已经相当成熟,社区活跃度也在稳步上升。