- Linux運維最佳實踐
- 胥峰 楊俊俊
- 1602字
- 2019-01-04 00:50:51
最佳實踐1:禁用權威域名服務器遞歸查詢
我們經常聽說DNS的“遞歸查詢”和“迭代查詢”,那么到底什么是“遞歸查詢”,什么是“迭代查詢”呢?
我們并不直接回答這個復雜的問題,而是先從DNS相關的重要概念開始學習。只有理解了這些概念,才能真正回答這個問題。
DNS的組成部分
DNS的組成概括來講包括以下兩個部分。
·域名服務器(Name Server)。提供域名解析服務的軟件,一般監聽UDP、TCP的53端口。例如Linux系統中常見的BIND、Windows Server中集成的DNS服務器組件等。
·解析器(Resolver)。訪問域名服務器的客戶端,它負責解析從域名服務器獲取的響應,向調用它的應用返回IP地址或者別名等信息,例如Linux系統中的gethostbyname()函數、Windows系統中的nslookup等。
域名服務器的分類
域名服務器根據用途不同,可以進行如下分類。
1.權威域名服務器(Authoritative Name Server)
負責授權域下的域名解析服務,由上級權威域名服務器使用NS記錄進行授權。
有以下3級權威域名服務器。
(1)根域名服務器(Root Name Server)
最上層權威域名服務器,負責對.com、.cn、.org等頂級域名的向下授權。目前有13組這樣的服務器,詳見表1-1。
表1-1 根域名服務器分布情況表

注意
對于表1-1中的服務器,這里指出是13組,而不是13臺,是因為其中的大部分服務器采用了anycast技術,將其分布到不同地區,也就是說,雖然看起來只有13個IP,但實際的服務器數量遠遠超過了13臺。Anycast是在大型DNS系統中廣泛使用的多點部署、分布式方案,對于提高可用性、提高性能、抵抗DDOS有重要作用。有興趣的讀者可以參考Wikipedia上anycast技術的詳細介紹:https://en.wikipedia.org/wiki/Anycast。
(2)頂級域名服務器(Top Level Name Server)
頂級域名服務器有以下2類。
·通用頂級域名(Generic Top Level Domains,GTLD)服務器。例如服務于.com、.org、.info等授權的域名服務器。
·國家代碼頂級域名(Country Code Top Level Domains,CCTLD)服務器。例如服務于.uk、.cn、.jp等授權的域名服務器。
完整的頂級域名服務器列表,可以從http://www.iana.org/domains/root/db這個鏈接獲取。例如負責.cn授權的國家代碼頂級域名服務器,詳見表1-2。
表1-2 負責解析.cn的頂級域名服務器列表

(3)二級域名服務器(Second Level Name Server)
這類域名服務器,服務于具體域名解析,例如負責解析sdo.com域的域名服務器ns.uugame.com等。
以上3類權威域名服務器的授權結構可以參考圖1-1。

圖1-1 權威域名服務器的授權結構圖
2.緩存域名服務器(Caching Name Server)
這類域名服務器,負責接收解析器發過來的DNS請求,通過依次查詢根域名服務器→頂級域名服務器→二級域名服務器來獲得DNS的解析條目,然后把響應結果發送給解析器。同時根據DNS條目的TTL(Time To Live,存活時間)值進行緩存。
緩存域名服務器,有以下2個用途。
·用在企業局域網內部,作為該局域網的DNS服務器。這樣就可以避免內部用戶的主機訪問外部非授權的DNS服務器,避免DNS污染等問題。
·用于電信等運營商為其租戶提供域名解析服務。如上海電信的202.96.209.5和202.96.209.133都是此種類型的服務器。
·用于開放DNS解析服務。如Google的8.8.8.8、Norton安全DNS 199.85.126.30及國內的114.114.114.114等都是此類。
3.轉發域名服務器(Forwarding Name Server)
這類域名服務器,負責接收解析器發過來的DNS請求,轉發給指定的上級域名服務器獲得DNS的解析條目,然后把響應結果發送給解析器。和緩存域名服務器不同,這類域名服務器不進行任何的緩存,而僅僅是轉發。
遞歸查詢與迭代查詢的區別
在了解了DNS的重要概念之后,現在來研究“遞歸查詢”。
遞歸查詢可以使用圖1-2進行說明。

圖1-2 遞歸查詢架構圖
遞歸查詢,是指在圖1-2中角色為本地域名服務器上,它代替
解析器,依次查詢
根域名服務器→
頂級域名服務器→
二級域名服務器來獲得DNS的解析條目,然后把響應結果發送給
解析器。
迭代查詢,是指域名服務器并不直接代替解析器進行依次查詢,而是給它返回一個參考列表,這個參考列表里面指出了可以解析這個DNS請求的服務器,由解析器再次對該列表中的服務器進行DNS查詢以獲取DNS解析結果。
禁用遞歸查詢的原因與方法
通過對遞歸查詢和迭代查詢的分析可以知道,對于權威域名服務器,打開了遞歸查詢功能,相當于把它配置成了開放的DNS服務器,會造成大量的數據流量,影響正常業務提供。因此,在權威域名服務器上,需要禁用遞歸查詢。
在BIND里面配置禁用遞歸查詢的指令如下:
recursion no;