我在本地託管一個遞歸名稱伺服器,因此不需要服務提供者或其他公共 DNS 伺服器來進行名稱解析。儘管根名稱伺服器 IP 位址被硬編碼在設定檔(在綁定檔中)中,但當我為 的根名稱伺服器/etc/bind/db.root
執行多個連續命令時,TTL 欄位仍然會減少。nslookup
.
當它被編碼到設定檔中時,為什麼 TTL 會減少?
當它被編碼時,為什麼首先需要根級別的 TTL?
答案1
通常,您會明確配置類似於下列程式碼片段的 DNS 根伺服器:
zone "." {
type hint;
file "/etc/bind/db.root";
};
您觀察到該區域類型既不是常見的,master
也不slave
是特區類型被稱為hint
。
當名稱伺服器啟動時,它僅使用根提示來尋找回應的根名稱伺服器,然後從那裡取得根名稱伺服器的目前清單。這些是在操作期間實際使用的根伺服器。
由於這些記錄已被緩存,因此它們需要 TTL,正如您所觀察到的:該 TTL 會像任何其他快取的 DNS 記錄一樣減少。
如果沒有為類別 IN 指定提示區域,伺服器將使用編譯的預設根伺服器提示集。來源:綁定管理員參考手冊。
正如Brian 在他的回答中解釋的那樣,根區域確實會發生變化,只要至少一個名稱伺服器保持有效,提示區域就允許在根名稱伺服器中進行此類更改,而不需要所有現有名稱伺服器更新其靜態設定檔。
答案2
它們不是永久硬編碼的 - 根區域檔案確實會隨著時間的推移而改變,因此傳遞給解析器的條目不能設定為永久有效。
例如,目前版本的最後更新時間為 2014 年,如文件開頭所示這裡:
; This file holds the information on root name servers needed to
; initialize cache of Internet domain name servers
; (e.g. reference this file in the "cache . <file>"
; configuration file of BIND domain name servers).
;
; This file is made available by InterNIC
; under anonymous FTP as
; file /domain/named.cache
; on server FTP.INTERNIC.NET
; -OR- RS.INTERNIC.NET
;
; last update: November 05, 2014
; related version of root zone: 2014110501
;
; formerly NS.INTERNIC.NET
;
. 3600000 NS A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4
A.ROOT-SERVERS.NET. 3600000 AAAA 2001:503:ba3e::2:30
答案3
db.root 僅用作 DNS 伺服器啟動過程的一部分,用於尋找目前真正的根伺服器。然後根據 TTL 更新這些內容。