1. 程式人生 > >DNS伺服器搭建與配置

DNS伺服器搭建與配置

DNS服務簡介:

DNS(Domain Name System–域名系統),是因特網的一項服務。它作為將域名和IP地址相互對映的一個分散式資料庫,能夠使人更方便地訪問網際網路。是一個應用層的協議DNS使用TCP和UDP埠53。

DNS是一個分散式資料庫,命名系統採用層次的邏輯結構,如同一顆倒置的樹,這個邏輯的樹形結構稱為域名空間,由於DNS劃分了域名空間,所以各機構可以使用自己的域名空間建立DNS資訊.

注:DNS域名空間中,樹的最大深度不得超過127層,樹中每個節點最長可以儲存63個字元.

DNS名詞解釋:

1. 域和域名

DNS樹的每個節點代表一個域.通過這些節點,對整個域名空間進行劃分,成為一個層次結構.

域名空間的每個域的名字,通過域名進行表示.

域名:通常由一個完全合格域名(FQDN)標識.FQDN能準確表示出其相對於DNS 域樹根的位置,也就是節點到DNS 樹根的完整表述方式,從節點到樹根採用反向書寫,並將每個節點用“.”分隔,對於DNS 域google 來說,其完全正式域名(FQDN)為google.com.

例如:google為com域的子域,其表示方法為google.com,而www為google域中的子域,可以使用www.google.com表示

注意:通常,FQDN 有嚴格的命名限制,長度不能超過256 位元組,只允許使用字元a-z,0-9,A-Z和減號(-).點號(.)只允許在域名標誌之間(例如“

google.com”)或者FQDN 的結尾使用.

域名不區分大小.

由最頂層到下層,可以分成:根域、頂級域、二級域、子域.

Internet 域名空間的最頂層是根域(root),其記錄著Internet 的重要DNS 資訊,由Internet域名註冊授權機構管理,該機構把域名空間各部分的管理責任分配給連線到Internet 的各個組織.

“.”全球有13個根(root)伺服器

DNS 根域下面是頂級域,也由Internet 域名註冊授權機構管理.共有3 種類型的頂級域.

組織域:採用3 個字元的代號,表示DNS 域中所包含的組織的主要功能或活動.比如com 為商業機構組織,edu 為教育機構組織,gov 為政府機構組織,mil 為軍事機構組織,net 為網路機構組織,org 為非營利機構組織,int 為國際機構組織.

地址域:採用兩個字元的國家或地區代號.如cn 為中國,kr 為韓國,us 為美國.

反向域:這是個特殊域,名字為in-addr.arpa,用於將IP 地址對映到名字(反向查詢).

對於頂級域的下級域,Internet 域名註冊授權機構授權給Internet 的各種組織.當一個組織獲得了對域名空間某一部分的授權後,該組織就負責命名所分配的域及其子域,包括域中的計算機和其他裝置,並管理分配域中主機名與IP 地址的對映資訊.

2、區(Zone):

區是DNS 名稱空間的一部分,其包含了一組儲存在DNS 伺服器上的資源記錄.

使用區的概念,DNS 伺服器回答關於自己區中主機的查詢,每個區都有自己的授權伺服器.

3.主域名伺服器和輔助域名伺服器:

當區的輔助伺服器啟動時,它與該區的主控伺服器進行連線並啟動一次區傳輸,區輔助伺服器定期與區主控伺服器通訊,檢視區資料是否改變.如果改變了,它就啟動一次資料更新傳輸.每個區必須有主伺服器,另外每個區至少要有一臺輔助伺服器,否則如果該區的主伺服器崩潰了,就無法解析該區的名稱.

輔助伺服器的優點:

  1. 容錯能力

    配置輔助伺服器後,在該區主伺服器崩潰的情況下,客戶機仍能解析該區的名稱.一般把區的主伺服器和區的輔助伺服器安裝在不同子網上,這樣如果到一個子網的連線中斷,DNS 客戶機還能直接查詢另一個子網上的名稱伺服器.

  2. 減少廣域鏈路的通訊量

    如果某個區在遠端有大量客戶機,使用者就可以在遠端新增該區的輔助伺服器,並把遠端的客戶機配置成先查詢這些伺服器,這樣就能防止遠端客戶機通過慢速鏈路通訊來進行DNS 查詢.

  3. 減輕主伺服器的負載

    輔助伺服器能回答該區的查詢,從而減少該區主伺服器必須回答的查詢數.

4.DNS相關概念:

  • DNS伺服器:

    執行DNS 伺服器程式的計算機,儲存DNS 資料庫資訊.DNS 伺服器會嘗試解析客戶機的查詢請求.

    在解答查詢時,如果DNS 伺服器能提供所請求的資訊,就直接回應解析結果,如果該DNS 伺服器沒有相應的域名資訊,則為客戶機提供另一個能幫助解析查詢的伺服器地址,如果以上兩種方法均失敗,則迴應客戶機沒有所請求的資訊或請求的資訊不存在.

  • DNS快取:

    執行DNS 伺服器程式的計算機,儲存DNS 資料庫資訊.DNS 伺服器會嘗試解析客戶機的查詢請求.

    在解答查詢時,如果DNS 伺服器能提供所請求的資訊,就直接回應解析結果,如果該DNS 伺服器沒有相應的域名資訊,則為客戶機提供另一個能幫助解析查詢的伺服器地址,如果以上兩種方法均失敗,則迴應客戶機沒有所請求的資訊或請求的資訊不存在.

5、DNS兩種查詢方式:

  1. 遞迴查詢:

    遞迴查詢是一種DNS 伺服器的查詢模式,在該模式下DNS 伺服器接收到客戶機請求,必須使用一個準確的查詢結果回覆客戶機.如果DNS 伺服器本地沒有儲存查詢DNS 資訊,那麼該伺服器會詢問其他伺服器,並將返回的查詢結果提交給客戶機.

  2. 迭代查詢:

    DNS 伺服器另外一種查詢方式為迭代查詢,當客戶機發送查詢請求時,DNS 伺服器並不直接回複查詢結果,而是告訴客戶機另一臺DNS 伺服器地址,客戶機再向這臺DNS 伺服器提交請求,依次迴圈直到返回查詢的結果為止.

6、正向解析和方向解析:

  • 正向解析:是指域名到IP地址的解析過程。
  • 反向解析:是指IP地址到域名的解析過程。

7、DNS資源記錄:

  1. SOA 資源記錄(全區唯一)

    每個區在區的開始處都包含了一個起始授權記錄(Start of Authority Record),簡稱SOA 記錄.

    SOA 定義了域的全域性引數,進行整個域的管理設定.一個區域檔案只允許存在唯一的SOA 記錄.

  2. NS 資源記錄:

    NS(Name Server)記錄是域名伺服器記錄,用來指定該域名由哪個DNS伺服器來進行解析.每個區在區根處至少包含一個NS 記錄.

  3. A 資源記錄

    地址(A)資源記錄把FQDN 對映到IP 地址. 因為有此記錄,所以DNS伺服器能解析FQDN域名對應的IP 地址.

    A :是IPv4地址。 AAAA是IPv6主機地址。

  4. PTR 資源記錄

    相對於A 資源記錄,指標(PTR)記錄把IP地址對映到FQDN. 用於反向查詢,通過IP地址,找到域名.

  5. CNAME 資源記錄

    別名記錄(CNAME)資源記錄建立特定FQDN 的別名.使用者可以使用CNAME 記錄來隱藏使用者網路的實現細節,使連線的客戶機無法知道真正的域名.

    例:ping百度時,解析到了百度的別名伺服器.百度有個cname=www.a.shifen.com.的別名

  6. MX 資源記錄

    郵件交換(MX)資源記錄,為DNS 域名指定郵件交換伺服器.

    郵件交換伺服器是為DNS 域名處理或轉發郵件的主機.處理郵件指把郵件投遞到目的地或轉交另一不同型別的郵件傳送者.轉發郵件指把郵件傳送到最終目的伺服器,用簡單郵件傳輸協議SMTP 把郵件傳送給離最終目的地最近的郵件交換伺服器,或使郵件經過一定時間的排隊.

DNS工作原理:查詢過程

假設www.abc.com的主機要查詢www.xyz.abc.com的伺服器ip地址。

遞迴查詢:

第一步:在hosts靜態檔案、DNS解析器快取中查詢某主機的ip地址

hosts檔案:以靜態對映的方式提供IP地址與主機名的對照表,類似ARP表

第二步:上一步無法找到,去DNS本地伺服器(即域伺服器)查詢,其本質是去區域伺服器、伺服器快取中查詢

第三步:本地DNS伺服器查不到就根據‘根提示檔案’向負責頂級域‘.com’的DNS伺服器查詢

第四步:‘根DNS伺服器’根據查詢域名中的‘xyz.com’,再向xyz.com的區域伺服器查詢

第五步:www.xyz.abc.com的DNS伺服器直接解析該域名,將查詢到的ip再原路返回給請求查詢的主機

迭代查詢

第一步:在hosts靜態檔案、DNS解析器快取中查詢某主機的ip地址

第二步:上一步無法找到,在DNS本地伺服器(即域伺服器)查詢所有本層次的區域伺服器

第三步:本地DNS伺服器查不到就查詢上一層次的所有區域伺服器,以此類推直至根域名DNS伺服器‘.’

第四步:到達根域名伺服器後又向下查詢,直至查到結果為止。

迭代查詢與遞迴查詢結合

遞迴查詢需要經過逐層查詢才能獲得查詢結果,當查詢具有許多層次的DNS結構時效率很低,所以一般採用兩者相結合的查詢方式。

第一步:在hosts靜態檔案、DNS解析器快取中查詢某主機的ip地址

第二步:上一步無法找到,去DNS本地伺服器(即域伺服器)查詢,其本質是去區域伺服器、伺服器快取中查詢

第三步:本地DNS伺服器查不到就根據‘根提示檔案’向負責頂級域‘.com’的根DNS伺服器查詢

第四步:根DNS伺服器直接將其區域DNS伺服器的ip地址返回給本地伺服器,而不用再向xyz.com的區域伺服器查詢。

第五步:本地DNS伺服器將結果返回給請求的主機

在這裡插入圖片描述

圖:DNS查詢流程圖

Linux下DNS伺服器安裝

BIND簡介:

BIND(Berkeley Internet Name Domain,伯克利因特網名稱域)服務是全球範圍內使用最廣泛、最安全可靠且高效的域名解析服務程式。DNS域名解析服務作為網際網路基礎設施服務,其責任之重可想而知,因此建議大家在生產環境中安裝部署bind服務程式時加上chroot(俗稱牢籠機制)擴充套件包,以便有效地限制bind服務程式僅能對自身的配置檔案進行操作,以確保整個伺服器的安全。

安裝bind服務和啟動步驟:

[[email protected] ~]# yum install -y bind*
#安裝bind元件
[[email protected] ~]# systemctl start named
#啟動dns服務
[[email protected] ~]# systemctl enable named
#設定dns服務開機啟動
Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.

DNS配置的主要檔案組:

  • /etc/hosts  主機的一個檔案列表   新增記錄如:111.13.100.92 www.baidu.com

    對於簡單的主機名解析(點分表示法),預設在請求DNS或NIS網路域名伺服器前,/etc/named.conf 通常會告訴程式先檢視此檔案。

  • /etc/resolv.conf  轉換程式配置檔案

    在配置程式請求BIND域名查詢服務查詢主機名時,必須告訴程式使用哪個域名伺服器和IP地址來完成這個任務

  • /etc/named.conf  BIND主檔案

    設定一般的name引數,指向該伺服器使用的域資料庫的資訊源

  • /var/named/named.ca  根域名配置伺服器指向檔案

    指向根域名配置伺服器,用於告訴快取伺服器初始化

  • /var/named/localhost.zone  localhost區正向域名解析檔案

    用於將本地IP地址(127.0.0.1)轉換為本地回送IP地址(127.0.0.1)

  • /var/named/name.local  localhost區反向域名解析檔案

    用於將localhost名字轉換為本地回送IP地址(127.0.0.1)

  • /etc/named.rfc1912.zones  區塊設定檔案

name.conf檔案的主要配置資訊:

  • acl  定義ip地址的訪問控制清單
  • control  定義rndc使用的控制通道
  • include  把其他的檔案包含到配置檔案中
  • key  定義授權的安全金鑰
  • logging  定義日誌內容和位置
  • options  定義全域性配置選項和預設值
  • server  定義遠端服務的特徵
  • zone  定義一個區

DNS的資源記錄(Resource Record, RR)格式:

DNS域名資料庫有資源記錄和區檔案指令組成,由SOA(Start Of Authority起始授權機構記錄,SOA 記錄說明了在眾多NS記錄裡那一臺才是主名稱伺服器。
RR開始,同時包括NS RR;
正向解析檔案包括A internet Address,作用,FQDN --> IP) 
MX (Mail eXchanger,郵件交換器)
CNAME(Canonical NAME 別名) 
反向解析檔案包括PTR(PTR: PoinTeR,IP --> FQDN)

RR 語法:name  [TTL]  IN  type  value (欄位之間由空格和製表符隔開)

注意: (1) TTL可從全域性繼承  (2) @可用於引用當前區域的名字   (3) 同一個名字可以通過多條記錄定義多個不同的值;此時 DNS伺服器會以輪詢方式響應   (4) 同一個值也可能有多個不同的定義名字;通過多個不同的 名字指向同一個值進行定義;此僅表示通過多個不同的名字 可以找到同一個主機

SOA記錄:name: 當前區域的名字,例如“heiye.com.”   value: 有多部分組成 (1) 當前區域的主DNS伺服器的FQDN,也可以使用當前區域的名字;  

(2) 當前區域管理員的郵箱地址;地址中不能使用@符號,一般用.替換 如linuxedu.heiye.com  (3) 主從服務區域傳輸相關定義以及否定的答案的統一的TTL 

例如: heiye.com.  86400   IN   SOA   ns.heiye.com.

    nsadmin.heiye.com.   (
        2015042201 ;
        序列號 2H ;
        重新整理時間 10M ;
        重試時間 1W ;
        過期時間 1D ;
        否定答案的TTL值
   )

NS記錄:name: 當前區域的名字   value: 當前區域的某DNS伺服器的名字,例如 ns.heiye.com. 注意:一個區域可以有多個NS記錄

例如:heiye.com.   IN   NS  ns1.heiye.com.  

   heiye.com.   IN   NS     ns2.heiye.com.

注意: (1) 相鄰的兩個資源記錄的name相同時,後續的可省略 
(2) 對NS記錄而言,任何一個ns記錄後面的伺服器名字 ,都應該在後續有一個A記錄

MX記錄(Mail eXchanger):name: 當前區域的名字   value: 當前區域的某郵件伺服器(smtp伺服器)的主機名 , 一個區域內,MX記錄可有多個;

但每個記錄的value之前應 該有一個數字(0-99),表示此伺服器的優先順序;數字越小優 先級越高  例如:
heiye.com.   IN   MX   10   mx1.heiye.com.
            IN   MX   20   mx2.heiye.com.

注意: (1) 對MX記錄而言,任何一個MX記錄後面的伺服器名字 ,都應該在後續有一個A記錄

A記錄(Addrss):name: 某主機的FQDN,例如www.heiye.com.   value: 主機名對應主機的IP地址

例如: www.heiye.com.   IN   A   1.1.1.1   
    www.heiye.com.   IN   A   2.2.2.2   
    mx1.heiye.com.   IN   A   3.3.3.3
    mx2.heiye.com.      IN   A   4.4.4.4
    *.heiye.com.      IN   A   5.5.5.5
    heiye.com.     IN   A    6.6.6.6   
避免使用者寫錯名稱時給錯誤答案,可通過泛域名解析進行解 析至某特定地址

其他記錄:AAAA: name: FQDN   value: IPv6     

     PTR: name: IP,有特定格式,把IP地址反過來寫,1.2.3.4,要寫 作4.3.2.1;而有特定字尾:in-addr.arpa.,所以完整寫法為 :

4.3.2.1.in-addr.arpa.   value: FQDN

例如: 4.3.2.1.  in-addr.arpa.   IN   PTR   www.heiye.com.

如1.2.3為網路地址,可簡寫成: 4   IN   PTR   www.heiye.com.

注意:網路地址及字尾可省略;主機地址依然需要反著寫

別名記錄:name: 別名的FQDN   value: 真正名字的FQDN

例如: www.heiye.com.   IN   CNAME   websrv.heiye.com.

named欄位:

	(1)根域以” . “結束,並且只有一個,沒有上級域。而在Internet中,根域一般不需要表現出來。

	(2)@:預設域,檔案使用$ORIGIN domain 來說明預設域。

	(3)ttl 全稱”Time to Live “,以秒為單位記錄該資源記錄中存放快取記憶體中的時間長度。通常此處設為空,表示採用SOA的最小ttl值。

	(4)IN:將該記錄標誌為一個Internet DNS資源記錄。

type欄位:

	(1)A記錄:主機名對應的IP地址記錄,使用者可將該域名下網站伺服器指向自己的Web伺服器,同時也可設定域名的二級域名。

	(2)MX記錄:郵件交換記錄可將該域下所有郵件伺服器 指向自己的郵件伺服器,只需線上填寫伺服器的IP地址。

	(3)CNAME記錄:別名記錄,可允許多個名字對映到同一計算機,通常用於同時提供Web和郵件伺服器的計算機。

	(4)SOA記錄:一個授權區的開始,配置檔案的第一個記錄必須是SOA的開始。

	(5)PTR記錄:用於地址到主機名的對映。

	(6)HINFO記錄:由一組描述主機的資訊檔案組成,通常包括硬體名稱和作業系統名稱。

value欄位:

	(1)A :存放IP地址。

	(2)CNAME:設定主機別名。

	(3)HINFO:通常為兩行,分別對應Hareware(計算機硬體名稱)和OS-type(作業系統名稱)。

	(4)NS:域名伺服器的名稱。

	(5)PTR:主機真實名稱。

測試檢查配置檔案錯誤的工具:nslookup、dig、named-checkzone、host、named-checkconf及dlint。

Linux下DNS伺服器配置實驗

配置DNS正向解析:

在配置Bind服務時,主要用到以下三個配置檔案:

  • 主配置檔案(/etc/named.conf):用來定義bind服務程式的執行。

  • 區域配置檔案(/etc/named.rfc1912.zones):用來儲存域名和IP地址對應關係的所在位置。類似於圖書的目錄,對應著每個域和相應IP地址所在的具體位置,當需要檢視或修改時,可根據這個位置找到相關檔案。

  • 資料配置檔案目錄(/var/named):該目錄用來儲存域名和IP地址真實對應關係的資料配置檔案。

第一步:修改主配置檔案/etc/named.conf。將監聽地址和執行查詢的地址都改為 any,分別表示伺服器上的所有IP地址均可提供DNS域名解析服務,以及允許所有人對本伺服器傳送DNS查詢請求。

在這裡插入圖片描述

圖:主配置檔案要修改的地方

第二步:修改區域配置檔案(/etc/named.rfc1912.zones)。用來儲存域名和IP地址對應關係的所在位置。在這個檔案中,定義了域名與IP地址解析規則儲存的檔案位置以及服務型別等內容,而沒有包含具體的域名、IP地址對應關係等資訊。服務型別有三種,分別為hint(根區域)、master(主區域)、slave(輔助區域),其中常用的master和slave指的就是主伺服器和從伺服器。

zone "example.com" IN {
        type master;
        file "example.com.zone";

DNS預設埠是53的TCP和UPD,UDP是供使用者查詢的,主從複製用TCP和UDP的53埠都用。

BIND的ACL:bind有四個內建的acl:

none: 沒有一個主機

any: 任意主機

localhost: 本機

localnet: 本機的IP同掩碼運算後得到的網路地址段

注意:只能先定義,後使用;因此一般定義在配置檔案中, 處於options的前面,當然也可自定義如下

acl lan{

​   192.168.25.0/24

} ;

訪問控制:

訪問控制的指令: allow-query {}: 允許查詢的主機;白名單

allow-transfer {}:允許區域傳送的主機;(白名單,一般用於主從)

allow-recursion {}: 允許遞迴的主機,建議全域性使用

allow-update {}: 允許更新區域資料庫中的內容

第三步:編輯資料配置檔案。**從/var/named目錄中複製一份正向解析的模板檔案(named.localhost),然後把域名和IP地址的對應資料填寫資料配置檔案中並儲存。在複製時記得加上-a引數,這可以保留原始檔案的所有者、所屬組、許可權屬性等資訊,以便讓bind服務程式順利讀取檔案內容:

[[email protected] named]# cp -a named.localhost example.com
[[email protected] named]# vim example.com.zone 
$TTL 1D
@       IN SOA  @ example.com.   (
	 #授權資訊開始:   #DNS區域的地址,在域地址後面還可以加管理員郵箱,不能加@,用.代替。
              20181001        ; serial  #更新序列號
                      1D      ; refresh #更新時間
                      1H      ; retry   #重試時間
                      1W      ; expire   #失效時間
                      3H )    ; minimum  #無效解析記錄的快取時間
        NS      ns.example.com.  #DNS區域的地址
ns      A       192.168.245.128  #地址記錄
www     A       192.168.245.128  #www站點記錄
mail    A       192.168.245.129  #地址記錄
        MX 10   mail.example.com. #郵箱交換記錄
example.com.    A 192.168.245.200
# 即使不寫主機名,DNS也能解析到另外一個指定的地址
$GENERATE 1-245 server$ A 1.1.1.$
#如果伺服器過多,對應主機名也很多,則可以這樣寫.例如:
#server1.example.com對應地址為:1.1.1.1
#server100.exmaple.com對應地址為:1.1.1.50
bbs     CNAME   www           #別名記錄
*       A       192.168.245.128
#“*”代表所有,即便主機www寫錯,DNS也能正確解析出來。這就是泛域名解析

在這裡插入圖片描述

圖:正向解析檔案配置

第四步:檢查配置,重啟服務和測試。

檢查和重啟服務:

[[email protected] ~]# named-checkconf   #檢查主配置檔案語法
[[email protected] ~]# named-checkzone eample.com /var/named/example.com.zone 
#檢查區域配置檔案語法
/var/named/example.com.zone:13: ignoring out-of-zone data (example.com)
zone eample.com/IN: loaded serial 20181001
[[email protected] ~]# vi /etc/resolv.conf
#進入該配置檔案,指定使用的域名解析伺服器。
	# Generated by NetworkManager
	nameserver 192.168.245.128
	search 192.168.245.128
[[email protected] ~]# systemctl restart named  #重啟服務

測試:

在這裡插入圖片描述

圖;正向解析測試

正向解析測試

nslookup測試

配置DNS反向解析:

在DNS域名解析服務中,反向解析的作用是將使用者提交的IP地址解析為對應的域名資訊,它一般用於對某個IP地址上繫結的所有域名進行整體遮蔽,遮蔽由某些域名傳送的垃圾郵件。它也可以針對某個IP地址進行反向解析,大致判斷出有多少個網站執行在上面。當購買虛擬主機時,可以使用這一功能驗證虛擬主機提供商是否有嚴重的超售問題。

第一步:配置區域檔案。

反向解析是把IP地址解析成域名格式,因此在定義zone(區域)時應該要把IP地址反寫,比如原來是192.168.10.0,反寫後應該就是10.168.192,而且只需寫出IP地址的網路位即可。

[[email protected] ~]# vim /etc/named.rfc1912.zones
#在中新增反向資料檔案的記錄
zone "245.168.192.in-addr.arpa" IN {
        type master;
        file "245.168.192.arpa";
};

第二步:編輯資料配置檔案。

反向解析是把IP地址解析成域名格式,因此在定義zone(區域)時應該要把IP地址反寫,比如原來是192.168.10.0,反寫後應該就是10.168.192,而且只需寫出IP地址的網路位即可。

[[email protected] ~]# cp -a /var/named/named.loopback /var/named/245.168.192.arpa 
[[email protected] ~]# vi /var/named/245.168.192.arpa
#編輯反正配置檔案即可,和正向解析格式類似
#PTR為指標記錄,僅用於反向解析中。

在這裡插入圖片描述

圖:反向配置檔案

第三步:檢查配置檔案,重啟服務,測試。

[[email protected] ~]# named-checkconf 
[[email protected] ~]# named-checkzone 245.168.192 /var/named/245.168.192.arpa 
zone 245.168.192/IN: loaded serial 20181001
OK
[[email protected] ~]# systemctl restart named

在這裡插入圖片描述

圖:反向解析測試

搭建DNS主從伺服器:

從而起到備份解析記錄與負載均衡的作用,因此通過部署從伺服器可以減輕主伺服器的負載壓力,還可以提升使用者的查詢效率。

**第一步:**在主伺服器的區域配置檔案中允許該從伺服器的更新請求,即修改allow-update {允許更新區域資訊的主機地址;};引數,然後重啟主伺服器的DNS服務程式。

[[email protected] ~]# vi /etc/named.rfc191
zone "example.com" IN {
        type master;
        file "example.com.zone";
        allow-update { 192.168.245.129; };
};
zone "245.168.192.in-addr.arpa" IN {
        type master;
        file "245.168.192.arpa";
        allow-update { 192.168.245.129; };
};
[[email protected] ~]# systemctl restart named

第二步: 在從伺服器中填寫主伺服器的IP地址與要抓取的區域資訊,然後重啟服務。注意此時的服務型別應該是slave(從),而不再是master(主)。masters引數後面應該為主伺服器的IP地址,而且file引數後面定義的是同步資料配置檔案後要儲存到的位置,稍後可以在該目錄內看到同步的檔案。

[[email protected] ~]# vi /etc/named.conf
options {
        listen-on port 53 { any; }; #改為any,
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; }; #改為any,允許所有主機查詢
[[email protected] ~]# vi /etc/named.rfc191
zone "example.com" IN {
        type master;
        file "example.com.zone";
        allow-update { 192.168.245.129; };
};
zone "245.168.192.in-addr.arpa" IN {
        type master;
        file "245.168.192.arpa";
        allow-update { 192.168.245.129; };
};
[[email protected] ~]# vi /etc/named.conf^C
[[email protected] ~]# iptables -F  #關閉防火牆
[[email protected] ~]# setenforce 0
setenforce: SELinux is disabled
[[email protected] ~]# systemctl restart named
[[email protected] ~]# systemctl enable named

重啟以後,成功的話會在/var/named/slaves/下看見同步的檔案。

[[email protected] named]# ls /var/named/slaves/
245.168.192.arpa  example.com.zone

**第三步:測試。**可將從服務的DNS地址改為自己,進行地址解析。

[[email protected] named]# dig www.example.com

; <<>> DiG 9.9.4-RedHat-9.9.4-37.el7 <<>> www.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9870
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.example.com.               IN      A

;; ANSWER SECTION:
www.example.com.        86400   IN      A       192.168.245.128

;; AUTHORITY SECTION:
example.com.            86400   IN      NS      ns.example.com.

;; ADDITIONAL SECTION:
ns.example.com.         86400   IN      A       192.168.245.128

;; Query time: 1 msec
;; SERVER: 192.168.245.129#53(192.168.245.129)
;; WHEN: Tue Oct 16 11:19:04 CST 2018
;; MSG SIZE  rcvd: 93

這種情況下,證明DNS主從伺服器搭建成功。一旦主DNS發生故障,將自動利用DNS從伺服器進行解析,實現了某種程度上的容錯。

配置DNS安全的加密傳輸:

TSIG主要是利用了密碼編碼的方式來保護區域資訊的傳輸(Zone Transfer),即TSIG加密機制保證了DNS伺服器之間傳輸域名區域資訊的安全性。

第一步:在主服務上生產金鑰。dnssec-keygen命令用於生成安全的DNS服務金鑰,其格式為“dnssec-keygen [引數]”,常用的引數以及作用如下:

引數 作用
-a 指定加密演算法,包括RSAMD5(RSA)、RSASHA1、DSA、NSEC3RSASHA1、NSEC3DSA等
-b 金鑰長度(HMAC-MD5的金鑰長度在1~512位之間)
-n 金鑰的型別(HOST表示與主機相關)

使用下述命令生成一個主機名稱為master-slave的128位HMAC-MD5演算法的金鑰檔案。在執行該命令後預設會在當前目錄中生成公鑰和私鑰檔案,在傳輸配置檔案中會用到該祕鑰。

[[email protected] ~]# dnssec-keygen -a HMAC-MD5 -b 128 -n HOST master-slave 
Kmaster-slave.+157+15811
[[email protected] ~]# cat Kmaster-slave.+157+47396.key
master-slave. IN KEY 512 3 157 9+m1PlQOAF7xnMLClzNmXw==
[[email protected] ~]# cat Kmaster-slave.+157+47396.private 
Private-key-format: v1.3
Algorithm: 157 (HMAC_MD5)
Key: 9+m1PlQOAF7xnMLClzNmXw==  
Bits: AAA=
Created: 20181016033058
Publish: 20181016033058
Activate: 20181016033058

第二步:在主伺服器中建立驗證祕鑰檔案。

進入bind服務程式用於儲存配置檔案的目錄,把剛剛生成的金鑰名稱、加密演算法和私鑰加密字串按照下面格式寫入到tansfer.key傳輸配置檔案中。為了安全起見,我們需要將檔案的所屬組修改成named,並將檔案許可權設定得要小一點,然後把該檔案做一個硬連結到/etc目錄中。

[[email protected] ~]# vim /var/named/chroot/etc/transfer.key

key "master-slave" {
algorithm hmac-md5;
secret "9+m1PlQOAF7xnMLClzNmXw==";
};
[[email protected] ~]# chown root:named/var/named/chroot/etc/transfer.key
[[email protected] ~]# ln /var/named/chroot/etc/transfer.key /etc/transfer.key

第三步:開啟主伺服器金鑰驗證功能:

開啟並載入Bind服務的金鑰驗證功能。首先需要在主伺服器的主配置檔案中載入金鑰驗證檔案,然後進行設定,使得只允許帶有master-slave金鑰認證的DNS伺服器同步資料配置檔案:

在這裡插入圖片描述

include "/etc/transfer.key";             //在主伺服器中新增此條
options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };
        allow-transfer  { key master-slave; }; 

至此,DNS主伺服器的TSIG金鑰加密傳輸功能就已經配置完成。此時清空DNS從伺服器同步目錄中所有的資料配置檔案,然後再次重啟bind服務程式,這時就已經獲取不到主伺服器的配置檔案了。

第四步:配置從伺服器支援祕鑰驗證:

[[email protected] ~]# scp /var/named/chroot/etc/transfer.key [email protected]:/var/named/chroot/etc/transfer.key
[email protected]'s password: 
transfer.key                    100%   79     0.1KB/s   00:00 
[[email protected] ~]# chown root:named /var/named/chroot/etc/transfer.key
[[email protected]lhost ~]# ln /var/named/chroot/etc/transfer.key /etc/transfer.key

第五步:配置從伺服器配置檔案:

[[email protected] ~]# vi /etc/named.conf 

include "/etc/transfer.key"; #在此新增祕鑰檔案

options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };

        /* 
           recursion. 
           reduce such attack surface 
        */
        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

#在此新增主伺服器地址,位置不能太靠前,否則bind服務程式會因為沒有載入完預設引數而報錯:
server 192.168.245.128 {
        keys { master-slave; };
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

至此,主從伺服器配置完成,重啟服務後,可在/var/named/slaves/目錄下看到同步過來的檔案。

[[email protected] ~]# systemctl restart named
[[email protected] ~]# ls /var/named/slaves/
245.168.192.arpa  example.com.zone

配置DNS快取伺服器:

DNS快取伺服器(Caching DNS Server)是一種不負責域名資料維護的DNS伺服器。簡單來說,快取伺服器就是把使用者經常使用到的域名與IP地址的解析記錄儲存在主機本地,從而提升下次解析的效率。DNS快取伺服器一般用於經常訪問某些固定站點而且對這些網站的訪問速度有較高要求的企業內網中,但實際的應用並不廣泛。而且,快取伺服器是否可以成功解析還與指定的上級DNS伺服器的允許策略有關。

[[email protected] ~]# vim /etc/named.conf
options {
10 listen-on port 53 { any; };
11 listen-on-v6 port 53 { ::1; };
12 directory "/var/named";
13 dump-file "/var/named/data/cache_dump.db";
14 statistics-file "/var/named/data/named_stats.txt";
15 memstatistics-file "/var/named/data/named_mem_stats.txt";
16 allow-query { any; };
17 forwarders { 目標地址; }; #在此處新增轉發地址即可
......