Cloudflare SaaS 实现 CNAME 接入 及 基于 GeoDNS 的分流解析
Intro
Cloudflare 提供免费的 Anycast CDN 以及近乎无限的 DDoS 防护,但是除非 Enterprise 计划的用户才可以使用大陆节点,同时 Cloudflare 开放给免费用户的节点对于中国大陆而言往往线路优化不怎么好,由此便引申出了境内采用其他 CDN ,境外使用 Cloudflare 的方法,但是这种方法需要 CNAME 方式来。
而 Cloudflare SaaS 正包含自定义主机名的能力hu。
Prapare
- 一个 Cloudflare 账户
- 两个域名,一个为服务所使用的域名,另外一个为托管在 Cloudflare 的域名
Concept
- 回退域
即托管在 Cloudflare 的任意域名 - 回退源
即 SaaS 的源站,一个回退域只可以有一个回退源。(2025 修正:Cloudflare 允许一个回退域拥有多个源站,回退源作为默认源) - Cloudflare Saas
Cloudflare for SaaS · Cloudflare for Platforms docs
Configure
1.配置及开通 SaaS 功能
进入回退域的页面,然后点击 SSL/TLS -> 自定义主机名

按照相关要求开通即可。
2.添加回退源
前往 DNS 选项,添加任意子域名指向默认源站,注意需要让 Cloudflare 代理此站点。


3.CNAME 接入网站
点击 添加自定义主机名 然后按照自己的要求添加即可。

如有需要可以自定义源服务器(不同于回退源)。
完成之后按照要求,完成自定义主机名的 TXT 验证。(当然,你也可以提前添加 DCV 委派于自定义域名)。

完成两次 TXT 验证。
最后添加 CNAME 解析到 回退源 即可。
4.进阶(基于 GeoDNS 的分流解析)
我们可以通过 GeoDNS 实现对 DNS 记录的精准控制,如选择最近的 IP 地址/分地域解析
DNSPOD
如下图所示即可(注意线路类型个人建议留一个默认给到境外,不然一个境内一个境外很可能有偶见性匹配不出来的情况?)

PowerDNS
如下图所示,使用官方提供的 LUA 解析功能和 GeoIP 支持

apt 安装即可,后在 pdns.conf 配置 LUA 解析、GeoIP 数据库(可从 MaxMind 获取)等
# 启用 LUA 解析
enable-lua-records=yes
# 此处示例使用的是 MySQL 作为后端,具体需要自行调整
launch=gmysql,geoip
# GeoIP 数据库文件
geoip-database-files=/etc/geoip/GeoLite2-City.mmdb
PowerDNS 提供了一个叫做 country 的函数
例如这样
TXT ";if(country('国家 ISO 3166 alpha-2 code')) then return 'YES' else return 'NO' end"
用户在 ISO 3166 alpha-2 对应国家 的解析结果就是 YES,反之就是 NO,根据他我们就可以写出我们需要的 DNS 记录。
CNAME "";if(country('CN')) then return '\*\*\*.cdn.dnsv1.com.cn' else return '\*\*\*.top' end"' end"
配置如下

参考文章:
使用 PowerDNS 的 Lua 功能自建分地区解析 GeoDNS Lan Tian @ Blog
Cloudflare for SaaS · Cloudflare for Platforms docs