说明:本文用
blog.126330.xyz作为访问域名、346330.xyz作为加速域名来演示。示例里的blog.126330.xyz目前是本站的 GitHub Pages 域名;GitHub Pages 不能运行cloudflared,所以这是一篇方法教程,适用于你在 NAS、家里电脑或云服务器上通过 Cloudflare Tunnel 暴露的服务。不要直接照搬去改现有博客的 DNS。
Cloudflare Tunnel 很好用:不用公网 IP、不用端口映射,装个 cloudflared 就能把本地服务暴露到公网。但它默认走 Cloudflare 分配的边缘节点,国内访问不一定快。这个方案要解决的就是「Tunnel 已经通了,但访问速度不理想」的问题。
思路不复杂:用 Cloudflare for SaaS 的「自定义主机名 + 回退源」把访问域名挂到 Tunnel 上,再让访问域名走一个「优选域名」的 Cloudflare IP。
一、角色与链路
先约定本文用到的几个域名,后面每一步都对应这张表:
| 角色 | 本文示例 | 说明 |
|---|---|---|
| 访问域名 | 126330.xyz |
用户最终访问的域名 |
| 访问主机名 | blog.126330.xyz |
真正对外提供服务的地址 |
| 加速域名 | 346330.xyz |
Tunnel 和 SaaS 配置所在的 Cloudflare zone |
| Tunnel 主机名 / 回退源 | blog.346330.xyz |
指向 cloudflared 的公网主机名 |
| 自定义主机名 | blog.126330.xyz |
在 SaaS 里登记的访问主机名 |
| 优选记录 | speedup.346330.xyz |
指向公共优选域名的中转记录 |
| 优选域名 | cloudflare.182682.xyz 等 |
第三方维护的 Cloudflare 优选 CNAME |
| Tunnel 目标 | <tunnel-id>.cfargotunnel.com |
Cloudflare 自动生成的隧道 CNAME |
最终链路:
1 | 用户 |
关键点在于:优选域名只负责把 DNS 解析到更快的 Cloudflare 边缘 IP,不改变浏览器发出的 SNI。 浏览器访问的仍然是 blog.126330.xyz,Cloudflare 边缘根据 SNI 找到 SaaS 里的自定义主机名,再回源到 Tunnel。
二、前置条件
动手前确认这几件事:
- 有一个可以正常工作的 Cloudflare Tunnel,或者你准备现在创建一个。
- 加速域名
346330.xyz已经接入 Cloudflare,并且能打开SSL/TLS → 自定义主机名(Cloudflare for SaaS)菜单。 - 访问域名
126330.xyz的 DNS 可控。126330.xyz和346330.xyz最好是两个不同的域名或不同的 zone,避免 CNAME 和代理状态互相干扰。 - Cloudflare for SaaS 的自定义主机名有免费额度/套餐限制,具体以你的控制台为准。
- 本地服务已经在运行,例如
http://localhost:8080。
三、第一步:在加速域名上配置 Tunnel
进入 Cloudflare Zero Trust → Networks → Tunnels,新建一个隧道,名字填 blog,按提示在目标机器上安装并运行 connector。
然后给隧道添加一个 Public Hostname:
1 | 主机名:blog.346330.xyz |
如果使用本地 config.yml 管理隧道,可以写成:
1 | tunnel: <tunnel-id> |
Cloudflare 会自动在 346330.xyz 里生成一条 DNS 记录:
1 | blog.346330.xyz CNAME <tunnel-id>.cfargotunnel.com (代理 / 橙云) |
这条记录必须保持代理开启。cfargotunnel.com 的 CNAME 只在 Cloudflare DNS 里、并且开启代理时才有效。
先访问 https://blog.346330.xyz,确认 Tunnel 本身是通的。如果这一步不通,后面的 SaaS 配置没有意义。
四、第二步:开启 SaaS 并设置回退源
进入 346330.xyz → SSL/TLS → 自定义主机名(Cloudflare for SaaS)。
1. 设置回退源
把「回退源」填成:
1 | blog.346330.xyz |
回退源必须是当前 zone 里的一条代理 DNS 记录,并且状态要变成「有效」。它负责接收所有没有单独指定源服务器的自定义主机名流量。
2. 添加自定义主机名
点击「添加自定义主机名」,填入访问主机名:
1 | blog.126330.xyz |
Cloudflare 会要求验证这个主机名的归属。选择 TXT 验证,它会给出类似下面的一组记录:
1 | 名称:_cf-custom-hostname.blog.126330.xyz |
先把这组记录记下来,下一步要加到 126330.xyz 的 DNS 里。
3. 设置回源 Host(很关键)
在自定义主机名的「源服务器」设置里,建议把 Origin Host Header 设为:
1 | blog.346330.xyz |
原因是:Tunnel 的 ingress 默认按 Host 匹配。如果让 Tunnel 收到 blog.126330.xyz,而它只发布了 blog.346330.xyz,就可能直接返回 404。把回源 Host 固定成回退源,Tunnel 就能匹配到正确的路由。
如果不想改 Origin Host Header,也可以在 Tunnel 的 ingress 最后加一条 catch-all:
1 | - service: http://localhost:8080 |
两种做法选一种即可,推荐前者,边界更清晰。
五、第三步:完成证书验证
回到 126330.xyz 的 DNS,添加刚才拿到的 TXT 记录:
1 | _cf-custom-hostname.blog.126330.xyz TXT <Cloudflare 生成的值> |
这条记录只用于验证,保持「仅 DNS」即可。添加后回到 Cloudflare 的自定义主机名页面,等证书状态从「正在初始化」变成「有效」。
视频里还演示了 DCV 委派。Cloudflare 会在自定义主机名详情里给出一条类似下面的记录:
1 | _acme-challenge.blog.126330.xyz CNAME <Cloudflare 提供的 DCV 目标> |
把这条 CNAME 也加到 126330.xyz 的 DNS 里。它的作用是让 Cloudflare 之后可以自动续期证书,不用每次手动改 TXT。不是所有账户/界面都会显示这一步,有就加,没有就按控制台提示走。
证书签发后,blog.126330.xyz 在 Cloudflare 那边就已经是一个有效的主机名了。但此时它还没有指向加速线路,下一步才做。
六、第四步:添加优选记录
公共优选域名的原理是:这些域名由第三方维护,会解析到一批当前延迟较低的 Cloudflare 边缘 IP。你把 CNAME 指过去,DNS 就会返回这些 IP。
在 346330.xyz 的 DNS 里新增:
1 | speedup.346330.xyz CNAME cloudflare.182682.xyz (仅 DNS / 灰云) |
cloudflare.182682.xyz 是视频里用的优选域名之一,支持 IPv4/IPv6,更新频率较高。类似的还有:
www.visa.cnbestcf.topcdn.2020111.xyzcfip.cfcdn.vip*.cf.licdn.top
这些域名来自第三方维护的公共列表(视频里用的是 WeTest.vip 的 Cloudflare 优选域名页,文末有链接)。它们不是 Cloudflare 官方服务,可用性和速度会变化,建议:
- 选更新频率高的;
- 自己用
dig或测速工具验证解析结果; - 发现变慢或解析失败时,换一个优选域名;
- TTL 不要设太长,方便切换。
这条记录要设为「仅 DNS」(灰云),不要开代理。 如果开代理,Cloudflare 会用自己的边缘 IP 覆盖 CNAME 的解析结果,优选域名的意义就没了。
七、第五步:把访问域名指向加速记录
最后,在 126330.xyz 的 DNS 里,把访问主机名指到刚才的优选记录:
1 | blog.126330.xyz CNAME speedup.346330.xyz (仅 DNS / 灰云) |
如果 126330.xyz 也在 Cloudflare,这条 CNAME 同样建议设为「仅 DNS」。开代理会让 Cloudflare 用它自己的边缘,削弱优选线路的效果;保持灰云,浏览器才能拿到 speedup 解析出的优选 IP。
如果 126330.xyz 不在 Cloudflare,按普通 CNAME 添加即可,DNS 服务商会返回 CNAME 链。
等 DNS 生效后,访问:
1 | https://blog.126330.xyz |
此时浏览器看到的证书应该是 blog.126330.xyz 的证书,流量路径则是:
1 | blog.126330.xyz → speedup.346330.xyz → 优选域名 → Cloudflare Edge |
八、DNS 记录总表
把本文的配置汇总成一张表,方便对照:
| 位置 | 名称 | 类型 | 值 | 代理状态 |
|---|---|---|---|---|
346330.xyz |
blog |
CNAME | <tunnel-id>.cfargotunnel.com |
代理(橙云) |
346330.xyz |
speedup |
CNAME | cloudflare.182682.xyz |
仅 DNS(灰云) |
126330.xyz |
_cf-custom-hostname.blog |
TXT | Cloudflare 给出的验证值 | 仅 DNS |
126330.xyz |
_acme-challenge.blog |
CNAME | Cloudflare 给出的 DCV 目标(可选) | 仅 DNS |
126330.xyz |
blog |
CNAME | speedup.346330.xyz |
仅 DNS(灰云) |
在 Cloudflare 的 SaaS 页面里对应:
| 配置项 | 值 |
|---|---|
| 回退源(Fallback Origin) | blog.346330.xyz |
| 自定义主机名(Custom Hostname) | blog.126330.xyz |
| 回源 Host(Origin Host Header) | blog.346330.xyz |
| 证书验证方式 | TXT |
| 证书自动续期 | 建议开启 / 添加 DCV 委派 |
九、验证与排错
1. 检查 DNS
1 | dig +short blog.126330.xyz |
Windows 可以用:
1 | Resolve-DnsName blog.126330.xyz |
你应该能看到 blog.126330.xyz 的 CNAME 指向 speedup.346330.xyz,再指向优选域名,最终返回 Cloudflare 的 IP。
2. 检查 HTTP 和证书
1 | curl -I https://blog.126330.xyz |
正常应该返回 200,证书颁发者是 Cloudflare 或其上游 CA,证书域名是 blog.126330.xyz。
3. 检查 Tunnel
Cloudflare Zero Trust → Networks → Tunnels,确认隧道状态是 Healthy;在 Tunnel 的日志里能看到请求。
4. 常见错误
| 现象 | 可能原因 | 处理 |
|---|---|---|
| Tunnel 返回 404 | Tunnel 的 Host 匹配不到 | 把自定义主机名的 Origin Host Header 设为回退源,或在 ingress 加 catch-all |
| 1033 错误 | Tunnel 没连上,或回退源没开代理 | 检查 connector、DNS 代理状态 |
| 525 / 526 | SSL/TLS 模式不对 | 用 Full 或 Full (strict),不要 Flexible |
| 证书一直「正在初始化」 | TXT 没生效 / DCV 没配 | 检查 _cf-custom-hostname 记录,必要时加 DCV CNAME |
| 1000 / 1016 | DNS 指向了受限 IP,或 CNAME 冲突 | 用 SaaS 自定义主机名接入,不要直接普通 CNAME |
| 403 / 1020 | WAF / 防火墙拦截 | 查看 Security Events,放行对应 hostname |
| 能打开但很慢 | 优选域名线路变差 | 换一个优选域名,更新 speedup 记录 |
十、注意事项
- 示例域名和实际博客要分清。 本文的
blog.126330.xyz是演示用的访问主机名;本站目前仍然是 GitHub Pages,不在 Tunnel 后面。GitHub Pages 不能跑cloudflared,不要把现有博客的 DNS 直接改掉。 - Cloudflare for SaaS 有配额/套餐限制。 免费额度、额外主机名费用以控制台为准;如果看不到「自定义主机名」菜单,说明当前账户/套餐不支持。
- 公共优选域名不是官方服务。 它们由第三方维护,可能失效、被阻断或解析到不理想的 IP;不要把它当成长期稳定的基础设施。参考文章里也提到过公共优选域名出现解析失败、301/409 等情况。
- 优选域名只参与 DNS 解析。 TLS 仍然在 Cloudflare 边缘终止,优选域名提供方看不到你的 HTTPS 内容;但仍建议选择可信来源。
- Tunnel 暴露的是内网服务。 如果是 NAS 管理后台、数据库、私有网盘等敏感服务,建议叠加 Cloudflare Access 或应用本身的认证,不要只靠“域名没人知道”。
- 遵守 Cloudflare 的使用条款。 不要用这套方案承载违规内容;公共优选 IP 的做法属于社区实践,Cloudflare 不保证其稳定性,也不官方推荐直接 A 记录到它的边缘 IP。
- 先备份现有 DNS。 改
126330.xyz之前,把现有记录截图或导出;一旦 CNAME 配错,博客或其它子域名可能受影响。
十一、参考链接
- B 站视频《Cloudflare SaaS + 优选域名 打造内网穿透访问加速》:本文方法的来源。
- CloudFlare 公共优选 CNAME 域名地址 - 宝塔迷:公共优选域名列表与使用经验,文中也指向 Cloudflare SaaS 接入教程。
- WeTest.vip Cloudflare 优选域名:视频里使用的优选域名列表。
- Cloudflare Tunnel 文档
- Cloudflare for SaaS 文档
- Custom Hostnames
- Fallback Origin
这套方案的核心就一句话:Tunnel 负责把本地服务送上网,SaaS 自定义主机名负责让访问域名合法地回源,优选域名负责让 DNS 解析到更快的 Cloudflare 边缘。 三者各司其职,配置一次之后,后面主要维护的就是优选记录和证书状态。
评论