CFTunnels教程

使用 Cloudflare Tunnel 结合 Sing-box 实现无公网 IP 内网穿透

更新于 2026-08-13。Cloudflare 控制台的菜单名称可能继续调整,请以 Cloudflare Tunnel 官方文档 为准。

Cloudflare Tunnel(cloudflared) 会由源站主动建立到 Cloudflare 的出站连接,因此发布 HTTP/HTTPS 应用时不必为源站开放公网入站端口,也不要求源站拥有公网 IP。它并不能保证解决所有网络阻断,也不等于隐藏了账户、域名或 Cloudflare 可见的流量;使用前应确认业务符合 Cloudflare 服务条款。

本文配合当前维护的 Sing-box-EV 管理脚本演示。菜单编号会随版本变化,操作时应按菜单名称选择,不要照抄旧编号。


🛠️ 课前准备

  1. 一个 Cloudflare 账号,并且已经在 CF 托管了一个属于你的域名(例如 example.com)。
  2. 一台可运行 cloudflared 与 Sing-box-EV 的 Linux 主机,并已安装 Sing-box-EV

🟢 第一阶段:初始化 Zero Trust 控制台 (首次使用必看)

如果你是第一次使用 Cloudflare 的高级安全功能,你需要先激活 Zero Trust 专属面板。

  1. 登录 Cloudflare 主页,在左侧菜单栏找到并点击 Zero Trust
  2. 如果界面显示 **”Welcome to Cloudflare Zero Trust”**,请点击蓝色的 Get started (开始使用) 按钮。
  3. 按照向导提示,设置一个团队名称(Team domain),随意输入英文字母即可。
  4. 如果出现套餐选择,按实际需求选择 Free 或付费计划,并在确认页核对价格与功能。
  5. Cloudflare 的开户与支付要求会随账户、地区和产品变化。不要依据旧教程承诺“必然要求绑卡”或“绝对不会扣费”,以控制台当时显示的条款为准。
  6. 完成引导后进入 Zero Trust 控制台。

🟡 第二阶段:创建隧道并提取核心 Token

在这个专属的控制台中,我们将创建一条专属隧道,并获取脚本部署所需的核心凭证(Token)。

  1. 在 Cloudflare One / Zero Trust 控制台进入 Networks -> Connectors -> Cloudflare Tunnels;如果界面名称不同,可直接搜索 Tunnels
  2. 点击蓝色的 Add a tunnel (创建隧道) 按钮。
  3. 选择隧道类型:页面会提供两个选项,**必须点击左侧的 “Cloudflared (推荐)”**,切勿选择右侧的 WARP。
  4. 命名隧道:随意填写一个好记的名字(如 LPMG-Node),点击下一步/保存。
  5. 选择操作系统:在环境选择页面,点击 DebianUbuntu
  6. **🔑 提取通关密码 (Token)**:
    • 在页面下方会生成一个黑色的代码框,包含类似 sudo cloudflared service install eyJh... 的安装命令。
    • 推荐点击控制台提供的复制按钮,再按脚本提示粘贴 Token;不要依赖 Token 一定以某些字符开头,也不要手工截断。
    • Tunnel Token 是可运行该隧道的敏感凭据。 不要写入文章、截图、终端历史或公开 Issue;怀疑泄露时应立即在 Cloudflare 控制台轮换 Token。

🟠 第三阶段:在 VPS 终端一键部署节点

拿到 Token 后,剩下的脏活累活全部交给脚本自动完成。

  1. SSH 登录你的 Linux 服务器,输入命令 sb 打开 Sing-box-EV 管理面板。
  2. 输入 1 选择 **[添加配置]**。
  3. 在协议列表中找到 CFtunnel / Cloudflare Tunnel,按当前界面显示的序号选择。
  4. 分配端口:提示输入端口时,直接敲回车,脚本会为你自动分配一个 20000 以上的空闲内部端口。
  5. 输入 Token:根据提示,将你在第二阶段复制的 Tunnel Token 粘贴进去并回车。
  6. 填写备注:为节点起一个自定义备注(例如 LUOPOMG)。
  7. 🔔 牢记端口号:屏幕会打印绿色成功提示,并显示 “✅ CFtunnel 穿透守护服务 (关联内部端口: 61505) 已创建”。请务必记住这个五位数的端口号(本文以 61505 为例)。

🔴 第四阶段:配置公网域名路由 (打通任督二脉)

节点已经在 VPS 内部跑起来了,现在我们需要告诉 Cloudflare,把哪个域名的流量转发给这个内部端口。

  1. 回到刚才的 Cloudflare 网页端,点击右下角的 **下一步 (Next / 路由隧道)**。

  2. Public Hostnames (公共主机名) 页面,进行如下关键配置:

    • **Subdomain (子域名)**:随意填写前缀(如 www, node1, vless)。也可留空直接使用主域名。
    • **域 (Domain)**:下拉选择你在 CF 托管的域名(如 example.com)。
    • Path (路径)保持完全空白,什么都不要填!
  3. 在下方的 服务 (Service) 区块配置内部映射:

    • **类型 (Type)**:下拉选择 **HTTP**。(注意:即便跑的是 WS 流量,这里也必须选 HTTP)。
    • URL:填写 127.0.0.1:你的端口号localhost:你的端口号。(例如:**127.0.0.1:61505**)。
  4. 点击右下角的蓝色按钮 **完成设置 (Save hostname)**。


🚀 最终阶段:组合链接,完美起飞

你的终端脚本在部署完成后,会吐出一条包含模板字符的原始 VLESS 链接,类似这样:

vless://f917...2cc6a@你的CF绑定域名(需修改):443?encryption=none&security=tls&type=ws&host=你的CF绑定域名(需修改)&path=/f917...2cc6a#LUOPOMG

最后的组装

将链接中的 你的CF绑定域名(需修改) 替换为你在第四阶段配置的完整域名(例如 www.example.com)。

成品示例

vless://[email protected]:443?encryption=none&security=tls&type=ws&host=www.example.com&path=/f917...2cc6a#LUOPOMG

使用方法

复制完整链接后,导入到明确支持该 VLESS + WebSocket + TLS 参数组合的客户端。导入成功不代表链路一定可用或“完全隐匿”,仍需检查 Cloudflare Tunnel 状态、公开主机名、回源端口、WebSocket 路径以及客户端日志。

更新与排错

在服务器执行:

1
2
sb status
sb doctor

同时在 Cloudflare 控制台确认 Tunnel 为 Healthy,并检查 Public Hostname 的目标是否仍是正确的 http://127.0.0.1:端口。Cloudflare 官方说明:Tunnel 是源站到 Cloudflare 的出站连接;公开主机名用于把域名映射到本地 HTTP 服务。本文没有覆盖 Cloudflare Access 身份验证,如需公开管理后台,应另外配置 Access 策略,不能只依赖一个难猜的路径。