目錄
- 什麼是DNS
- DNS的解析方式
- DNS的完全轉發和部分轉發
-
DNS解析的ACL與視圖的設置
什麼是DNS?
DNS(Domain Name System,域名系統),萬維網上作爲域名和IP地址相互映射的一個分佈式數據庫,能夠使用戶更方便的訪問互聯網,而不用去記住能夠被機器直接讀取的IP數串。通過域名,最終得到該域名對應的IP地址的過程叫做域名解析(或主機名解析)。DNS協議運行在UDP協議之上,使用端口號53。大白話翻譯過來就是用來解析域名,獲取域名對應的ip地址,或者知道了ip地址,來獲取所對應的域名的服務。
DNS的解析方式
DNS查詢分類
1)按查詢方式:
-
遞歸查詢。 當DNS服務器接收到查詢請求時,不論成功或失敗,都會做出對應的響應。(發生在DNS客戶端與DNS服務器之間)。並且會再進行迭代查詢,這是有/etc/named.conf中的遞歸功能開啓了,如下圖所示。
- 迭代查詢。 DNS服務器根據自己的高速緩存或區域的數據,以最佳結果響應。如果DNS服務器無法解析,它可能返回一個指針。指針指向下級域名的DNS服務器,繼續該過程,直到找到擁有所查詢名字的DNS服務器,或知道出錯、超時爲止。(發生在DNS服務器之間)
以上圖爲例,我們要解析“www.lishuyang.com”這個域名,那麼迭代查詢便開始從根服務器開始查詢,但是根服務器只能解析到com,然後根服務器反饋給客戶端com的IP地址,客戶端再去請求com服務器,同樣的,com服務器解析到了lishuyang.com,並將該服務器的ip返回到客戶端,照此一直往下查詢,最終得到我們的目的域名的ip。
2)按內容分類
-
正向查詢: 由域名查找IP地址。
- 反向查詢: 有IP地址查找域名。
DNS的完全轉發和部分轉發
1、完全轉發:當DNS服務器收到查詢請求的時候會先看看是不是查詢本域的信息,本地緩存是否有數據,如果不能使用本地數據解析DNS會將查詢請求發送給轉發器,此時是以遞歸查詢的方式發送給轉發器的,而在標準的DNS解析中,DNS服務器將以迭代查詢的形式發送給另一個DNS服務器。
所謂的 forwarder,就是當某一臺 NS 主機遇到非本機負責的 zone ( slave zone 也屬於本機負責的範圍) 查詢請求的時候,將不直接向 "." zone 查詢,而把請求轉交給指定的 forwarder (一臺或多臺) 主機代爲查詢。我們知道,當DNS服務器接到客戶端主機的查詢請求時,首先會檢查這個查詢是否屬於本機管轄,否則將轉向 "." zone 再逐級的查詢下去,最後再把查詢結果告訴客戶端。在這個過程之中,DNS服務器還會將查詢到的結果存放到緩存中。只要緩存中的 TTL 沒過期,在下次遇到同樣查詢的時候,就可以直接將結果響應給客戶端,而無需再重複上次的查詢流程。如果DNS服務器上指定了forwarder,那這個DNS發現緩存中沒有記錄時,將不向 "." 查詢,而是向 forwarder 送出同樣的請求(轉發),然後等待查詢結果,即把逐級往下查詢這個耗費精力的動作,交給 forwarder 負責。但無論這個結果是自己直接查詢得來的,還是 forwarder 送回來的,DNS服務器都會保存一份數據在緩存中。這樣,以後的相同查詢就快多了,這對於DNS所服務的客戶端而言查詢效率會提高很多。
當forwarder沒有返回答案時,奔DNS會自己去遠端請求。但是如果配置了forward only; 則他僅僅處理轉發,而不自己查詢。
2、部分轉發(只轉發解析某個域的DNS):假設有兩個域,a.com和b.com,a.com這個域是經過授權(向上級註冊,也就是.com知道他的存在)的,而b.com這個域沒有經過授權,此時如果a.com中的一臺主機要訪問www.b.com就會出現訪問不了,但是如果a.com知道b.com這個域的DNS主機是誰,即便b.com沒有經過授權,這時a.com的DNS可以設一個部分轉發,將本域所有要求解析b.com域的請求全部都發給b.com這個域的DNS主機就可以了。
部分轉發一般用於訪問未經授權的DNS域。配置格式
zone “b.com” IN {
type forward;
forwarders {IP;};
};
DNS解析ACL與視圖設置
ACL定義:把一個或多個主機歸併爲一個集合,並通過一個統一的名稱調用
acl acl_name{
ip;
ip;
net/prelen;
} ;
實例:
acl mynet{機
172.25.0.0/46;
};
bind 由四個內置的acl
none: 沒有一個主機
any: 任意主機
local: 本機
localnet:本機的IP同掩碼運算後得到的網絡地址
注意: acl,先定義後使用,一般定義在配置文件中的option前面
訪問控制的指令:
allow-query {}; #允許查詢的主機 (白名單)
allow-transfer {}; #允許區域傳送的主機 (白名單)
allow-recursion {}; #允許遞歸的主機(通常全局option)
allow-upadte {}; #允許更新區域數據庫中內容
(二)視圖( view)
-
一旦啓用view,所有zone都只能定義在view中
-
僅有必要在匹配到允許遞歸請求(本地dns)的客戶端所在view中定義根區域
-
客戶端請求到達時,是自上而下匹配每個view所服務的客戶端列表
-
一個bind服務器可以定義多個view,每個view中可定義一個或多個zone
-
每個view用來匹配一組客戶端請求
- 多個view可能對同一個區域進行解析,但使用不同的區域解析文件
實例
view VIEW_NAME {
match-clients { }; #指定不同主機(客戶端),看到不同視圖 match-destinations { }; #指定不同IP,看到不同視圖
match-recursive-only { }; #用來針對遞歸和非遞歸,查詢不同的視圖
};