什么是次要DNS?
在傳統(tǒng)意義上,次要 DNS 服務(wù)器充當(dāng)主要權(quán)威性 DNS 服務(wù)器的備份。主要服務(wù)器上的記錄發(fā)生更改時,將進(jìn)行區(qū)域傳送使次要 DNS 服務(wù)器與主服務(wù)器保持同步。然后,次要服務(wù)器可以像主要服務(wù)器一樣提供記錄,但是只能由主要服務(wù)器進(jìn)行更改,次要服務(wù)器則不行。這可以在許多不同的服務(wù)器之間創(chuàng)造冗余,服務(wù)器也可根據(jù)需要分散于各處。
有許多利用次要 DNS 的常用方法,其中一些有:
次要 DNS 充當(dāng)被動備份 - 次要 DNS 服務(wù)器處于閑置狀態(tài),直到主服務(wù)器停機(jī),這時可能發(fā)生可故障轉(zhuǎn)移,并且次要服務(wù)器可以開始提供記錄。
次要 DNS 充當(dāng)主動備份 - 次要 DNS 服務(wù)器與主服務(wù)器一起工作以提供記錄。
次要 DNS 使用隱藏主模型 - 注冊商處的域名服務(wù)器記錄僅指向次要服務(wù)器,實質(zhì)上將它們視為主要域名服務(wù)器。
什么是 Secondary DNS Override?
Secondary DNS Override 基于使用隱藏主模型的次要 DNS 而構(gòu)建,讓我們的客戶不僅能夠按他們告訴我們的方式提供記錄,還可以通過 Cloudflare 的網(wǎng)絡(luò)代理任何 A/AAAA/CNAME 記錄。這與 Cloudflare 當(dāng)前作為主要 DNS 提供商的工作方式類似。
請思考以下示例:
example.com Cloudflare IP - 192.0.2.0
example.com 原始 IP - 203.0.113.0
為了利用 Cloudflare 的安全和性能服務(wù),我們需要確保原始 IP 對互聯(lián)網(wǎng)保持隱藏。
圖 1:沒有隱藏主要域名服務(wù)器的次要 DNS
圖 1 顯示,在沒有隱藏主要域名服務(wù)器時,解析器可以選擇查詢其中任何一個。這將產(chǎn)生兩個問題:
違反 RFC 1034 和 RFC 2182,因為 Cloudflare 服務(wù)器的響應(yīng)將與主要域名服務(wù)器不同。
原始 IP 將暴露給互聯(lián)網(wǎng)。
圖 2:有隱藏主要域名服務(wù)器的次要 DNS
圖 2 顯示,解析器始終會查詢 Cloudflare 次要 DNS 服務(wù)器。
Secondary DNS Override UI 看起來與主 UI 相似,唯一的區(qū)別是無法編輯記錄。
圖 3:Secondary DNS Override 儀表板
在圖 3 中,所有記錄均已從主 DNS 服務(wù)器傳送過來。test-orange 和 test-aaaa-orange 已重寫為通過 Cloudflare 網(wǎng)絡(luò)進(jìn)行代理,而 test-grey 和 test-mx 則被視為常規(guī) DNS 記錄。
我們在幕后存儲重寫記錄,這些記錄基于名稱與傳送來的記錄配對。對于次要重寫,我們在重寫記錄時不關(guān)心其類型,原因有兩點(diǎn):
根據(jù) RFC 1912,您無法擁有與任何其他記錄同名的 CNAME 記錄。(這不適用于某些 DNSSEC 記錄,具體參見 RFC 2181)
A 和 AAAA 記錄都是地址類型記錄,應(yīng)在同一名稱下全部代理或全部不代理。
這意味著,如果您有幾個名稱均為“example.com”的 A 和 AAAA 記錄,倘若其中之一被代理,則所有記錄都將被代理。UI 通過“橙色云”按鈕幫助抽象我們要存儲其他重寫記錄的念頭,點(diǎn)擊這個按鈕將創(chuàng)建一個重寫記錄,并應(yīng)用到具有該名稱的所有 A/AAAA 或 CNAME 記錄。
頂端處的 CNAME
通常,不允許將 CNAME 放在區(qū)域的頂端。示例:
example.com CNAME other-domain.com
這是不被允許的,因為這意味著將存在至少一個其他 SOA 記錄和另一個同名的 NS 記錄,而這與上文提到的 RFC 1912 相悖。Cloudflare 可以通過使用 CNAME 拉平來解決這一問題,這是當(dāng)今主要 DNS 產(chǎn)品中常用的技術(shù)。當(dāng)查詢進(jìn)入我們的權(quán)威服務(wù)器時,CNAME 拉平允許我們返回地址記錄而不是 CNAME 記錄。
與上文中有關(guān)禁止 Secondary DNS Override UI 編輯記錄的說法相反,頂端處的 CNAME 是此規(guī)則的一個例外。除了常規(guī)的次要 DNS 記錄,用戶還可以在頂端處創(chuàng)建 CNAME,但這里也適用 RFC 1912 中定義的相同規(guī)則。這意味著,頂端處的 CNAME 記錄可以視為常規(guī) DNS 記錄或代理記錄,具體取決于用戶的決定。不管頂端記錄中 CNAME 的代理狀態(tài)如何,它都將重寫從主要 DNS 服務(wù)器傳送來的所有其他 A/AAAA 記錄。
合并頂端處的次要、重寫和 CNAME 記錄
在編輯記錄時,我們會在頂端處進(jìn)行次要、重寫和 CNAME 記錄的所有合并。這意味著,當(dāng) DNS 請求進(jìn)入邊緣的權(quán)威服務(wù)器時,我們?nèi)匀豢梢栽跇O快的時間內(nèi)返回記錄。具體工作流程如圖 4 所示。
圖 4:記錄合并過程
在區(qū)域構(gòu)建器中執(zhí)行如下步驟:
檢查頂端處是否有任何 CNAME,如果存在,則重寫頂端處的所有其他 A/AAAA 次要記錄。
對于每個次要記錄,檢查是否存在匹配的重寫記錄,如果存在,則將重寫記錄的代理狀態(tài)應(yīng)用到具有該名稱的所有次要記錄。
所有其他次要記錄保持不變。