DNS+HTTPDNS 實現 CNAME 展平 (CNAME Flattening)
本文將介紹如何使用 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 計費說明。
前提條件
- 域名解析託管在 DNSPod 且使用的套餐版本不低於「企業版」
- 已開通 HTTPDNS 服務
限制說明
- 本腳本默認僅支持國內 31 個省份的三大運營商線路,其他二級運營商、教育網、中國港澳臺、境外等默認調度至上海電信線路兜底,如您需要更加完整的覆蓋,可自行修改腳本添加對應的線路,詳情可以查看腳本中的註釋。
操作步驟
前期準備
添加域名
- 登錄 HTTPDNS 控制檯,在左側導航欄中,單擊
域名管理
,進入域名管理
頁面。 - 在
域名管理
頁面,單擊添加主域名
,在彈出的對話框中,輸入需要添加的域名所屬的,單擊確定
。注意:
此處添加的域名爲需要展平的 CNAME 記錄所對應的主域名,而不是您自己域名;
例如,您需要展平的 CNAME 記錄爲0517ht.com.cdn.dnsv1.com.cn
,則此處添加的域名爲dnsv1.com.cn
。
再舉個例子,您需要展平的 CNAME 記錄爲0517ht.com.eo.dnse3.com
,則此處添加的域名爲dnse3.com
。
獲取Token
- 登錄 HTTPDNS 控制檯,在左側導航欄中,單擊
開發配置
,進入開發配置
頁面,點擊Token後面的圖標獲取Token.
導入記錄
使用前請您前往DNSPod 控制檯導入相應記錄,否則本腳本將無法正常運行。
下載記錄模板
IPv4 模板:https://dl.0517ht.com/template/DNSPod-IPv4-Storm.xls
IPv6 模板:https://dl.0517ht.com/template/DNSPod-IPv6-Storm.xls
說明:
請根據IP類型選擇相應模板。
導入前請自行修改模板中的主機記錄。(若有需要)
導入前請自行修改模板中的記錄值爲當前 CDN 節點 IP,否則會影響域名正常訪問。(節點 IP 可以通過nslookup查詢CDN CNAME地址獲取)
若需要導入的記錄已在控制檯添加過,請刪除原有記錄後再導入。
導入記錄
- 登錄 DNSPod 控制檯,進入批量操作-導入記錄頁面。
- 輸入需要導入的域名,上傳已經修改好的模板,點擊批量導入。
- 等待導入完成,請注意查看導入結果,若有導入失敗的記錄,查看原因修正後手動添加記錄,不要重複導入。
配置腳本
安裝依賴
本腳本提供Go語言版本和Python語言版本,您可根據自己的需求選擇相應版本,在此處僅演示 Go 語言版本的相關步驟。
安裝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。