Cloudflare Tunnel + SaaS 优选加速完整指南
📌 背景与目标
通过 Cloudflare Tunnel 将内网服务(如 MiroTalk、HomeAssistant、Nginx 等)暴露到公网时,默认情况下国内访问速度可能不理想。本文介绍一种双域名 + Cloudflare for SaaS 的方案,利用优选 IP 为国内用户提供更快的访问体验。
方案架构
flowchart LR
User[用户(国内)] -->|访问| MainDomain[主域名 app.example.com]
MainDomain -->|CNAME 指向| PreferEntry[优选入口 cdn.辅助域名]
PreferEntry -->|优选 IP 路由| CloudflareEdge[Cloudflare 边缘节点]
CloudflareEdge -->|SaaS 回退源| Fallback[辅助域名回退源 meet.辅助域名]
Fallback -->|Cloudflare Tunnel| Tunnel[隧道客户端]
Tunnel -->|内网 HTTP| InternalService[内网服务 192.168.x.x:3000]
核心思路
| 域名角色 | 示例 | 作用 |
|---|---|---|
| 主域名 | app.example.com |
用户实际访问的地址 |
| 辅助域名 | cdn.example.net |
提供优选入口 + SaaS 回退源 |
| 内网服务 | 192.168.x.x:3000 |
实际运行的服务 |
🛠 准备工作
- 两个托管在 Cloudflare 的域名(主域名 + 辅助域名)
- 已安装并运行
cloudflared(Cloudflare Tunnel 客户端) - 内网服务已部署且可正常访问
- Cloudflare 账号已绑定支付方式(Cloudflare for SaaS 功能免费,仅需验证)
🚀 第一步:配置 Cloudflare Tunnel
1.1 创建隧道(如未创建)
- 进入 Cloudflare 控制台 → Zero Trust → Networks → Tunnels
- 点击 Create a tunnel,输入名称(如
my-tunnel) - 复制显示的安装命令,在运行
cloudflared的服务器上执行 - 确认连接成功后点击 Next
1.2 添加公共主机名
在隧道配置页面的 Public Hostnames 中,依次添加两条记录:
第一条(回退源,用于辅助域名):
| 字段 | 值 |
|---|---|
| Subdomain | meet(可自定义) |
| Domain | 辅助域名(如 cdn.example.net) |
| Type | HTTP |
| URL | 内网服务地址(如 192.168.1.100:3000) |
第二条(业务域名,用于主域名):
| 字段 | 值 |
|---|---|
| Subdomain | app(可自定义) |
| Domain | 主域名(如 app.example.com) |
| Type | HTTP |
| URL | 同上(内网服务地址) |
⚠️ 注意:URL 字段不要加
http://或https://,只写IP:端口或localhost:端口。
添加完成后,Cloudflare 会自动在两个域名的 DNS 中创建对应的 CNAME 记录指向隧道。这些自动生成的记录必须保持代理状态为橙色云朵。
🔗 第二步:启用 Cloudflare for SaaS
2.1 进入配置页面
- 选择辅助域名(如
cdn.example.net) - 点击左侧 SSL/TLS → 自定义主机名 (Custom Hostnames)
- 如未启用,点击 Enable Cloudflare for SaaS 并绑定支付方式(功能免费)
2.2 添加回退源
在 回退源 (Fallback Origin) 输入框中,填写你在 Tunnel 中为辅助域名配置的完整地址:
meet.cdn.example.net
text
点击 添加回退源,等待状态变为 有效 (Active)。
2.3 添加自定义主机名
- 点击 添加自定义主机名
- 自定义主机名 输入主域名的访问地址:
app.example.com - 验证方式选择 TXT
- 复制生成的 TXT 记录值
- 切换到主域名的 DNS 设置,添加该 TXT 记录
- 返回自定义主机名页面刷新,等待状态变为 有效
🌐 第三步:配置优选入口
在辅助域名的 DNS 设置中,添加一条记录用于优选:
| 类型 | 名称 | 目标 | 代理状态 |
|---|---|---|---|
CNAME |
cdn(可自定义) |
优选域名(如 cf.090227.xyz) |
⚪ 灰色(仅 DNS) |
也可以使用自己测出的优选 IP,此时类型选择
A,目标填 IP 地址。
保存后,你就有了一个优选入口 cdn.cdn.example.net。
🔀 第四步:修改主域名解析
关键步骤:将主域名的访问地址指向优选入口。
- 进入主域名的 DNS 设置
- 找到 Tunnel 自动创建的
app那条 CNAME 记录(指向xxx.cfargotunnel.com)—— 直接删除它 - 重新添加一条 CNAME 记录:
| 类型 | 名称 | 目标 | 代理状态 |
|---|---|---|---|
CNAME |
app |
cdn.cdn.example.net(优选入口) |
⚪ 灰色(仅 DNS) |
⚠️ 主域名的 DNS 中不应有任何直接指向隧道地址的记录。
✅ 第五步:最终检查清单
| 检查项 | 预期状态 |
|---|---|
| Tunnel 中两条 Public Hostname | 辅助域名 + 主域名,URL 均为内网服务地址 |
辅助域名 DNS:meet 记录 |
CNAME 指向 xxx.cfargotunnel.com,🟠 橙色云朵 |
辅助域名 DNS:cdn 记录 |
CNAME 指向优选域名,⚪灰色云朵 |
主域名 DNS:app 记录 |
CNAME 指向 cdn.辅助域名,⚪ 灰色云朵 |
| 自定义主机名:回退源 | 状态有效 |
| 自定义主机名:自定义主机名 | 状态有效 |
| SSL/TLS 加密模式 | 完全 (Full) 或 完全(严格) |
| 始终使用 HTTPS | 开启 |
| 自动 HTTPS 重写 | 开启 |
🧪 验证与测试
测试回退源
直接访问 https://meet.辅助域名,应能正常打开服务。
测试主域名
访问 https://app.主域名,应能正常打开服务,且国内访问速度更快。
DNS 解析检查
# 检查主域名解析
dig app.主域名
# 预期:返回 CNAME 指向优选入口
# 检查优选入口解析
dig cdn.辅助域名
# 预期:返回优选域名或优选 IP
⚠️ 常见问题
- 访问出现 ERR_TOO_MANY_REDIRECTS
- 原因:SSL/TLS 加密模式设置为 灵活 (Flexible),与源服务器强制 HTTPS 冲突。
- 解决:将加密模式改为 完全 (Full) 或 完全(严格),并确保 Tunnel 配置中使用 HTTP 协议。
- 出现 502 错误
- 可能原因:
- Tunnel 未运行
- 内网服务未启动
- Public Hostname 中的 URL 配置错误
- 自定义主机名状态不是 有效
- 排查:先访问回退源 https://meet.辅助域名 确认服务正常。
- 证书未被覆盖
- 原因:自定义主机名未生效或 TXT 验证未完成。
- 解决:检查自定义主机名状态,重新验证 TXT 记录。
- 优选 IP 失效
- 原因:优选 IP 或优选域名会随时间变化。
- 解决:定期更新 cdn 记录的优选域名或 IP,可以使用 CloudflareSpeedTest 等工具测速后自动更新。
📚 参考与致谢
- Cloudflare for SaaS 官方文档
- Cloudflare Tunnel 文档
- CloudflareSpeedTest - 优选 IP 测速工具
- 全自动的 Cloudflare CDN 节点优选工具
评论区