天天看點

DNS and BIND

  當用戶端想要去通路一個域名,首先就要去檢視他所在域空間的伺服器中是否有該域名,若沒有,則檢視該伺服器中的緩存資訊;若還是沒有,伺服器需要向用戶端遞歸傳回無法提供的資訊;不管結果如何都要向用戶端給一個“交代”;當目前域的伺服器無法滿足用戶端要求時,伺服器會直接把用戶端的要求發向根域,由根域進行查找,根域會通過域名尾部的頂級域判斷該域名的頂級域是什麼,再傳給該頂級域;如百度的頂級域為com,則傳給第一級頂級域com,com再去查找下屬的域名,查找到baidu這個域名後,再去查找baidu這個域名下的www主機,當找到後,将資訊回饋給用戶端;這種傳回給根域的查詢方式叫做疊代;用戶端送出請求後能夠收到的隻有兩種結果,一種是肯定的結果,能夠按用戶端的請求給出正确的名稱解析;第二種是否定答案,無法根據用戶端的請求作出回應;

  DNS伺服器分類有兩種,一種是至少負責一個域的資料庫,當遇到請求時可以先查找自身域是否滿足要求,若無,則将請求轉向根域;第二種是不負責任何域資料庫的,如聯通,移動等,當遇到請求時直接将其轉向根域;

  DNS伺服器中的資料,是網絡連接配接的根本;當DNS伺服器因為一些突然地事故而中斷時,對于一些在生産環境下的網絡服務使用者而言是一個很麻煩的問題;而針對于這類問題,DNS伺服器便發展為現在的主從通信機制;DNS主伺服器對于區域資料有讀寫功能,當主伺服器中的資料進行改變後,就會将資料更新到從伺服器上,而從伺服器隻能就行讀操作,沒有改寫資料的權限;若主伺服器長時間沒有進行更新,從伺服器會根據之前在主伺服器設定好的重新整理時間,進行主動更新;若從伺服器請求重新整理失敗的話,則根據重試時間重新請求重新整理;若從DNS一直無法聯系上主伺服器,那麼久根據設定好的過期時間,當達到期限時停止從DNS伺服器的工作;這對于這三個時間,需要注意的是主DNS伺服器和從DNS伺服器兩者之間的時間必須要同步,若不同步則會造成資訊混亂;

  重新整理時間間隔:refresh,從DNS伺服器每隔多長時間到主DNS伺服器上檢查序列号的變化情況;

  重試時間間隔:retry,從伺服器向主DNS伺服器要求同步資料庫失敗之後,再次發起嘗試請求的時間間隔;

  過期時間:expire,從DNS伺服器始終聯系不上主DNS伺服器時,從DNS伺服器多長時間之後停止服務;

  否定答案的緩存時常:minimal TTL

  DNS主從伺服器是如何保證主DNS伺服器與從DNS伺服器中的區域資料是一緻的,需要判斷什麼時候更新資料,什麼時候不更新資料;當主DNS伺服器出現修改後其序号會遞增;從伺服器根據判斷其序号是否遞增來判斷主伺服器是否修改,若遞增,則更新從伺服器,若不遞增則保持原樣;資料區域的傳送對于雙方而言,主伺服器可以主動要求更新,而從伺服器在滿足重新整理時間後也可以主動要求主伺服器進行更新操作;資料區域的傳送方式有兩種:

  增量傳送:IXFR;隻傳送上次未更新的資料;

  全量傳送:AXFR;傳送所有資料區域;

  區域是DNS伺服器用于進行正常的權威解析活動的必要的基礎;稱存放于區域資料庫檔案中的那些用于解析工作的資料為資源記錄,簡稱RR;

  資源記錄類型有七種:

  SOA:起始授權記錄,在任何一個區域資料檔案當中都要有一條SOA資源記錄,用于設定FQDN,郵件交換器,以及從DNS伺服器的重新整理時間,重試時間,過期時間和否定答案的緩存時間;

  NS:聲明目前域中所有DNS伺服器;

  MX:郵件交換伺服器,由郵件域名映射到完全合格域名;Domain-->FQDN

  A:設定完全合格域名映射到IP位址,可以映射NS,MX等伺服器的IP位址,并使用dig調用測試;針對于IPv4;

  AAAA:設定完全合格域名映射到IP位址,針對于IPv6;

  CNAME:設定别名,可以設定伺服器或域名的别名,通過别名進行調用測試;

  PTR:辨別從完全合格域名到IP位址的轉化,常用于反向區域的配置和解析;

  區域資料庫中資源記錄的定義格式:

    文法:name|FQDN [TTL] IN RR_TYPE VALUE

  需要在對應的配置檔案中書寫資源記錄,才能配備出一個DNS伺服器;由我們手動為DNS伺服器添加域名,FQDN,以及域名所對應的IP位址,域名所對應的别名等;

  區域資料資源記錄的開頭,可以是去除主機名的域名,也可以是FQDN,至于TTL可寫可不寫,用于整體實作的時間,RR_TYPE則是資源記錄的類型,VALUE表示不同資源記錄所代表的有效值;“@”符号可以用于引用目前區域的域名;我們可以用“@”來代替開頭的名稱;也可以通過宏定義的方式,如:

  若不采用宏定義的一條資源記錄:

  qhdlink.com. [TTL] IN RR_TYPE VALUE

  采用宏定義的一條資源記錄:

  $ORIGIN qhdlink.com.

  $TTL 86400

  IN RR_TYPE VALUE

  當采用宏定義的方式,之前所需要書寫的内容就會縮減,相當于之前聲明過的變量,如今不需要再去聲明;

  七種資源記錄:

  SOA記錄:

   name:目前域的域名,可以使用“@”替代;

    VALUE:

      1.目前區域的主DNS的域名,或者FQDN;

      2.目前區域資料庫管理者的郵件位址;郵件常用格式為[email protected]但是在資源記錄中卻不可以使用帶有特殊含義的“@”,這樣系統會認為其為mailqhdlink.com.com不符合郵件格式;将“@”符号替換為“.”即可;

      3.對應主伺服器序列号以及區域傳送的重新整理時間,重試時間,過期時間,否定答案緩存時間;

    如:

    ①

    qhdlink.com. 86400 IN SOA ns1.qhdlink.com. admin.qhdlink.com. (

                                         2017811;serial

                                         1H;refresh

                                         10M;retire

                                         1W;expire

                                         1D

                                         );ttl

    ②

    @ 86400 IN ns1.qhdlink.com. admin.qhdlink.com. (

    1H:一小時,從伺服器主動要求重新整理檢查是否需要更新;

    10M:十分鐘,從伺服器未得到回應,十分鐘後再次重試;

    1W:一周,一周後若主伺服器還未回應則停止從伺服器工作;

    1D:一天,否定時間;

  NS記錄:表示目前域中的所有伺服器,在使用NS記錄後,還要通過A記錄指定伺服器的IP位址,才能進行正常通路;

    name:目前域域名;可以在前方宏定義,省略name;

     VALUE:目前域中的完全合格域名;

       如:

         無宏定義:

           qhdlink.com. 86400 IN NS ns1.qhdlink.com.

         有宏定義:

           $ORIGIN qhdlin.com.

           $TTL 86400

           IN NS ns1

     注意:每個域中可以有多條NS記錄,但每條NS記錄隻能對應一個A記錄;

  MX記錄:郵件交換伺服器;

    name:目前域域名,可以在前方宏定義,省略name;

     VALUE:目前域中的有效郵件伺服器的主機名;

      如:

        無宏定義:

          qhdlink.com. 86400 IN MX mail.qhdlink.com.

        有宏定義:

          IN MX mail

    注意:每個域中可以有多條MX記錄,但每條MX記錄對應一個A記錄;

 A記錄: 

    name:域中某主機名稱或FQDN;

     VALUE:域中某主機名稱或FQDN所對應的IP位址;

      無宏定義:

      有宏定義:

       $ORIGIN qhdlink.com.

       $TTL 86400

       www IN A 172.16.72.1

  PTR記錄:

     name:将IP位址反過來寫,并在其字尾加反向域的标準字尾,是以其完整寫法應該是:

       1.72.16.172.in-addr.arpa

      value:FQDN

        如:

  BIND軟體:

   BIND--Berkeley Internet Name Domain, ISC(isc.org)

     bind-libs:為bind的其他應用程式提供共享庫檔案

     bind-utils:通用工具包,如:dig,host,nslookup等;

     bind:主程式包,包括DNS伺服器程式,解析庫,檢測工具;

     bind-chroot:設定僞根,啟用監牢模式;安全展現;

   BIND軟體隻需挂載CD光牒,使用yum指令安裝即可;

   BIND指令的主服務程序是named,接下來我們也要圍繞着named來進行DNS伺服器的配置工作;

   首先打開named程序服務;

     如:

       CentOS7:systemctl start named.service

       CentOS6-:service named start

       打開後使用status檢視狀态;

   bind:

     主配置檔案/etc/named.conf

       可以在主配置檔案中設定DNS伺服器的named程序監聽的IP位址,令其監聽DNS主伺服器IP地       址;可以設定允許那些主機查詢請求到伺服器,使用IP段的方式最好;4

     主配置檔案格式:

       1.注釋的方式:

         //:單行注釋;

         /* */:任意内容注釋;

        2.分段配置的特點:

          a.通路控制清單的定義段;

          acl ACL_NAME {...}; "分号結尾"

          b.全局選項段:

          options {...};

          c.日志配置段:

          logging {...};

          d.區域配置段:

          zone "ZONE_NAME" IN {...};

          e.視圖配置段:

          view VIEW_NAME {...};     

          f.include包含段:

          include /PATH/TO/SOME_CONFIG_FILE

   如:

listen-on port 53 { 127.0.0.1; 172.16.72.2; };:監聽端口53,53端口用于完成主機名的     查詢以及區域傳送;named程序監聽的IP位址;

     directory "/var/named";:區域資料庫的根目錄;在該目錄下建立檔案書寫資源記錄;

     allow-query     { 172.16.0.0/16; };:通路控制語句,預設是localhost,隻為自身服務     器提供查詢請求;修改為讓所有172.16網段的都可以通路DNS伺服器;

     recursion yes;全局開啟的遞歸查詢;預設為所有用戶端開啟遞歸查詢;

     初學時,建議關閉dnssec功能;

          dnssec-enable yes;

          dnssec-validation no;

          dnssec-lookaside no

  當配置好DNS伺服器後,需要去測試DNS伺服器的可用性,是否正确;這時候我們就需要一個能夠通過域名和IP位址來通路到指定的區域的工具;如dig,host以及nslookup;

  dig:

    dig [@Server] [-t RR_TYPE] [QUERY_OPTIONS]

    @Server:表示此次服務請求由主DNS伺服器來完成,Server為該伺服器IP位址;

    -t RR_TYPE:表示此次服務請求所要查詢的資源記錄;

    QUERY_OPTIONS:

     +[no]recurse:要求目标DNS伺服器必須[不]進行遞歸查詢;

     +[no]trace:對整個解析過程進行跟蹤,由根域開始直到指定主機;

    ①由域名正向解析

     去通路頂級域名com

     由com去找在他之下的baidu;找到5個與baidu相關的伺服器;

     表示baidu.com存在别名為a.shifen.com;可以通過别名通路baidu

    ②dig -x IPADDR

      由IP位址反向解析

     反向解析出該IP位址的資源記錄;

  host指令:

     host [-t RR_TYPE] DOMAIN_NAME SERVER

     host www.kernel.org 172.16.72.1(本機IP)

  nslookup指令:

     使用互動的方式來對域名或IP位址進行查詢;

     nslookup(互動指令)

     set type=RR_TYPE(設定查詢的資源記錄)

     set q=RR_TYPE(設定查詢的資源記錄)

     兩種設定方式

     如

     使用域名解析

  DNS伺服器配置:

   1.基本的正向和反向區域的配置和解析;

   2.主從伺服器的設定;

   3.子域和子域的委派;

   4.轉發器;

   5.通路控制清單和視圖;

   步驟

   ①配置DNS伺服器,首先需要将DNS主配置檔案/etc/named.conf中的監聽IP位址處加上該DNS伺服器的IP位址;如listen-on port 53 { 127.0.0.1; 172.16.72.2; };再将allow-query { 172.16.0.0/16; };修改為讓所有172.16網段都能通路該DNS伺服器;

   ②配置資料區域,資料區域的配置有正向反向之分,在/etc/named.rfc1912.zones中定義;

   如

   zone "ZONE_NAME" IN {

               type {master|slave|forward|hint};

               file "ZONE_NAME.zone";

           };括号後需要加分号

   type:

     master表示該資料區域為主DNS伺服器;

     slave表示該資料區域為從DNS伺服器;

   file:

      在該指令後的檔案名,作為相對路徑,需要在/etc/named/下建立對應的檔案;

   ③配置DNS伺服器的資源記錄;在/var/named/下建立與配置資料區域檔案相同的檔案名;如

qhdlink.com.zone;再在該檔案中書寫DNS伺服器的資源記錄; 

    第一條SOA記錄;在該檔案中的唯一一條;

    定義一條NS記錄,用來表示目前唯一的伺服器;

    定義一條MX記錄,用來表示目前的郵件交換伺服器;

    定義NS的A記錄;

    定義MX的A記錄;

    定義三條目前域域名的A記錄,分别指向不同的IP位址;

   ④修改資源記錄檔案的權限;因為檔案建立過後的屬主和屬組都是root,named程序無法調用,雖然其他使用者的權限可以,但這樣不符合生産環境要求;是以将屬組改為named,并将其他使用者權限删除;

    ~named]chown :named qhdlink.com.zone

    ~named]chmod o-r qhdlin.com.zone 

   ⑤使用named-checkconf指令檢查DNS主配置檔案/etc/named.conf及其輔助配置檔案是否有錯;

再使用named-checkzone "ZONE-NAME" ZONE-FILE 去檢查我們所書寫的資源記錄是否出錯;

   ⑥使用rndc指令重新開機配置檔案

   ⑦關閉防火牆,并将SElinux置于允許狀态;

    iptables -F

    setenforce 0

   ⑧開啟另一台虛拟機;使用dig測試是否能通路DNS

  DNS伺服器主從通信:

   配置從DNS伺服器:

    步驟

     ①定義區域,在配置檔案/etc/named.rfc1912.zones中,将type改為slave表從伺服器,同時将file改為slave/qhdlink.com.zone;最後再在從伺服器的區域中加上其為誰工作,也就是主伺服器的IP位址;

     zone "qhdlink.com" IN {

          type slave;

          file "slaves/qhdlink.com.zone";

          masters { 172.16.72.2; };  //主伺服器IP

     };

     當主DNS伺服器出現資料改變,序列号增加時,自動更新并将區域資料發往從伺服器;

     ②使用named-checkconf指令檢查DNS主配置檔案/etc/named.conf及其輔助配置檔案是否有錯;

     ③在/etc/named.conf中添加從伺服器IP的監聽;

     ④在主DNS伺服器中的資源記錄中添加一條從伺服器的NS記錄;否則,主伺服器無法傳送區域資料給從伺服器; 

     增加一條從伺服器的NS記錄;

     當修改了主DNS的資源記錄後,将序列号遞增;

     rndc reload便可以将主伺服器更新到從伺服器中;

     可以檢視區域資料傳輸的日志

     /var/named/data/named.run檔案内容

     表示區域資料以全量傳輸的方式傳送過去了;因為是第一次傳輸,是以采用全量;

     本文轉自 wujunqi1996 51CTO部落格,原文連結:http://blog.51cto.com/12480612/1955756