接上一篇文章使用 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.com/script/CNAMEFlattening/HuaweiCloud/Flame/Huaweicloud-Flame-IPv4.py

IPv6 腳本:

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

Frost 版本

該版本適用於騰訊雲 EdgeOne、阿里雲 CDN、天翼雲 CDN
IPv4 腳本:

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

IPv6 腳本:

1
wget https://dl.r2wind.com/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.com.cdn.qcloudcdn.cn'或者'r2wind.com.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.com.cdn.qcloudcdn.cn' 或者 'r2wind.com.cdn.dnsv1.com'
CDNCNAME='r2wind.com.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.com/template/HuaweicloudDNS-IPv4.xlsx
IPv6模板:https://dl.r2wind.com/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/HuaweicloudDNSCDN-IPv4.py 替换成你个脚本路径。
如果你用緊IPv6个脚本,请将上述内容替换成 */5 * * * * python3 /root/HuaweicloudDNSCDN-IPv6.py

验證效果

你可以喺華為雲 DNS 控制台檢查對應域名嘅相關記錄,若記錄值已經更新為 CDN 節點 IP,咁就表示腳本運行成功。

問題反饋

若您喺使用過程中遇到任何問題,歡迎您提交 Issue