【詳解】DNS服務工作原理、正反向解析和主從同步

目錄:

一、理論部分

二、實驗部分

******************************理論部分***************************************

正文:

一、什麼是DNS服務.

  DNS服務是互聯網的基礎性服務之一.全稱爲Domain Name System(域名系統).DNS是因特網上作爲域名和IP地址相互映射的一個分佈式數據庫,提供將域名轉換成對應IP地址的信息條目,能夠使用戶更方便的通過域名(如baidu.com)去訪問互聯網,而不用去記住能夠被機器直接讀取的IP地址。這種將域名轉換成ip地址的方法稱爲域名解析.  

二、企業自建DNS的目的.

  其實互聯網上已有現成的DNS服務器,那麼企業內部爲什麼還要自建DNS服務器呢?

  主要原因如下:

  • 節省內網域名解析佔用的上網帶寬;

  • 方便解析內網服務器IP地址;

  • 內網有域環境,域中的計算機通過內網的DNS定位域控制器(Windows)

    ...

三、DNS基礎原理詳解. 

1、DNS採用C/S架構,服務器端工作在TCP/UDP協議的53號端口.是應用層的協議.

2、BIND: Bekerley Internet Name Domain (伯克利因特網名字域系統), ISC (www.isc.org)

3、對於DNS服務使用TCP和UDP協議的解釋:

  a. TCP:面向連接的協議; (每次連接前須三次握手,斷開時須四次斷開,使得傳輸一段很小的數據時浪費大量時間,所以dns多使用53/udp).
  b. UDP: User Datagram Protocol(用戶數據報文協議), 無連接的協議

  c. DNS在進行區域傳送時使用TCP協議,其它時候則使用UDP協議;

  d. TCP是一種可靠的連接,保證了數據的準確性。
  e. named進程查詢時使用的是UDP協議的53號端口發送UDP報文。響應通過UDP報文返回,除非他們大於512K,這種情況使用TCP。服務器之間的"區域傳送"則都使用TCP。

4、區域傳送:

  當一個輔助(從)DNS服務器啓動時,它需要與主DNS服務器通信,並加載(同步)數據信息,這就叫做區域傳送(zone transfer)。  
5、DNS域名:

    根域:全球所有的DNS都要聽從於它;

    頂級域名:Top Level Domain:tld;

        .com  .edu  .mil  .gov  .net  .org  ...

        三類:組織域,國家域(.cn, .iq, .hk, .tw, ...),反向域

    二級域名:

        google.com  youtube.com baidu.com ...

    三級域名:

        www.google.com  mail.google.com  stu.google.com

    最多127級域名

  wKiom1hHunahL73aAABICJQYH-Q721.jpg

6、DNS查詢類型

 a. 遞歸查詢

   客戶端只發出一次請求一定要得到最終結果;(主機向本地域名服務器的查詢一般都是採用遞歸查詢.)   

 b. 迭代查詢

  服務器發出多次請求,層層請求後返回最終結果;(本地域名服務器向根域名服務器的查詢(域名服務器之間的查詢)一般都是採用迭代查詢)


  圖解:

  wKioL1hHvRCzc8hFAAII3IZT8N8346.png

  wKioL1hHv7HQ7EgNAADIkuf_fKE664.jpg

7. 名稱服務器: 域內負責解析本域內名稱的主機;
   根服務器: 指13組服務器,異地多活.

8.  DNS解析類型:

   正向解析: Name --> IP  (絕大多數都能正向解析)

   反向解析: IP --> Name  (部分解析不了,該解析類型常用在郵件服務反向解析,來判斷是否爲垃圾郵件)

   注:正反向解析是兩個不同的名稱空間,是兩棵不同的解析樹;

9. DNS服務器的類型:   

   主DNS服務器
   輔助(從)DNS服務器
   緩存DNS服務器
   轉發器

主DNS服務器: 維護所負責解析的域內解析庫服務器;解析庫由管理員維護;
從DNS服務器: 從主DNS服務器或其他的從DNS服務器那裏"複製"(區域傳送)一份解析庫;
從DNS服務器到主DNS服務器處的傳送,之間有一系列定義,主要定義在SOA資源記錄當中,包括:   
   序列號:解析庫的版本號(同步後主從一致);前提是主服務器解析庫內容發生變化,其序列號遞增(每
次加1);(數字最長不要超過十位);
   刷新時間:從服務器從主服務器請求同步解析庫的時間間隔;   
   重試時間間隔:從服務器從主服務器請求同步解析庫失敗時,再次嘗試的時間間隔,重試時間須小於刷
新時間,否則無意義.   
   過期時長:從服務器始終聯繫不到主服務器時,多久之後放棄從服務器角色,停止提供服務;   
   通知"機制:主服務器發生變化後,會通知從服務器及時更新解析庫,即使更新時間沒到也會通知從服
務器,避免從服務器落後主服務器太多.

10. 區域傳送類型:

  a. 全量傳送:傳送整個解析庫;
  b. 增量傳送:傳送解析庫發生變化的那部分內容;

11. 對從服務器及區域傳送的理解:

    從服務器要從主服務器同步.首先,從服務器如何知道主服務器已更新解析庫? 主要在於序列號,主服務器每更新一次解析庫,序列號都會主動加1;
    正常情況下,主從服務器的序列號相同.從服務器通過刷新時間從主服務器處對比序列號並請求同步解析庫的時間間隔.還有重試時間間隔和過期時長.

12. 一次完整的查詢/解析請求經過的流程:
   Client --> 本地hosts文件 --> DNS Service
   Local Cache -->DNS Server(Iesursion) --> Server Cache-->Iteration

13. 區域解析庫:

   由衆多RR組成;
   資源記錄: Resource Record, RR
   記錄類型: A, AAAA, PTR, SOA, NS, CNAME, MX等
      SOA: Start Of Authority,起始授權記錄,一個區域解析庫有且僅能有一個SOA記錄,而且必須爲解析庫的第一條記錄;
      A: internet Address, 作用:FQDN --> IP
      AAAA: FQDN --> IPv6
      PTR: PointTeR, IP -->FQDN
      NS: Name Server,專用於標明當前區域的DNS服務器
      CNAME: Canonical Name,別名記錄.正式名稱
      MX: Mail exchanger, 郵件交換器
                
    資源記錄定義的格式:
       語法:name    [TTL]    IN     rr_type    value
       注意:
         (1) TTL可從全局繼承;
         (2) @可用於引用當前區域的名字;
         (3) 同一個名字可以通過多條記錄定義多個不同的值;此時DNS服務器會以輪詢方式響應;
         (4) 同一個值也會有多個不同的定義名字;通過多個不同的名字指向同一個值進行定義;                   
SOA:
  name:當前區域的名字,例如"baidu.com.";
  value:有多部分組成
      (1)當前區域的主DNS服務器的FQDN,也可以使用當前區域的名字;
      (2)當前區域管理員的郵箱地址;但地址中不能用@符號,一般用.替換,如linuxedu.163.com
      (3)主從服務協調屬性的定義以及否定的答案的統一的TTL.
                        
 例如:

baidu.com.   86400   IN   SOA   ns.baidu.com.   nsadmin.baidu.com.(
                                    2015042201     ;序列號  
                                    2H             ;刷新時間 
                                    10M             ;重試時間 
                                    1W             ;過期時間
                                    1D             ;否定答案的TTL值 
                                    )

 注:不帶單位,默認爲秒鐘;
                    
NS:
  name:當前區域的名字;
  value:當前區域的某DNS服務器的名字,例如 ns.baidu.com.;
  注:一個區域可以有多個NS記錄;
 例如:
                          

 baidu.com.   IN    NS      ns1.baidu.com.   //此處nsx.baidu.com. 可寫成 nsx  (注:nsx後面沒有點號)
 baidu.com.   IN    NS      ns2.baidu.com.

 注:
   (1)相鄰的兩個資源記錄的name相同時,後續的可省略;
   (2)對NS記錄而言,任何一個ns記錄後面的服務器名字,都應該在後續有一個A記錄;
                            
MX:
  name: 當前區域的名字;
  value: 當前區域的某郵件服務器(smtp服務器)的主機名;
  注:一個區域內,MX記錄可有多個;但每個記錄的value之前應該有一個數字(0-99),表示此服務器的優先級;數字越小優先級越高;                          
  例:                        

  baidu.com.     IN      MX     10       mx1.baidu.com. 
                 IN      MX     20       mx2.baidu.com.

 注:
  (1)對MX記錄而言,任何一個MX記錄後面的服務器名字,都應該在後續有一個A記錄;
                            
A:
  name:其主機的FQDN,例如www.baidu.com.
  value:主機名對應主機的IP地址;

  例:                  

 www.baidu.com.    IN      A    1.1.1.1 
 www.baidu.com.    IN      A    1.1.1.2   
                            
 mx1.baidu.com.    IN      A    1.1.1.3 
 mx2.baidu.com.    IN      A    1.1.1.3

 

  注:  避免用戶寫錯名稱時給錯誤答案,可通過泛域名解析進行解析至某特定地址,如下:       

 *.baidu.com.    IN   A     1.1.1.4 
 baidu.com.      IN   A     1.1.1.4

AAAA:
   name:FQDN
   value: IPv6                         
PTR:
   name: IP ,有特定格式;
   value: FQDN

   注: name處的IP有特定格式,需要把IP地址反過來寫,1.2.3.4,要寫作4.3.2.1;而且有特定後綴:.in-addr.arpa.,所以完整寫法爲:4.3.2.1.in-addra.arpa.                        例如:                       

4.3.2.1.in-addr.arpa    IN     PTR    www.baidu.com 
簡寫成:
4    IN     PTR    www.baidu.com.

 注:網絡地址及後綴可省略;主機地址依然需要反着寫:                           
CNAME:
   name: 別名的FQDN;
   value: 正規名字的FQDN;                           
  例:                      

  web.baidu.com.      IN     CNAME    www.baidu.com.

14. 子域授權:

   每個域的名稱服務器,都是通過其上級名稱服務器在解析庫進行授權; 

   類似根域授權tld:          

.com.       IN        NS    ns1.com 
.com.       IN        NS    ns2.com 
ns1.com.    IN        A     2.2.2.1 
ns2.com.    IN        A     2.2.2.2

  baidu.com. 在.com的名稱服務器上,解析庫中添加資源記錄;          

 baidu.com.            IN        NS        ns1.baidu.com. 
 baidu.com.            IN        NS        ns2.baidu.com. 
 baidu.com.            IN        NS        ns3.baidu.com. 
 ns1.baidu.com.        IN        A         3.3.3.1  
 ns2.baidu.com.        IN        A         3.3.3.2 
 ns3.baidu.com.        IN        A         3.3.3.3

            
15. BIND的安裝配置:    
   dns服務,程序包名bind, 程序名named
   程序包:
       bind.X86_64  提供服務
       bind-libs   提供庫文件
       bind-utils  提供測試服務,測試服務是否ok   

# rpm -ql bind-utils 
 /usr/bin/dig
 /usr/bin/host
 /usr/bin/nslookup
 /usr/bin/nsupdate

  bind-chroot: /var/named/chroot/
  bind-chroot.x86_64  測試環境不可安裝.  安全性.
 

  bind:
     服務腳本: /etc/rc.d/init.d/named
     主配置文件: /etc/named.conf, /etc/named.rfc1912.zones, /etc/rndc.key
     解析庫文件: /var/named/ZONE_NAME.ZONE   分正向和反向.
     named守護進程–用來回答查詢結果
                                     

[root@localhost named]# pwd
 /var/named
[root@localhost named]# cat named.localhost 
  $TTL 1D
  @    IN    SOA    @   rname.invalid. (
                    0     ; serial
                   1D     ; refresh
                   1H     ; retry
                   1W     ; expire
                   3H )   ; minimum
        NS    @
        A    127.0.0.1
        AAAA    ::1
[root@localhost named]# 
[root@localhost named]# cat named.loopback 
$TTL 1D
@    IN SOA    @ rname.invalid. (
               0    ; serial
               1D    ; refresh
               1H    ; retry
               1W    ; expire
               3H )    ; minimum
     NS      @
     A       127.0.0.1
     AAAA    ::1
     PTR     localhost.
[root@localhost named]#

  注:
     (1) 一臺物理服務器可同時爲多個區域提供解析;
     (2) 必須要有根區域文件:/var/named/named.ca
     (3) 應該有兩個(如果包括ipv6的,應該更多)實現localhost和本地迴環地址的解析庫;
                            
  rndc:

     remote name domain controller,默認與bind安裝在同一主機,且只能通過127.0.0.1來連接named進程,提供輔助性的管理功能;
                        953/tcp
  主配置文件:
     全局配置:options {}  
     日誌子系統配置:logging {}
     區域定義: 本機能夠爲哪些zone進行解析,就要定義哪些zone;
     zone  "ZONE_NAME"  IN  {}      
                    
      注意:任何服務程序如果期望其能夠通過網絡被其他主機訪問,至少應該監聽在一個能夠與外部主機通信的IP地址上;


四、各類型服務器配置介紹:

  1. 緩存DNS服務器:

    修改配置文件/etc/named.conf,使DNS服務53號端口監聽於外部地址即可;

   dnssec作用:防止DNS被污染; 配置麻煩,建議測試做實驗時關閉dnssec;即改爲no

2. 主DNS名稱服務器:
   在緩存名稱服務器的基礎上加zone的定義即可;
      (1)在主配置文件/etc/named.rfc1912.zones中定義區域
        zone  "ZONE_NAME"  IN {
        type {master|slave|hint|forward};
        file  "ZONE_NAME.zone";  //區域解析庫文件路徑
         };
      (2)定義區域解析庫文件
          出現的內容:
               宏(變量)定義;
               資源定義; 

  反向區域配置:

    區域名稱:網絡地址反寫.in-addr.
      172.16.100. --> 100.16.172.in-addr.arpa.
    
    保留不變的部分當做區域名字
    
    定義區域
       zone "ZONE_NAME" IN {
          type {master|slave|forward};
          file "網絡地址.zone"
       };

    注: 不需要MX和A,以及AAAA記錄,以PTR記錄爲主;

        正向區域中的別名記錄(CNAME)在反向區域不需要反解.

3.:通過區域傳送實現主從同步:

   配置一臺正向從DNS服務器:

   定義從區域的方法:
       zone "ZONE_NAME" IN {
           type slave;
           masters { MASTER_IP; };
           file "slaves/ZONE_NAME.zone";
       };   

總結:
    1: 從服務器應該爲一臺獨立的名稱服務器;
    2: 主服務器的區域解析庫文件中必須有一條NS記錄是指向從服務器的;
    3: 從服務器只需要定義區域,而無需提供解析庫文件;如果是採用rpm方法安裝的,解析庫文件應該放置於/var/named/slaves目錄中;否則需要改/var/named 目錄的權限,不然寫不進去.
    4: 主服務器得允許從服務器作區域傳送;區域傳送對方會獲取本區域的所有解析記錄,很危險,應選擇性開放;
    5: 主從服務器時間應該同步,可通過ntp進行;
    6: bind程序的版本應該保持一致;否則,應該從高,主低,達到兼容性要求;
    7: 一個區域內只能有一個主DNS服務器,但可以有多個從DNS服務器.一主一從或一主多從

4. 檢查配置語法是否錯誤的命令:

     #named-checkconf
     #named-checkzone
5. 查看服務器的當前系統狀態: # rndc status
6.測試命令:

  dig的使用
      dig [-t type] name [@SERVER] [query options]
    
        dig用於測試dns系統,因此不會查詢hosts文件進行解析;
    
        查詢選項:
            +[no]trace: 跟蹤解析過程
            +[no]recurse: 進行遞歸解析
            
        測試反向解析:
            dig -x IP @SERVER  
        
        模擬區域傳送:  --查看區域中的所有資源記錄,比較危險.
            dig -t axfr ZONE_NAME @SERVER  

  資源記錄中的某臺客戶機想解析dns,如果報錯,可能是因爲防火牆導致的
  解析時,如果將該DNS服務器的IP寫入本機/etc/resolv.conf文件下,則之後測試時無需在命令行末尾加該DNS Server IP.

 host命令:
      host  [-t type]  name  [SERVER]     
 nslookup命令:
      nslookup  [-t type]  [name | -]  [server]
    
      交互式模式:
       nslookup>
        server IP:指明使用哪個DNS server進行查詢;
        set q=RR TYPE:指明查詢的資源記錄類型;
        NAME:要查詢的名稱;

rndc命令:
    rndc --> rndc (953/tcp)   
    rndc COMMAND   
        COMMAND:
    -h: 顯示詳細幫助信息;
            reload:重載主配置文件和區域解析庫文件;
            reload zone:重載區域解析庫文件;
            retransfer zone:手動啓動區域傳送過程,而不管序列號是否增加;
            notify zone:重新對區域傳送發通知;
            reconfig:重載主配置文件;
            querylog:開啓或關閉查詢日誌;
            trace:遞增debug級別;   //y用於調試排錯.正常生產環境須關閉;
            trace LEVEL:指定使用的級別;  [ LEVEL 爲數字,自己指定 ]           
    關於[querylog:開啓或關閉查詢日誌]的詳解:
      開啓查詢日誌可通過查看log查看到查詢日誌,此項會消耗系統IO,一般只在排查錯誤時使用,平時無需打開;

******************************實驗部分******************************

                  
實驗環境:

 CentOS6.7 x 3, Windows7 x 1

 主機名:

    DNS-master -- 10.68.7.235

    DNS-slave -- 10.68.7.231

    http -- 10.68.7.234

    Windows-Client -- 10.68.7.236

 實驗要求:

   一. 配置緩存域名服務器

   二. 配置正向解析和反向解析域名服務器

   三. 通過區域傳送實現主從同步

   四. 搭建http服務,開啓windows主機,配好DNS進行訪問:

一、配置緩存域名服務器:

配置主配置文件:

[root@DNS-master ~]# yum -y install bind bind-utils bind-lib
[root@DNS-master ~]# rpm -qa bind*
bind-utils-9.8.2-0.37.rc1.el6.x86_64
bind-libs-9.8.2-0.37.rc1.el6.x86_64
bind-9.8.2-0.37.rc1.el6.x86_64
[root@DNS-master ~]# service named start
Generating /etc/rndc.key:                                  [  OK  ]
Starting named:                                            [  OK  ]
[root@DNS-master ~]#
[root@DNS-master ~]# cp /etc/named.conf{,.bak}
[root@DNS-master ~]# vim /etc/named.conf
 options {
 //      listen-on port 53 { 127.0.0.1; };  //該行爲初始行,使用雙斜線註釋(因爲該配置文件爲C或C++寫成,所以註釋符號用//而不用#).
         listen-on port 53 { 10.68.7.235; 127.0.0.1; };  //修改初始行爲該行,添加本機IP或外部IP,以期望其能夠通過網絡被其他主機訪問;並添加本地迴環地址,以便本機能夠解析到.本行也可以刪除不要,實現效果相同.
 //      listen-on-v6 port 53 { ::1; };
         directory       "/var/named";  //此項定義工作目錄,也就是區域解析庫文件路徑.此項是關鍵,其他項都是爲安全而設定的.推薦將所有與BIND相關的配置文件(除了named.conf和resolv.conf)放在/var之下的子目錄中。例如/var/nam
         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表示任何主機.或者可以直接註釋掉,註釋掉默認爲允許任何主機查詢.
         recursion yes;  //此項表示是否允許遞歸查詢.
         
 //      dnssec-enable yes;   //該行及以下幾行通通註釋掉;最好把yes改爲no,安全設定,可能會影響後面實驗的驗證.
 //      dnssec-validation yes;
 //      dnssec-lookaside auto;
         
         /* Path to ISC DLV key */
 //      bindkeys-file "/etc/named.iscdlv.key";
         
 //      managed-keys-directory "/var/named/dynamic";
 };
         ...
[root@DNS-master ~]# service named restart
Stopping named:                                            [  OK  ]
Starting named:                                            [  OK  ]
[root@DNS-master ~]#
[root@DNS-master ~]# ss -tunlp |grep 53
udp    UNCONN     0      0            10.68.7.235:53                    *:*      users:(("named",2510,513))
udp    UNCONN     0      0              127.0.0.1:53                    *:*      users:(("named",2510,512))
udp    UNCONN     0      0                    ::1:53                   :::*      users:(("named",2510,514))
tcp    LISTEN     0      3                    ::1:53                   :::*      users:(("named",2510,22))
tcp    LISTEN     0      3            10.68.7.235:53                    *:*      users:(("named",2510,21))
tcp    LISTEN     0      3              127.0.0.1:53                    *:*      users:(("named",2510,20))
tcp    LISTEN     0      128                  ::1:953                  :::*      users:(("named",2510,24))
tcp    LISTEN     0      128            127.0.0.1:953                   *:*      users:(("named",2510,23))
[root@DNS-master ~]#

以上配置完即爲緩存名稱服務器的配置:
監聽外部地址即可;    
二. 配置主域名服務器的正向解析: 

在緩存DNS服務器的基礎上添加zone定義

[root@DNS-master ~]# vim /var/named/yangbin.com.zone 
$TTL 1D 
$ORIGIN yangbin.com.
@       IN   SOA        ns1.yangbin.com   admin.yangbin.com. (
                                        2016120701
                                        2H
                                        5M
                                        7D
                                        1D
 )
        IN    NS    ns1.yangbin.com.
        IN    NS    ns2.yangbin.com.
        IN    MX 10 mx1.yangbin.com.
        IN    MX 20 mx2.yangbin.com.  //該處幾行.yangbin.com.可省略。省略後後面沒有小數點.  
ns1     IN    A     10.68.7.235
ns2     IN    A     10.68.7.231
mx1     IN    A     10.68.7.232
mx2     IN    A     10.68.7.233
www     IN    A     10.68.7.234  //這些域名對應的IP,即主機不存在也沒關係.也可以一個名稱對應多個IP.
web     IN    CNAME www

注:

$TTL 1D:

   此處可用1D或1d或86400,該時間可自定義,時間越短,緩存有效期就越短,向服務器發起查詢請求的次數也就越多,緩存時間越短,服務器壓力越大,生成緩存生效的時間越快,反之亦然.

$ORIGIN keeny.xin.:

   此處的宏表示當之後所寫的名稱爲相對名稱時,會自動在後邊補上keeny.xin. ,當然此項也可省略不寫,系統會自動這麼做.

admin.yangbin.com.: 表示管理員的郵箱,@符號用點號.代替;

在主配置文件/etc/named.rfc1912.zones中定義區域:

[root@DNS-master ~]# vim /etc/named.rfc1912.zones 
 ...
結尾添加:
 zone "yangbin.com" IN {
        type master;
        file "/var/named/yangbin.com.zone";
        allow-update { none; }
 };

檢查配置文件語法:

[root@DNS-master ~]# named-checkconf
[root@DNS-master ~]# 
[root@DNS-master ~]# named-checkzone "yangbin.com" /var/named/yangbin.com.zone 
zone yangbin.com/IN: loaded serial 2016120701
OK
[root@DNS-master ~]#

查看文件權限,禁止普通用戶隨意訪問從而獲悉公司服務器數量:

[root@DNS-master ~]# ps aux |grep named
named      2510  0.0  1.4 193140 14616 ?        Ssl  02:20   0:00 /usr/sbin/named -u named
root       2887  0.0  0.0 103304   892 pts/0    S+   03:02   0:00 grep named
[root@DNS-master ~]# ll /etc/named.conf
-rw-r-----. 1 root named 1089 Aug 30 02:20 /etc/named.conf
[root@DNS-master ~]# ll /var/named
total 32
drwxrwx---. 2 named named 4096 Aug 30 02:13 data
drwxrwx---. 2 named named 4096 Aug 30 02:13 dynamic
-rw-r-----. 1 root  named 2075 Apr 23  2014 named.ca
-rw-r-----. 1 root  named  152 Dec 15  2009 named.empty
-rw-r-----. 1 root  named  152 Jun 21  2007 named.localhost
-rw-r-----. 1 root  named  168 Dec 15  2009 named.loopback
drwxrwx---. 2 named named 4096 Jul 24  2015 slaves
-rw-r--r--. 1 root  root   451 Aug 30 02:57 yangbin.com.zone
[root@DNS-master ~]# id named
uid=25(named) gid=25(named) groups=25(named)
[root@DNS-master ~]# chown :named /var/named/yangbin.com.zone 
[root@DNS-master ~]# service named restart
Stopping named: .                                          [  OK  ]
Starting named:                                            [  OK  ]
[root@DNS-master ~]#

此時,正向解析區域配置完畢!

查看系統當前狀態:

[root@DNS-master ~]# rndc status
version: 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6
CPUs found: 4
worker threads: 4
number of zones: 20
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running
[root@DNS-master ~]#

通過dig命令在本機測試查詢解析:

[root@DNS-master ~]# dig -t A www.yangbin.com @10.68.7.235

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6 <<>> -t A www.yangbin.com @10.68.7.230
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63733
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;www.yangbin.com.        IN    A

;; ANSWER SECTION:
www.yangbin.com.    86400    IN    A    10.68.7.234

;; AUTHORITY SECTION:
yangbin.com.        86400    IN    NS    ns2.yangbin.com.
yangbin.com.        86400    IN    NS    ns1.yangbin.com.

;; ADDITIONAL SECTION:
ns1.yangbin.com.    86400    IN    A    10.68.7.235
ns2.yangbin.com.    86400    IN    A    10.68.7.231

;; Query time: 0 msec
;; SERVER: 10.68.7.230#53(10.68.7.230)
;; WHEN: Tue Aug 30 03:23:23 2016
;; MSG SIZE  rcvd: 117

[root@DNS-master ~]#

在從DNS服務器進行測試,把DNS地址指向主DNS服務器:

[root@DNS-slave ~]# dig -t A www.yangbin.com @10.68.7.235

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6 <<>> -t A www.yangbin.com @10.68.7.235
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32698
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;www.yangbin.com.        IN    A

;; ANSWER SECTION:
www.yangbin.com.    86400    IN    A    10.68.7.234

;; AUTHORITY SECTION:
yangbin.com.        86400    IN    NS    ns2.yangbin.com.
yangbin.com.        86400    IN    NS    ns1.yangbin.com.

;; ADDITIONAL SECTION:
ns1.yangbin.com.    86400    IN    A    10.68.7.235
ns2.yangbin.com.    86400    IN    A    10.68.7.231

;; Query time: 0 msec
;; SERVER: 10.68.7.235#53(10.68.7.235)
;; WHEN: Tue Aug 30 03:38:00 2016
;; MSG SIZE  rcvd: 117

[root@DNS-slave ~]#

注:

   1、生產環境下修改相關配置文件後,不能restart,應該使用reload:

      # service named reload

   2、當一個域名配置有一個以上的ip地址時,查詢時會進行輪詢.

配置主域名服務器的反向解析服務器

不需要MX和A,以及AAAA記錄,以PTR記錄爲主,別名記錄(CNAME)不需要反解.

[root@DNS-master ~]# vim /var/named/7.68.10.in-addr.arpa 
$TTL 1D
$ORIGIN 7.68.10.in-addr.arpa.
@       IN   SOA        ns1.yangbin.com   admin.yangbin.com. (
                                        2016120701
                                        2H
                                        5M
                                        7D
                                        1D
 )
        IN    NS    ns1.yangbin.com.
        IN    NS    ns2.yangbin.com.
        IN    MX 10 mx1.yangbin.com.
        IN    MX 20 mx2.yangbin.com.
235     IN    PTR   ns1
231     IN    PTR   ns2
232     IN    PTR   mx1
233     IN    PTR   mx2
234     IN    PTR   www
[root@DNS-master ~]# vim /etc/named.rfc1912.zones   
 zone "7.68.10.in-addr.arpa" IN {
        type master;
        file "7.68.10.in-addr.arpa";
        allow-update { none; };
 };
[root@DNS-master ~]# named-checkzone "7.68.10.in-addr.arpa" /var/named/7.68.10.in-addr.arpa 
zone 7.68.10.in-addr.arpa/IN: getaddrinfo(mx1.yangbin.com) failed: Temporary failure in name resolution
zone 7.68.10.in-addr.arpa/IN: getaddrinfo(mx2.yangbin.com) failed: Temporary failure in name resolution
zone 7.68.10.in-addr.arpa/IN: loaded serial 2016120701
OK
//mx1和mx2服務器沒有打開,所以此處報錯,可以不用理會,解析不受影響.
[root@DNS-master ~]# ll /var/named/
total 36
-rw-r--r--. 1 root  root   394 Aug 30 04:10 7.68.10.in-addr.arpa
drwxrwx---. 2 named named 4096 Aug 30 02:13 data
drwxrwx---. 2 named named 4096 Aug 30 03:14 dynamic
-rw-r-----. 1 root  named 2075 Apr 23  2014 named.ca
-rw-r-----. 1 root  named  152 Dec 15  2009 named.empty
-rw-r-----. 1 root  named  152 Jun 21  2007 named.localhost
-rw-r-----. 1 root  named  168 Dec 15  2009 named.loopback
drwxrwx---. 2 named named 4096 Jul 24  2015 slaves
-rw-r--r--. 1 root  named  451 Aug 30 03:36 yangbin.com.zone
[root@DNS-master ~]# chown :named /var/named/7.68.10.in-addr.arpa 
[root@DNS-master ~]# chmod 640 /var/named/{7.68.10.in-addr.arpa,yangbin.com.zone}
[root@DNS-master ~]# ll /var/named/
total 36
-rw-r-----. 1 root  named  394 Aug 30 04:10 7.68.10.in-addr.arpa
drwxrwx---. 2 named named 4096 Aug 30 02:13 data
drwxrwx---. 2 named named 4096 Aug 30 03:14 dynamic
-rw-r-----. 1 root  named 2075 Apr 23  2014 named.ca
-rw-r-----. 1 root  named  152 Dec 15  2009 named.empty
-rw-r-----. 1 root  named  152 Jun 21  2007 named.localhost
-rw-r-----. 1 root  named  168 Dec 15  2009 named.loopback
drwxrwx---. 2 named named 4096 Jul 24  2015 slaves
-rw-r-----. 1 root  named  451 Aug 30 03:36 yangbin.com.zone
[root@DNS-master ~]#
[root@DNS-master ~]# service named start
Starting named:                                            [  OK  ]
[root@DNS-master ~]# 
[root@DNS-master ~]# rndc status
version: 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6
CPUs found: 4
worker threads: 4
number of zones: 21
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running
[root@DNS-master ~]#

檢查語法出現的錯誤:

[root@DNS-master ~]# named-checkzone "7.68.10.in-addr.arpa" /var/named/10.68.7.101.zone.arpa
/var/named/10.68.7.235.zone.arpa:3: SOA record not at top of zone (7.68.10.in-addr.arpa.7.68.10.in-addr.arpa)
zone 7.68.10.in-addr.arpa/IN: loading from master file ar/named/10.68.7.101.zone.arpa failed: not at top of zone
zone 7.68.10.in-addr.arpa/IN: not loaded due to errors.

解決辦法:
[root@DNS-master ~]#vim /var/named/7.68.10.in-addr.arpa 
 $ORIGIN 7.68.10.in-addr.arpa.  //該行直接不要寫或者結尾不要忘記加點號(.);

驗證:

 用本機驗證:

[root@DNS-master ~]# dig -x 10.68.7.232 @10.68.7.235

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6 <<>> -x 10.68.7.232 @10.68.7.235
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53809
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;232.7.68.10.in-addr.arpa.    IN    PTR

;; ANSWER SECTION:
232.7.68.10.in-addr.arpa. 86400    IN    PTR    mx1.7.68.10.in-addr.arpa.

;; AUTHORITY SECTION:
7.68.10.in-addr.arpa.    86400    IN    NS    ns2.yangbin.com.
7.68.10.in-addr.arpa.    86400    IN    NS    ns1.yangbin.com.

;; ADDITIONAL SECTION:
ns1.yangbin.com.    86400    IN    A    10.68.7.235
ns2.yangbin.com.    86400    IN    A    10.68.7.231

;; Query time: 0 msec
;; SERVER: 10.68.7.235#53(10.68.7.235)
;; WHEN: Tue Aug 30 04:21:25 2016
;; MSG SIZE  rcvd: 139

[root@DNS-master ~]#

 在slave機器上驗證:

[root@DNS-slave ~]# dig -x 10.68.7.234 @10.68.7.235

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6 <<>> -x 10.68.7.234 @10.68.7.235
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16793
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;234.7.68.10.in-addr.arpa.    IN    PTR

;; ANSWER SECTION:
234.7.68.10.in-addr.arpa. 86400    IN    PTR    www.7.68.10.in-addr.arpa.

;; AUTHORITY SECTION:
7.68.10.in-addr.arpa.    86400    IN    NS    ns1.yangbin.com.
7.68.10.in-addr.arpa.    86400    IN    NS    ns2.yangbin.com.

;; ADDITIONAL SECTION:
ns1.yangbin.com.    86400    IN    A    10.68.7.235
ns2.yangbin.com.    86400    IN    A    10.68.7.231

;; Query time: 36 msec
;; SERVER: 10.68.7.235#53(10.68.7.235)
;; WHEN: Tue Aug 30 04:22:10 2016
;; MSG SIZE  rcvd: 139

[root@DNS-slave ~]#

在slave機器上模擬全量區域傳送: 可以得到對方正向區域所有的資源記錄:

[root@DNS-slave ~]# dig axfr yangbin.com @10.68.7.235

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6 <<>> axfr yangbin.com @10.68.7.235
;; global options: +cmd
yangbin.com.        86400    IN    SOA    ns1.yangbin.com.yangbin.com. admin.yangbin.com. 2016120701 7200 300 604800 86400
yangbin.com.        86400    IN    NS    ns1.yangbin.com.
yangbin.com.        86400    IN    NS    ns2.yangbin.com.
yangbin.com.        86400    IN    MX    10 mx1.yangbin.com.
yangbin.com.        86400    IN    MX    20 mx2.yangbin.com.
mx1.yangbin.com.    86400    IN    A    10.68.7.232
mx2.yangbin.com.    86400    IN    A    10.68.7.233
ns1.yangbin.com.    86400    IN    A    10.68.7.235
ns2.yangbin.com.    86400    IN    A    10.68.7.231
web.yangbin.com.    86400    IN    CNAME    www.yangbin.com.
www.yangbin.com.    86400    IN    A    10.68.7.234
yangbin.com.        86400    IN    SOA    ns1.yangbin.com.yangbin.com. admin.yangbin.com. 2016120701 7200 300 604800 86400
;; Query time: 20 msec
;; SERVER: 10.68.7.235#53(10.68.7.235)
;; WHEN: Tue Aug 30 04:25:27 2016
;; XFR size: 12 records (messages 1, bytes 301)

[root@DNS-slave ~]#

在slave機器上模擬全量區域傳送: 可以得到對方反向區域所有的資源記錄:

[root@DNS-slave ~]# dig axfr 7.68.10.in-addr.arpa @10.68.7.235

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6 <<>> axfr 7.68.10.in-addr.arpa @10.68.7.235
;; global options: +cmd
7.68.10.in-addr.arpa.    86400    IN    SOA    ns1.yangbin.com.7.68.10.in-addr.arpa. admin.yangbin.com. 2016120701 7200 300 604800 86400
7.68.10.in-addr.arpa.    86400    IN    NS    ns1.yangbin.com.
7.68.10.in-addr.arpa.    86400    IN    NS    ns2.yangbin.com.
7.68.10.in-addr.arpa.    86400    IN    MX    10 mx1.yangbin.com.
7.68.10.in-addr.arpa.    86400    IN    MX    20 mx2.yangbin.com.
231.7.68.10.in-addr.arpa. 86400    IN    PTR    ns2.7.68.10.in-addr.arpa.
232.7.68.10.in-addr.arpa. 86400    IN    PTR    mx1.7.68.10.in-addr.arpa.
233.7.68.10.in-addr.arpa. 86400    IN    PTR    mx2.7.68.10.in-addr.arpa.
234.7.68.10.in-addr.arpa. 86400    IN    PTR    www.7.68.10.in-addr.arpa.
235.7.68.10.in-addr.arpa. 86400    IN    PTR    ns1.7.68.10.in-addr.arpa.
7.68.10.in-addr.arpa.    86400    IN    SOA    ns1.yangbin.com.7.68.10.in-addr.arpa. admin.yangbin.com. 2016120701 7200 300 604800 86400
;; Query time: 1 msec
;; SERVER: 10.68.7.235#53(10.68.7.235)
;; WHEN: Tue Aug 30 04:27:43 2016
;; XFR size: 11 records (messages 1, bytes 329)

[root@DNS-slave ~]#

主服務器已配置完畢!

三.  通過區域傳送實現主從同步

配置一臺正向從DNS服務器:

[root@DNS-slave ~]# yum -y install bind
[root@DNS-slave ~]# vim /etc/named.conf
options {
        listen-on port 53 { 10.68.7.231; 127.0.0.1; };
//      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 yes;

        dnssec-enable no;
        dnssec-validation no;
        dnssec-lookaside auto;

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

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

[root@DNS-slave ~]# vim /etc/named.rfc1912.zones
zone "yangbin.com" IN {
        type slave;
        masters { 10.68.7.235; };
        file "slaves/yangbin.com.zone";
};
[root@DNS-slave ~]# ll /var/named
total 28
drwxrwx---. 2 named named 4096 Jul 24  2015 data
drwxrwx---. 2 named named 4096 Jul 24  2015 dynamic
-rw-r-----. 1 root  named 2075 Apr 23  2014 named.ca
-rw-r-----. 1 root  named  152 Dec 15  2009 named.empty
-rw-r-----. 1 root  named  152 Jun 21  2007 named.localhost
-rw-r-----. 1 root  named  168 Dec 15  2009 named.loopback
drwxrwx---. 2 named named 4096 Jul 24  2015 slaves  //系統已自動準備好供寫入的文件(file) slaves目錄. 
[root@DNS-slave ~]# 
注意:
   必須在主服務器的配置文件下有從服務器的ns記錄,且ns名稱對應的IP爲從服務器的IP才行;

啓動服務然後查看日誌信息:

[root@DNS-slave ~]# service named start
Generating /etc/rndc.key:                                  [  OK  ]
Starting named:                                            [  OK  ]
[root@DNS-slave ~]# less /var/log/messages
Aug 30 04:47:26 DNS-slave named[3287]: zone yangbin.com/IN: Transfer started.
Aug 30 04:47:26 DNS-slave named[3287]: transfer of 'yangbin.com/IN' from 10.68.7.235#53: connected using 10.68.7.231#5802
4
Aug 30 04:47:26 DNS-slave named[3287]: zone yangbin.com/IN: transferred serial 2016120701
Aug 30 04:47:26 DNS-slave named[3287]: transfer of 'yangbin.com/IN' from 10.68.7.235#53: Transfer completed: 1 messages, 
12 records, 301 bytes, 0.001 secs (301000 bytes/sec)
[root@DNS-slave ~]# cat /var/named/slaves/yangbin.com.zone 
$ORIGIN .
$TTL 86400    ; 1 day
yangbin.com        IN SOA    ns1.yangbin.com.yangbin.com. admin.yangbin.com. (
                2016120701 ; serial
                7200       ; refresh (2 hours)
                300        ; retry (5 minutes)
                604800     ; expire (1 week)
                86400      ; minimum (1 day)
                )
            NS    ns1.yangbin.com.
            NS    ns2.yangbin.com.
            MX    10 mx1.yangbin.com.
            MX    20 mx2.yangbin.com.
$ORIGIN yangbin.com.
mx1            A    10.68.7.232
mx2            A    10.68.7.233
ns1            A    10.68.7.235
ns2            A    10.68.7.231
web            CNAME    www
www            A    10.68.7.234
[root@DNS-slave ~]#

沒有問題!

在主DNS服務器修改區域文件,然後再在slave服務器作區域傳送查看結果:

[root@DNS-master ~]# vim /var/named/yangbin.com.zone
...
序列號加1
增加如下行:
ftp     IN    A     10.68.7.238
[root@DNS-master ~]# rndc reload
server reload successful

主服務器重載服務器查看結果:

[root@DNS-slave ~]# rndc reload
[root@DNS-slave ~]# tail -20  /var/log/messages
Aug 30 05:07:02 DNS-slave named[3287]: client 10.68.7.235#34827: received notify for zone 'yangbin.com'
Aug 30 05:07:02 DNS-slave named[3287]: zone yangbin.com/IN: Transfer started.
Aug 30 05:07:02 DNS-slave named[3287]: transfer of 'yangbin.com/IN' from 10.68.7.235#53: connected using 10.68.7.231#44271
Aug 30 05:07:02 DNS-slave named[3287]: zone yangbin.com/IN: transferred serial 2016120702
Aug 30 05:07:02 DNS-slave named[3287]: transfer of 'yangbin.com/IN' from 10.68.7.235#53: Transfer completed: 1 messages, 12 records, 301 bytes, 0.002 secs (150500 bytes/sec)
Aug 30 05:07:02 DNS-slave named[3287]: zone yangbin.com/IN: sending notifies (serial 2016120702)
Aug 30 05:07:03 DNS-slave named[3287]: client 10.68.7.235#9138: received notify for zone '7.68.10.in-addr.arpa': not authoritative
[root@DNS-slave ~]# 
[root@DNS-slave ~]# cat /var/named/slaves/yangbin.com.zone 
$ORIGIN .
$TTL 86400    ; 1 day
yangbin.com        IN SOA    ns1.yangbin.com.yangbin.com. admin.yangbin.com. (
                2016120702 ; serial
                7200       ; refresh (2 hours)
                300        ; retry (5 minutes)
                604800     ; expire (1 week)
                86400      ; minimum (1 day)
                )
            NS    ns1.yangbin.com.
            NS    ns2.yangbin.com.
            MX    10 mx1.yangbin.com.
            MX    20 mx2.yangbin.com.
$ORIGIN yangbin.com.
ftp            A    10.68.7.238
mx1            A    10.68.7.232
mx2            A    10.68.7.233
ns1            A    10.68.7.235
ns2            A    10.68.7.231
web            CNAME    www
www            A    10.68.7.234
[root@DNS-slave ~]#

主從複製配置完畢!

四. 搭建http服務,開啓windows主機,配好DNS進行訪問:

[root@http ~]# yum -y install httpd
[root@http  ~]# curl 10.68.7.234
<h1>Succeed!</h1>
[root@http  ~]# vim /etc/httpd/conf/httpd.conf  
 ...
 在配置文件對應位置增加如下行:
 ServerName  www.yangbin.com //也可不加,因爲DNS內配置了正反向解析 
 ...
重啓服務!

然後在win7配置好DNS並訪問:

wKiom1hICpXCzm73AAA6Um5wyyM356.png

實驗驗證完成


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章