本文将介绍如何使用 DNS (DNSPod) +HTTPDNS 实现 CNAME 展平 (CNAME Flattening)。一直以来,由于 CNAME 记录和任何记录冲突的独有特性,导致一旦在根域使用 CNAME 解析,将导致其他记录无法正常使用,影响 DS (DNSSEC)、MX (邮箱服务)、TXT (SPF、DKIM、DMARC、站长平台验证) 等记录的使用,进而影响依赖这些记录的相关服务(如括号内所示),而 CNAME 展平 (CNAME Flattening) 是解决这个问题的一种方法,但由于 DNSPod 本身不支持 CNAME 展平 (CNAME Flattening),所以本文将介绍如何使用 DNS+HTTPDNS 通过 API 调用的方式实现 CNAME 展平 (CNAME Flattening)。
为确保能精准稳定的获取到 CDN 等厂商提供的 CNAME 记录所对应的解析 IP(调度结果),脚本需要使用 HTTPDNS 服务,HTTPDNS 服务可能产生对应的请求次数费用,具体费用请参考 HTTPDNS 计费说明。
域名管理
,进入域名管理
页面。域名管理
页面,单击添加主域名
,在弹出的对话框中,输入需要添加的域名所属的,单击确定
。注意:
此处添加的域名为需要展平的 CNAME 记录所对应的主域名,而不是您自己域名;
例如,您需要展平的 CNAME 记录为r2wind.cn.cdn.dnsv1.com.cn
,则此处添加的域名为dnsv1.com.cn
。
再举个例子,您需要展平的 CNAME 记录为r2wind.cn.eo.dnse3.com
,则此处添加的域名为dnse3.com
。
开发配置
,进入开发配置
页面,点击Token后面的图标获取Token.使用前请您前往DNSPod 控制台导入相应记录,否则本脚本将无法正常运行。
IPv4 模板:https://dl.r2wind.cn/template/DNSPod-IPv4-Storm.xls
IPv6 模板:https://dl.r2wind.cn/template/DNSPod-IPv6-Storm.xls
说明:
请根据IP类型选择相应模板。
导入前请自行修改模板中的主机记录。(若有需要)
导入前请自行修改模板中的记录值为当前 CDN 节点 IP,否则会影响域名正常访问。(节点 IP 可以通过nslookup查询CDN CNAME地址获取)
若需要导入的记录已在控制台添加过,请删除原有记录后再导入。
本脚本提供Go语言版本和Python语言版本,您可根据自己的需求选择相应版本,在此处仅演示 Go 语言版本的相关步骤。
1 | # 安装Go语言环境 |
1 | # CentOS/RHEL |
1 | # 从GitHub克隆脚本 |
1 | # 进入脚本目录 |
安装文件中的配置项说明完成配置
1 | // 本脚本调用了腾讯云HTTPDNS服务,可能会产生额外费用,如不想付费请使用Frost版本https://github.com/KincaidYang/CNAMEFlattening/tree/main/DNSPod/Frost |
1 | go build |
完成编译后,会在当前目录生成可执行文件Storm
,您可将其移动到任意位置。
1 | ./Storm |
运行后您将会看到如下输出
1 | # 编辑定时任务 |
说明:
请根据实际情况自行修改定时任务执行频率。
请根据实际情况自行修改脚本路径,/path/to/请替换成您脚本的实际路径。
编辑完成后请保存退出即可。
您可以在 DNSPod 控制台查看对应域名的相关记录,若记录值已经更新为 CDN 节点 IP,则说明脚本运行成功。
若您在使用过程中遇到任何问题,欢迎您提交 Issue。