Cloudflare CNAME 接入满血复活
介于网络坏境不同,很多人有需求在保留国内域名 DNS 服务器不改变的情况下,还能接入国外服务商比如 CloudFlare 的服务,使得国内外都能有较好的网络使用感受,以前通过 CloudFlare Partner 来实现 CNAME 接入的方式已经失效,目前有两种新方案可以复活 Cloudflare 的 CNAME 接入。
通过 SaaS
从 2021 年 11 月开始,CloudFlare 禁用了 Partner 使用的 zone_set
API 以避免滥用(因为该 API 接入不需要验证域名所有权),通过 Partner 实现 CNAME 接入的方式近乎落幕,仅剩 Plesk 空间存量的 ServerShield by Cloudflare
插件订阅能够正常接入。几个月过去了,官方也并没有对未来合作伙伴如何进行接入新域名给出任何解释。
错过了 Partner 的时代,官方的 CloudFlare for SaaS 也提供了一种更灵活的 CNAME 接入方式,一起来看看吧。
功能简介
CloudFlare for SaaS 不是个新功能,这里单独拿出来讲,主要是几天前 CF 调整了一波免费额度。过去是每个域名收取 2USD/ 月的费用,现在不仅提供 100 个域名免费额度,而且超额后每个域名按 0.1USD/ 月收取费用,非常良心。
❝官方公告:https://blog.cloudflare.com/waf-for-saas/
CloudFlare 中一个完全接入的域名即为一个 zone
,点进去包括套餐、安全等等都是针对这一主域名配置的。官方 SaaS 功能针对的是你服务的客户,开放这项功能允许使用他们自己的域名直接附加在你的 zone
里,享受你 zone
包含的安全、加速等功能。
说起来可能不是很直白,这里举几个应用场景的例子:
❝★应用场景 1:
a.com
通过 NS 接入了 CF,b.com
未接入 CF;可以通过 SaaS 功能实现1.b.com
/2.b.com
等直接附加在a.com
上,通过 CNAME 指向 CF 的节点。★应用场景 2:
a.com
通过 Plesk 接入了 CF,具有免费的 Plesk Plus 版本,b.com
未接入 CF 或使用的免费版;可以通过 SaaS 功能实现1.b.com
/2.b.com
等直接附加在a.com
上,享受a.com
域名下的 ECC+RSA 双证书、页面规则、高级防火墙权益。
简而言之,可以通过这项功能,实现其他域名的 CNAME 接入以及对 zone
权益的共享,有兴趣的话,接着往下看吧~
配置接入
订阅 CloudFlare for SaaS
打开一个域名,选择【SSL/TLS】下的【自定义主机名】,点击【启用 CloudFlare for SaaS】后根据指示绑定外币卡或者 PayPal,订阅 CloudFlare for SaaS 功能。
CloudFlare for SaaS 订阅本身是针对整个计费账户的,所以通过 Partner 接入的域名出现【请联系客户成功经理以启用适用于 SaaS 的 SSL】时,只需要选择个通过官方 NS 激活的域名启用订阅后即可使用。这里猜测可能是 Partner 接入的商务权限交给了合作伙伴,方便下放优惠和服务那些,我们绕过去就行了。
激活页面中文翻译比较滞后,从英文的可以看到免费额度已经进行更新,可以放心使用。
设置源站
选择一个承载的域名 zone
点进去,依然是【SSL/TLS】下的【自定义主机名】,首先要设置附加上域名的源站。在这之前要在承载的域名 zone
中设置一个子域名作为源站的来源,比如 origin.a.com
,在 Partner 或者官方 DNS 设置好它的源站(注意是是在 CF 里添加,和正常添加网站的流程一样)。
SaaS 这里的源站叫回退源(Fallback Origin),输入刚才设置的子域名并点击【Add Fallback Origin】,它会同步这个子域名设置的源站作为后续在此接入域名的源站。有些人就会问了,这样设置那不是后续 SaaS 添加的所有其他域名就只能用同一个源站了?答案确实是这样,为每个 SaaS 域名自定义源站需要 Enterprise 以上套餐,有多域名需求多开几个 zone 吧(苦笑)。
添加自定义主机名
后续的工作就很简单了,点击【添加自定义主机名】,输入你要添加的未在 CF 接入的子域名。建议直接选择 TXT 验证,因为除了证书还有另一条 TXT 记录要添加,一起加上去比较方便。
验证域名所有权
添加完成后,按要求解析证书和主机名两个 TXT 记录,解析生效后 10 分钟左右即可验证通过,到此这个 SaaS 域名就正确的添加到了你的 zone
中并接入了 CF。
特别提醒,如图这里 CF 给出的验证 TXT 名称是应完整域名的解析记录,所以在自己的第三方 DNS 配置的时候,填入的主机名应当是 example
和 _cf-custom-hostname.example
,如果直接复制框内的内容把根域名 b.com
填进了主机名全域就变成了 example.b.com.b.com
了,是错误的。配置完成之后你可以通过直接复制的域名来检查 TXT 记录是否匹配,推荐 MySSL 的工具(点击前往[1])。
SaaS 域名解析
添加进去的 SaaS 域名,CF 并不会给你提供明确的 CNAME 供指向。如果是官方接入的可以直接 CNAME 到你刚刚设置的源站域名比如 origin.a.com
,通过 Partner 接入的直接解析到源域名对应的 CNAME 比如 origin.a.com.cdn.cloudflare.net
即可。其他的配置比如分线路解析、自选 IP 就可以按照自己的喜好去设置了,在此不过多赘述。
此外,对于防火墙规则、页面规则,直接将添加进的域名输入其中即可圈定范围,完成对于其细则的设置。
CloudFlare for SaaS 是官方提供的一项非常方便的免费功能,弥补了早期未通过 Partner 接入只能强制 NS 接入的缺憾。有官方保障、灵活 CNAME、免费的优点,也有源站不灵活等缺点,肯定还是不如已经通过 Partner/Plesk 接入的域名灵活。
通过 Cloudflare pages function
1、首先去 https://github.com/xyTom/cf-page-func-proxy 下载或是 Fork 该仓库
2、修改该仓库 _worker.js 中的 url.hostname 为你需要反代的网址或是需要 cname 接入,自选 ip 的地址
3、然后打开 Cloudflare Dashboard,进入 Pages 管理页面,选择创建项目,如果在第一步中选择的是 fork 本仓库,则选择 1 Connect to Git,如果第一步中选择的是下载本仓库则选择 2 Direct Upload
绑定自定义域名
- 进入 Cloudflare Pages 管理页面,选择刚刚创建的 Pages 项目,点击名称进入项目设置页面
- 选择页面中的自定义域选项卡
- 选择设置自定义域
- 在页面中输入需要绑定的域名,并点击继续,这里的域名可以是子域名
- 在设置方法中选择开始 cname 设置
- 按照页面给出的说明去 DNS 服务提供商处修改 DNS 解析记录,即可完成自定义域名绑定
稍等一会,等待解析生效后就可以通过绑定的域名访问了,通过这种方式绑定的域名是 cname 接入,理论上可以自选 ip。
结束语
没啥说的,CloudFlare 和甲骨文才是真正的业界良心,人家才是良心云好吧。