
这份指南基于你的实践笔记整理而成,旨在提供一个清晰、可复现的操作流程,帮助用户利用 Cloudflare Tunnel 和 Cloudflare for SaaS 功能,为内网服务配置一个既安全又高速的公网访问入口。 核心原理解析 我们通过一个巧妙的“验证与优选分离”的技巧,来达成目的:
Tunnel & 回退源 (Fallback Origin):我们创建一个标准的 Tunnel,并为其设置一个官方的、用于配置和识别的域名,我们称之为“回退源”(例如 tunnel-origin.bbb.com)。这个回退源是整个配置的“锚点”。
SaaS 自定义主机名:我们使用 Cloudflare for SaaS 功能,告诉 Cloudflare:“我希望用我的域名 xxx.aaa.com 来访问那个‘回退源’”。Cloudflare 为了确认你拥有 xxx.aaa.com 的控制权,会要求你将 xxx.aaa.com CNAME 到回退源。
CNAME 验证与切换:我们先按照要求完成 CNAME 配置,让 Cloudflare 验证通过,激活自定义主机名。一旦激活,Cloudflare 就只关心流量的 Host 请求头是不是 xxx.aaa.com,而不再严格检查 CNAME 指向。
优选域名/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 支持分线路解析,可以一步到位。
参考文章:
https://linux.do/t/topic/122087
https://blog.nbvil.com/nat/tunnelsaas/