DNS雲學堂 | 權威DNS那些事兒(中)

書接上回,在上一篇內容中重點剖析了互聯網DNS體系及造成權威DNS變更復雜的主要原因,今天我們通過搭建實驗環境,研究權威DNS的原理及細節。enjoy:

在介紹實驗過程之前,先直接說結論,建議爲權威NS記錄變更預留2天時間是一個相對保險的建議值,可以確保全網絕大部分LocalDNS都會刷新。若超過這個時間後仍有問題,需要考慮其他可能的原因。實際上從工程經驗看,域名變更後大部分ISP和Public DNS最多在1-2小時後就可以刷新。

P.S. 若需要變動的是edu.cn、gov.cn等結尾的域名,建議提前聯繫域名註冊管理機構進行流程和手續的諮詢,切記~

1.     基本原理及實驗

之前的文章中,從互聯網DNS體系並不能看出DNS的實際運行機制,因此我們首先搭建實驗環境來進行模擬,在此基礎上研究權威DNS的原理及細節。

1.1    搭建實驗環境

實踐是驗證理論的唯一標準。很多人經過初步的學習後,對互聯網DNS的體系有了一定的瞭解,但是不能解答之前的疑問,爲什麼DNS的收斂時間如此之長,問題出在哪個地方?每個環節的配置和參數對於整體的影響分別是什麼?

帶着這些疑問我們搭建了互聯網DNS的模擬環境,由1臺根DNS(兼職頂級域)、2臺權威DNS和1臺遞歸DNS組成。

 

所有DNS不做特殊設置,均爲通用配置。測試的域名區域爲test.com,配置NS記錄及www域名記錄。

測試根DNS配置根區及com頂級域;

com. 1800      IN   NS   ns.com.

ns.com.  1800      IN   A     192.168.30.135

ns1.test.com.       660 IN   A     192.168.30.136

test.com.       600 IN   NS   ns1.test.com.

ns2.test.com.       660 IN   A     192.168.30.137

test.com.       600 IN   NS   ns2.test.com.

測試權威DNS配置test.com權威區域(記錄相同TTL不同,便於識別);

權威DNS 01:

test.com.       120 IN   NS   ns1.test.com.

ns1.test.com.       140 IN   A     192.168.30.136

ns2.test.com.       140 IN   A     192.168.30.137

test.com.       120 IN   NS   ns2.test.com.

www.test.com.    160 IN   A     1.2.3.4

權威DNS 02:

test.com.       240 IN   NS   ns1.test.com.

ns1.test.com.       260 IN   A     192.168.30.136

ns2.test.com.       260 IN   A     192.168.30.137

test.com.       240 IN   NS   ns2.test.com.

www.test.com.    300 IN   A     1.2.3.4

測試遞歸DNS將根服務器設置爲測試根DNS,不使用默認的13個根;

測試客戶端無特殊設置,使用DIG、NSLOOKUP等工具進行測試並抓包;

以上就是本次搭建的實驗環境及其關鍵配置。

1.2    實驗原理及路線

根權威、頂級域權威、二級及以上級域權威、遞歸是互聯網DNS體系的組成部分,根權威包含1000多個頂級域NS記錄,頂級域權威包含歸屬於其區域的二級域名權威DNS的NS記錄,依次類推,而負責從各級權威獲取信息直至完成域名解析的就是遞歸服務器。爲了確保分級的、複雜的流程下信息的準確傳遞,DNS協議設計了很多保證措施,並最終由DNS軟件來實現。

遞歸DNS會從不同級別的權威DNS上獲取NS記錄併發起迭代查詢,直至最終獲取到需要的域名記錄的解析結果。在實際使用過程中,遞歸DNS會從上級權威獲取下級權威的NS記錄(包括記錄名稱和Gelu IP),同時也會從下級權威DNS獲取其NS記錄,這兩個記錄很可能是不一致的,這就是本次實驗主要驗證的內容。

實驗步驟如下:

1)       在測試頂級域DNS上只配置test.com的NS記錄ns1,指向測試權威DNS 01,並在權威DNS 01上也只配置ns1,在測試客戶端上觀察解析結果;

2)       在權威DNS 01上配置第二個NS記錄ns2,等測試域名記錄www.test.com過期後,在測試客戶端上觀察解析結果;

3)       在測試頂級域DNS上添加test.com的NS記錄ns2,指向測試權威DNS 02,並關閉測試權威DNS01,等測試域名記錄www.test.com過期後,在測試客戶端上觀察解析結果;

1.3    實驗過程

首先清除遞歸DNS和操作系統上的緩存記錄(不光遞歸DNS有緩存,還有瀏覽器緩存和操作系統(OS)緩存,不清除緩存可能會影響實驗結果)。

在測試頂級域DNS上只配置test.com的NS記錄ns1,指向測試權威DNS 01,並在權威DNS 01上也只配置ns1。測試客戶端結果如下:

 

在權威DNS 01上配置第二個NS記錄ns2,等測試域名記錄www.test.com過期後,在測試客戶端上觀察解析結果如下:

 

在測試頂級域DNS上添加test.com的NS記錄ns2,指向測試權威DNS 02,並關閉測試權威DNS01,等測試域名記錄www.test.com過期後,在測試客戶端上觀察解析結果如下:

 

 

上述測試爲連續測試,每次均等待 www.test.com的A記錄過期後重新進行查詢。

1.4    實驗結論及分析

由該實驗可得出以下推論:

 本實驗中遞歸DNS最終使用從本級權威DNS上獲取的NS記錄TTL,並以此爲準。實際上有一個更貼切的說法是以上級權威和本級權威的TTL最小值爲準。實驗中是本機權威配置的NS記錄TTL小於上級權威的NS記錄TTL,反過來的話效果如下:

 

在上級權威和本級權威的NS記錄配置不一致時,以本級權威的NS記錄爲準。(例如實驗中上級權威未配置ns2但本級權威DNS上有配置ns2,且被遞歸DNS獲取並使用)

遞歸DNS上的NS記錄過期後,一旦有不命中緩存的查詢出現,遞歸DNS會到上級權威開始重新查詢該區域的NS記錄。命中緩存的查詢則直接回復,不會去上級權威查詢更新NS記錄。下圖爲命中記錄緩存的查詢效果。

 

上級權威服務器中,變更域名的NS記錄生效後,最長不超過本機權威的NS記錄TTL時間,遞歸DNS就會更新該域名的最新NS記錄。

那麼是不是我們可以選擇不改註冊NS記錄直接改權威DNS就可以了呢?答案是否定的,測試的話在確保記錄一致性的情況下可以這麼做,但正式變更還是要按照先增後減的原則來進行,要的就是一個字,穩。

遞歸DNS有一個很複雜的運行機制,而且每個不同的遞歸DNS軟件甚至不同版本都會有細微的差距,再加上權威DNS的配置差異(例如是否開最小應答)、LAME Server(簡單來說就是對權威NS的主動標記拉黑機制)、DNS緩存強制修改(有些流氓DNS會這麼幹)、遞歸強制解析等因素,按照上述結論去使用是不太穩的。

特別是一旦註冊的NS記錄不能用時,等同於全部NS故障,權威DNS服務將會中斷,所有在線業務會受到很大影響。

而一旦錯誤配置的權威NS記錄或域名記錄在互聯網DNS體系中擴散,Hmm……那種等待收斂的無力你感絕對不會想體會第二次。雖然可以通過刷ISP的遞歸緩存的方式快速收斂,但這個方式的使用難度和費用是個問題。

1.5    從試驗結果展開的一點小思考

實驗中的模擬結構是一個理想模型,但是在實際的互聯網上,在遞歸DNS下面往往還有其他的LocalDNS,如轉發服務器、緩存服務器等,那麼這個TTL時間傳遞到客戶端後可能跟權威的設置沒有什麼太大關係,此時傳遞給最終客戶端的TTL主要取決於這些DNS服務器的配置。比如最小TTL的限制爲3600秒,即便該DNS服務器從遞歸DNS上查詢到的域名記錄TTL只剩30秒,也會被強制修改爲3600並返回給查詢者。

這個場景並不少見,ISP和Public的DNS大部分都是遞歸緩存分離的,再加上二級運營商或企事業單位自建的DNS採用全區轉發的查詢策略(降低服務器負載),最終從客戶端到權威DNS服務器之間可能有3個或以上的DNS服務器,此時這個TTL生效時間跟權威的設置會有很大的區別

 

 

依次類推,實際上權威記錄變更可能需要更長的時間纔會被客戶端感知,即便權威DNS上配置60甚至更小的TTL也是這樣!如果不能容忍這個問題,APP類的應用可以選擇使用HTTP DNS的方式來避開,附贈一大堆好處,此處略。

 

(未完待續)

 

關於ZDNS

互聯網域名系統國家工程研究中心(簡稱ZDNS)是國家發改委批覆的國家級工程研究中心,是工信部批准的根鏡像運行機構,是中科院孵化的專注於域名領域的高新技術企業;ZDNS連續四年在DDI(DNS、DHCP、IPAM)設備領域市場佔有率第一,服務金融、廣電、教育、政府、軍工、醫療、互聯網等多個行業,全球近千家大型企業。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章