cftunnel: 一键管理 Cloudflare Tunnel 的开源解决方案

痛点场景:当内网服务需要公网访问时

想象一下这个场景:你本地跑着一个 Web 服务或者开发文档服务器,想临时分享给外网的同事或者客户测试。传统的做法是配置复杂的反向代理,或者购买昂贵的内网穿透服务。如果恰好你的服务器已经部署了 Cloudflare,Cloudflare Tunnel 是一个零成本的选择——但每次通过官方命令管理隧道,需要记忆一长串参数,体验并不友好。

cftunnel 正是为解决这个痛点而生:它将 Cloudflare Tunnel 的常用操作封装成简洁的命令行工具,让隧道管理变得像编辑配置文件一样简单。

cftunnel 核心原理

Cloudflare Tunnel 的本质是在你的机器与 Cloudflare 边缘节点之间建立一条加密长连接。客户端程序(cloudflared)负责与 Cloudflare API 通信,创建隧道并保持心跳。

cftunnel 在此基础上做了两件事:

  1. 封装官方 API:它通过调用 Cloudflare API 完成隧道的创建、删除、列出等操作,无需手动拼接复杂的 curl 命令
  2. 本地配置管理:将每个隧道的配置文件保存在本地目录,方便版本管理和批量部署

当你执行 cftunnel create 时,工具会:

  • 调用 Cloudflare API 创建新隧道,获取 tunnel_id
  • 自动生成配置文件(config.yml)
  • 启动 cloudflared 进程连接隧道
# 创建一条新隧道并自动启动
cftunnel create my-service http://localhost:8080

# 查看当前所有隧道状态
cftunnel list

# 删除指定隧道
cftunnel delete tunnel_id

与传统方案的对比

特性 cftunnel 原生 cloudflared 其他内网穿透工具
配置方式 YAML + 命令行 纯命令行参数 各有不同
多隧道管理 统一视图 需手动追踪 视工具而定
SSH 隧道支持 原生支持 需额外配置 不支持
配置文件版本化 支持 不支持 视工具而定

值得强调的是,cftunnel 对 SSH 隧道的原生支持是亮点。在传统方案中,如果你想把内网的 SSH 服务暴露出去,需要手动配置 ssh.yaml 并理解复杂的协议转换逻辑。cftunnel 将这个过程简化到一条命令:

cftunnel create-ssh my-ssh ssh://localhost:22

安装与快速上手

目前 cftunnel 提供了多平台安装包,主流方式是直接下载二进制文件:

# Linux/macOS 一键安装
curl -fsSL https://raw.githubusercontent.com/your-repo/cftunnel/main/install.sh | bash

# 验证安装
cftunnel --version
# 输出: cftunnel version 0.8.1

安装完成后,你需要准备 Cloudflare 账号的 API Token(可在 Cloudflare Dashboard 的 API Tokens 页面创建):

# 初始化配置
cftunnel init

# 按提示输入 API Token 和默认域名

适用场景

cftunnel 特别适合以下场景:

  • 个人开发者:快速将本地开发的服务分享给远程同事或客户
  • 小型团队:通过 Cloudflare Zero Trust 统一管理多台机器的访问权限
  • 测试环境:临时暴露内网服务进行外部集成测试

如果你已经在使用 Cloudflare 但觉得官方 tunnel 管理体验繁琐,cftunnel 是一个值得尝试的轻量替代方案。