DNS服務器


目錄

  • 什麼是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服務器,或知道出錯、超時爲止。(發生在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 { };   #用來針對遞歸和非遞歸,查詢不同的視圖
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章