接上一篇文章使用 DNSPod 拉平 CNAME 记录(CDN 场景)这篇文章将介绍如何使用华为云 DNS 拉平 CNAME 记录(CDN 场景)。

操作场景

本文将指导您如何使用华为云 DNS 的 API 实现拉平 CNAME 记录,以解决相关记录冲突的问题。

方法说明

不再重复说明了,如有兴趣请看使用 DNSPod 拉平 CNAME 记录(CDN 场景)

前提条件

  • 域名解析托管在华为云 DNS

项目地址

https://github.com/KincaidYang/CNAMEFlattening

操作步骤

获取脚本

Flame 版本

该版本适用于腾讯云 CDN、华为云 CDN
IPv4 脚本:

1
wget https://dl.r2wind.cn/script/CNAMEFlattening/HuaweiCloud/Flame/Huaweicloud-Flame-IPv4.py

IPv6 脚本:

1
wget https://dl.r2wind.cn/script/CNAMEFlattening/HuaweiCloud/Flame/Huaweicloud-Flame-IPv6.py

Frost 版本

该版本适用于腾讯云 EdgeOne、阿里云 CDN、天翼云 CDN
IPv4 脚本:

1
wget https://dl.r2wind.cn/script/CNAMEFlattening/HuaweiCloud/Frost/Huaweicloud-Frost-IPv4.py

IPv6 脚本:

1
wget https://dl.r2wind.cn/script/CNAMEFlattening/HuaweiCloud/Frost/Huaweicloud-Frost-IPv6.py

使用 git clone 命令下载脚本

使用 git clone 命令:

1
git clone https://github.com/KincaidYang/CNAMEFlattening.git

配置变量

打开脚本,根据脚本提示修改如下变量。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 配置参数
# domanin替换为自己的域名,如'example.com'或'example.cn'
domain=''
# sub_domain替换为自己的主机记录或域名前缀,如'www'或'dl'如果是根域名则写'@'或留空
subdomain=''
# CDNCNAME请替换为CDN提供的CNAME地址,如'r2wind.cn.cdn.qcloudcdn.cn'或'r2wind.cn.cdn.dnsv1.com'
CDNCNAME=''
# ak请替换为自己的华为云Access Key Id,可前往https://console.huaweicloud.com/iam/?locale=zh-cn#/mine/accessKey 获取
ak='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
# sk请替换为自己的华为云Secret Access Key,可前往https://console.huaweicloud.com/iam/?locale=zh-cn#/mine/accessKey 获取
sk='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
# URL为 DNSPod DOH接口地址,用以获取CDN实时解析情况,可自行替换
DoH='https://1.12.12.12/resolve'
# 记录类型("A"为IPv4,"AAAA"为IPv6)
record_type='A'
# ttl为解析记录生存时间,单位为秒,可自行修改
TTL=120

本站示例配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 配置参数
# domanin替换为自己的域名,如'example.com'或'example.cn'
domain='dnstest.work'
# sub_domain替换为自己的主机记录或域名前缀,如'www'或'dl'如果是根域名则写'@'或留空
subdomain='@'
# CDNCNAME请替换为CDN提供的CNAME地址,如'r2wind.cn.cdn.qcloudcdn.cn'或'r2wind.cn.cdn.dnsv1.com'
CDNCNAME='r2wind.cn.cdn.qcloudcdn.cn'
# ak请替换为自己的华为云Access Key Id,可前往https://console.huaweicloud.com/iam/?locale=zh-cn#/mine/accessKey 获取
ak='BHHDNAIOTBZGJZSU92ZE'
# sk请替换为自己的华为云Secret Access Key,可前往https://console.huaweicloud.com/iam/?locale=zh-cn#/mine/accessKey 获取
sk='HigvKrrmvasu8e8NpGXvdgTsd5xvV0txmL7ErVdk'
# URL为 DNSPod DOH接口地址,用以获取CDN实时解析情况,可自行替换
DoH='https://1.12.12.12/resolve'
# 记录类型("A"为IPv4,"AAAA"为IPv6)
record_type='A'
# ttl为解析记录生存时间,单位为秒,可自行修改
TTL=120

说明:
若觉得下方用于 ECS 协议的 IP 子网存在问题,可自行修改。

安装依赖

脚本使用 Python3(一般镜像都会预装 Python3)、requests 库、华为云DNS SDK 若未安装请执行以下命令安装。

1
2
3
4
5
6
7
8
# CentOS/RedHat:
yum install python3
pip3 install requests
pip3 install huaweicloudsdkdns
# Debian/Ubuntu:
apt install python3
pip3 install requests
pip3 install huaweicloudsdkdns

说明:
某些系统下可能需要将 pip3 替换为 pip。

导入记录

使用前请您前往华为云 DNS 控制台添加或使用下方模板导入记录,否则脚本无法正常运行。

下载记录模板

IPv4模板:https://dl.r2wind.cn/template/HuaweicloudDNS-IPv4.xlsx
IPv6模板:https://dl.r2wind.cn/template/HuaweicloudDNS-IPv6.xlsx

说明:
导入前请自行修改模板中的域名,模板中的域名为域名前缀,如’www’等,根域名请留空。
导入前请自行修改模板中的记录值为当前 CDN 节点 IP,否则会影响域名正常访问。(节点 IP 可以通过nslookup查询CDN CNAME地址获取)
若需要导入的记录已在控制台添加过,请删除原有记录后再导入。

导入记录

  1. 登录华为云 DNS 控制台
  2. 点击对应的域名
  3. 切换到批量导入/导出选项卡,点击批量导入上传模板
  4. 等待导入完成,请注意查看导入结果,若有导入失败的记录,查看原因修正后手动添加记录,不要重复导入。

调试脚本

请先在本地使用编辑器(如VScode)调试脚本,若调试成功则可继续部署。
若脚本正常运行,您将看到类似如下输出:

部署脚本

部署运行

脚本使用 cron 定时运行,故您需要安装 cron。

1
2
3
4
# CentOS/RHEL
yum install cronie
# Debian/Ubuntu
apt install cron

安装完成后,您需要编辑 crontab 文件,添加定时任务。

1
crontab -e

在 crontab 文件中添加如下内容:

1
*/5 * * * * python3 /root/HuaweicloudDNSCDN-IPv4.py

说明:
本配置每 5 分钟运行一次,您可以根据需要自行修改。
请将 /root/DNSPodCDNv4.py 替换为您的脚本路径。
若您使用的是 IPv6 脚本,请将上述内容替换为 */5 * * * * python3 /root/HuaweicloudDNSCDN-IPv6.py

验证效果

您可以在 华为云 DNS 控制台查看对应域名的相关记录,若记录值已经更新为 CDN 节点 IP,则说明脚本运行成功。

问题反馈

若您在使用过程中遇到任何问题,欢迎您提交 Issue