若要指向非管轄的 DNS 主機,要告知對方,以防無法解析名稱

當本機指定某臺 DNS 為名稱解析服務時,若該臺 DNS 並沒有在此網域運行,則會造成解析錯誤等訊息,特別在新版 Bind 9.x 中,以舊版 Bind 8.x 為例,當我們查詢 www.xxx.com.tw 的主機時,若該網域的 DNS 只有 xxx.com.tw , NS Record 無法查詢到 www 主機時,會自動向 A Record 查詢,只要 A Record 具備 www 主機的 IP 位址,依然會導向 www 主機,然而新版 Bind 9.x 中,則會一直查詢 NS Record 的資料,無法釋放資料,造成解析錯誤。國內大多數企業都將 DNS 指向 Hinet ,而 Hinet 則是採用舊版系統,比較沒有這種問題,若指向 TWNIC 的 DNS ,則因為採用新版系統,可能造成 DNS 無法授權。

< 實例說明 1>

DNS模式

Domain Name Server

IP

www.xxx.com.tw

1.1.1.1

ftp.xxx.com.tw

2.2.2.2

 

常見錯誤設定

DNS 指定 : DNS 模式
指定了 www.xxx.com.tw 及ftp.xxx.com.tw 為 NameServer (NS) ,但實際上並沒有架設 DNS Server

問題

這樣的設定是不正確的,上層的 DNS 已經將網域委任出去,但是下層卻沒有可以回應的機器,會造成整個網域找不到的現象

正確做法

需自設 DNS 伺服器

原因

若指定了 name server 但實際 name server 該主機又沒有該域名之 DNS 在運行,會造成一些問題,在新版的 DNS server( 如 BIND 9) 有可能造成無法解析的結果。

有部分的狀況會可以查得到,例如 Hinet 的 DNS Server (dns.hinet.net)

原因是該 DNS Server 的版本較舊會直接對 A 紀錄作回應所以會查得到但在其他較新的 DNS Server 上則會出現查不到的現象 . 因為國內有很多人將 DNS指向 hinet , 故問題可能較不明顯,以 TWNIC 常接到的問題都是國內信件會通,但國外有些地方不通,有些原因即是如此所造成的,因為 DNS 授權出去而沒有對應所照成所致。(BIND 8 與 9 運作最不同點在於 BIND 9 會使用該 zone 所提供之 NS 記錄,而 BIND8 在這種狀況下會以 .com.tw. 中所提供的 A 記錄,因為如此,所以當對方使用 BIND 9 的版本時,即會有此類之問題 )

< 實例說明 2>

DNS模式

Domain Name Server

IP

ns1.xxx.com.tw

1.2.3.4

ns2.xxx.com.tw

1.2.3.5

某公司在上層指定了其 xxx.com.tw 的 Name Server 資料如下 :

ns1.xxx.com.tw 1.2.3.4
ns2.xxx.com.tw 1.2.3.5
而在其自身 DNS 的 xxx.com.tw 的 zone file 中的 ns 設定 如下
ns1.xxx.com.tw 11.22.33.44
ns2.xxx.com.tw 11.22.33.55
當在 dns.hinet.net 查詢該 domain NS 時,因為 hinet 是用 BIND 8.x ,BIND 8 在 Cache 資料時 , 是以第一個碰到記錄為主 , 所以會 Cache 到 1.2.3.4, 1.2.3.5 的結果 。但是當用 twnic.net.tw 查詢該 domain NS 時,因為 twnic 是用 BIND 9.X ,其 cache 資料預設是以權威主機 ( 當被詢問到有關本域名之內的主機名稱的時候, DNS 伺服器會直接做出回答,此一答案稱為權威回答 Authoritative Answer ,此一主機稱為權威主機 ) 為主 , 所以是 11.22.33.44, 11.22.33.55 的結果 。

顯然 BIND 9 的 Cache 結果較正確。

< 查詢 bind 版本 >

dig @dns.hinet.net.tw soa chaos txt version.bind
;; ANSWER SECTION:
VERSION.BIND. 0 CH TXT "BIND 8.1.2"
dig @twnic.net.tw soa chaos txt version.bind
;; ANSWER SECTION:
version.bind. 0 CH TXT "9.2.4rc6"