Cloudflare Tunnel 实现优选
老虎不发喵-你当我
编辑于 2025年07月22日 19:24

精通 Cloudflare Tunnel:结合 SaaS 实现域名优选加速终极指南


这份指南基于你的实践笔记整理而成,旨在提供一个清晰、可复现的操作流程,帮助用户利用 Cloudflare Tunnel 和 Cloudflare for SaaS 功能,为内网服务配置一个既安全又高速的公网访问入口。 核心原理解析 我们通过一个巧妙的“验证与优选分离”的技巧,来达成目的:

  1. Tunnel & 回退源 (Fallback Origin):我们创建一个标准的 Tunnel,并为其设置一个官方的、用于配置和识别的域名,我们称之为“回退源”(例如 tunnel-origin.bbb.com)。这个回退源是整个配置的“锚点”。

  2. SaaS 自定义主机名:我们使用 Cloudflare for SaaS 功能,告诉 Cloudflare:“我希望用我的域名 xxx.aaa.com 来访问那个‘回退源’”。Cloudflare 为了确认你拥有 xxx.aaa.com 的控制权,会要求你将 xxx.aaa.com CNAME 到回退源。

  3. CNAME 验证与切换:我们先按照要求完成 CNAME 配置,让 Cloudflare 验证通过,激活自定义主机名。一旦激活,Cloudflare 就只关心流量的 Host 请求头是不是 xxx.aaa.com,而不再严格检查 CNAME 指向。

  4. 优选域名/IP 介入:验证通过后,我们立即将 xxx.aaa.com 的 CNAME 记录从“回退源”修改为速度更快的“优选域名/IP”。

最终流量路径: 客户端 -> DNS 解析 xxx.aaa.com -> 得到优选 IP -> 客户端访问优选 IP (请求头 Host: xxx.aaa.com) -> Cloudflare 边缘节点收到请求 -> 识别出这是一个 SaaS 主机名,查询其配置 -> 内部路由到 ‘回退源’ 对应的 Tunnel -> cloudflared 客户端 -> 你的内网服务。


场景一:最终访问域名托管在第三方 DNS 服务商 这种情况最直接,因为第三方 DNS 的灵活性最高。 准备:

  • 最终访问域名:xxx.aaa.com (DNS 在 DNSPod, 阿里云等)

  • CF 托管域名:bbb.com (用于创建回退源)

  • 内网服务地址:192.168.1.2:80

步骤:

1. 创建 Tunnel 和回退源

  • 在 Cloudflare Zero Trust 面板创建 Tunnel 并连接成功。

  • 在 Tunnel 的 Public Hostnames 中,添加一个主机名作为回退源,例如 tunnel-origin.bbb.com。目标地址可以指向任意一个内网服务,甚至是一个无效地址,因为它主要起“锚点”作用。

2. ⭐ 核心技巧:API 添加第三方域名

  • 由于 xxx.aaa.com 不在 CF,无法直接在 UI 上添加。我们需要通过 API 操作。

  • 在 Tunnel 的 Public Hostnames 页面,按 F12 打开开发者工具,切换到 Network 标签页。

  • 随便点击一个现有主机名的 Save 按钮,捕获一个 PUT 类型的 /configurations 网络请求。

  • 右键该请求,选择 Copy -> Copy as cURL (cmd)。

  • 将复制的命令粘贴到文本编辑器,找到 --data-raw 后面的 JSON 数据。

  • 在 ingress 数组中,仿照现有格式,添加你的最终域名和内网服务地址:

{

 "hostname": "xxx.aaa.com",

 "service": "http://192.168.1.2:80"

}

  • 将修改后的完整 cURL 命令粘贴到命令行(CMD/PowerShell)中执行。成功后,刷新页面即可看到 xxx.aaa.com 出现在列表中。

3. 配置 SaaS 自定义主机名

  • 导航至主域名 bbb.com 的 SSL/TLS -> 自定义主机名 页面。

  • 设置回退源:添加 tunnel-origin.bbb.com 为回退源。

  • 添加自定义主机名:添加 xxx.aaa.com。

4. DNS 验证与证书签发

  • 在 xxx.aaa.com 的第三方 DNS 管理平台,按 Cloudflare 的提示添加两条记录:

    • 主机名验证:添加 CNAME 记录,将 xxx.aaa.com 指向回退源 tunnel-origin.bbb.com。

    • 证书验证:推荐使用 DCV 委派。添加一条 CNAME 记录,例如 _acme-challenge.xxx.aaa.com 指向 xxx.aaa.com.xxxxxxxx.dcv.cloudflare.com。这可以实现证书自动续期,一劳永逸。

    • 等待几分钟,直到自定义主机名状态变为 Active。

5. 切换至优选域名

  • 验证通过后,回到第三方 DNS 管理平台。

  • 将 xxx.aaa.com 的 CNAME 记录值从 tunnel-origin.bbb.com 修改为你的优选域名(例如 cf.zhetengsha.eu.org)。

  • 等待 DNS 生效,即可通过优选 IP 高速访问你的内网服务。

6. 🚀 进阶玩法:

分线路解析 如果你的 DNS 服务商支持分线路解析,可以在第 4 步直接一步到位:

  • 境内线路:CNAME 到优选域名。

  • 境外/默认线路:CNAME 到回退源 tunnel-origin.bbb.com (用于 Cloudflare 验证)。 这样无需等待验证后再修改,配置即生效。

场景二:最终访问域名也托管在 Cloudflare 这种情况需要引入一个“中间人”域名来绕过 Cloudflare 的 CNAME 限制。 准备:

  • 最终访问域名:xxx.aaa.com (DNS 在 CF)

  • CF 托管域名:bbb.com (用于创建回退源)

  • 第三方中转域名:ccc.com (DNS 在任意服务商,仅用于 CNAME 中转)

  • 内网服务地址:192.168.1.2:80

步骤:

1. 创建 Tunnel 和回退源

  • 同场景一,创建 Tunnel 并设置回退源 tunnel-origin.bbb.com。

  • 由于 xxx.aaa.com 也在 CF,你可以直接在 Tunnel 的 Public Hostnames 页面添加 xxx.aaa.com,指向 192.168.1.2:80。

2. ⚠️ 关键:清理并重定向 DNS

  • 进入域名 aaa.com 的 DNS 管理页面。

  • 找到 Cloudflare 自动为 xxx.aaa.com 创建的 CNAME 记录(通常指向一个 UUID. cfargotunnel. com),将其删除。

  • 在第三方域名 ccc.com 的 DNS 平台,添加一条 CNAME 记录:zhongzhuan.ccc.com 指向回退源 tunnel-origin.bbb.com。

  • 回到 aaa.com 的 DNS 平台,添加一条新的 CNAME 记录:xxx.aaa.com 指向刚刚创建的 zhongzhuan.ccc.com,并确保云朵为灰色(仅 DNS)。

3. 配置 SaaS 自定义主机名并验证

  • 导航至域名 aaa.com 的 SSL/TLS -> 自定义主机名 页面。

  • 添加 xxx.aaa.com 为自定义主机名,回退源使用 tunnel-origin.bbb.com。

  • 验证:你的观察非常准确,对于托管在 CF 上的域名,DCV 委派可能会失败。此时应选择 TXT 记录验证。按要求在 aaa.com 的 DNS 中添加指定的 TXT 记录即可。

  • 等待状态变为 Active。

4. 切换至优选域名

  • 验证通过后,你有两个选择:

    • 方案 A (推荐):在 ccc.com 的 DNS 平台,将 zhongzhuan.ccc.com 的 CNAME 记录值修改为你的优选域名。

    • 方案 B:在 aaa.com 的 DNS 平台,将 xxx.aaa.com 的 CNAME 记录值从 zhongzhuan.ccc.com 修改为你的优选域名。

    • 同样,如果中转域名 ccc.com 的 DNS 支持分线路解析,可以一步到位。

参考文章:

  1. https://linux.do/t/topic/122087

  2. https://blog.nbvil.com/nat/tunnelsaas/