dns詳解

DNS 域名系統(英文:Domain Name System,縮寫:DNS)是因特網的一項服務。它作爲將域名和IP地址相互映射的一個分佈式數據庫,能夠使人更方便地訪問互聯網。DNS使用TCP和UDP端口53。

是一個域名服務,應用層協議。


原理篇


DNS組成

    根域(.)

        頂級域(.com, .net, .org, .gov, .edu, .mil,.ac)

            二級域(baidu.com,google.com ... ...)



dns查詢

    迭代查詢

    遞歸查詢

如下圖,從客戶端到本地DNS服務器是屬於遞歸查詢,而DNS服務器之間的交互查詢就是迭代查詢。

    wKioL1cJ1tDQCWVNAAFHtqj57Go601.jpg



總結:

1.遞歸查詢: 
一般客戶機和服務器之間屬遞歸查詢,即當客戶機向DNS服務器發出請求後,若DNS服務器本身不能解析,則會向另外的DNS服務器發出查詢請求,得到結果後轉交給客戶機; 
2.迭代查詢(反覆查詢): 
一般DNS服務器之間屬迭代查詢,如:若DNS2不能響應DNS1的請求,則它會將DNS3的IP給DNS2,以便其再向DNS3發出請求;


所謂遞歸查詢就是:如果主機所詢問的本地域名服務器不知道被查詢的域名的IP地址,那麼本地域名服務器就以DNS客戶的身份,向其它根域名服務器繼續發出查詢請求報文(即替主機繼續查詢)”
也就是遞歸就是交給下一個服務器解決(下一個就相當於客戶了,所以他也可以選擇去遞歸,或者迭代)(迭代就是返回給當前的,當前自己再去處理)
  遞歸即遞給服務器,所有操作都有服務器來完成。


舉例:比如學生問老師一個問題,王老師告訴他答案這之間的叫遞歸查詢。這期間也許王老師也不會,這時王老師問張老師,這之間的查詢叫迭代查詢!


DNS解析

正向解析區域和反向解析區域

    正向解析是將域名映射爲IP地址

        www.baidu.com  --> 202.108.22.5 

    反向解析是將IP地址映射爲域名

        202.108.22.5  --> www.baidu.com

注意:二者的名稱空間,非爲同一個空間,即非爲同一棵樹;因此,也不是同一個解析庫;

    

       

主-從DNS服務器

    主DNS服務器:維護所負責解析的域數據庫的那臺服務器;讀寫操作均可進行;
     從DNS服務器:從主DNS服務器那裏或其它的從DNS服務器那裏“複製”一份解析庫;但只能進行讀操作;

“複製”操作的實施方式:
     序列號:serial, 也即是數據庫的版本號;主服務器數據庫內容發生變化時,其版本號遞增;
     刷新時間間隔:refresh, 從服務器每多久到主服務器檢查序列號更新狀況;
     重試時間間隔:retry, 從服務器從主服務器請求同步解析庫失敗時,再次發起嘗試請求的時間間隔;
     過期時長:expire,從服務器始終聯繫不到主服務器時,多久之後放棄從主服務器同步數據;停止提供服務;
     否定答案的緩存時長:
                    
    主服務器”通知“從服務器隨時更新數據;
                
區域傳送:
     全量傳送:axfr, 傳送整個數據庫;
     增量傳送:ixfr, 僅傳送變量的數據;
                    


區域(zone)和域(domain)
   baidu.com域:
    FQDN --> IP
      正向解析庫;區域
    IP --> FQDN
      反向解析庫;區域
                    
區域數據庫文件
    資源記錄:Resource Record, 簡稱rr;
    記錄有類型:A, AAAA, PTR, SOA, NS, CNAME, MX
                
    SOA:Start Of Authority,起始授權記錄; 一個區域解析庫有且只能有一個SOA記錄,而且必須放在第一條;
    NS:Name Service,域名服務記錄;一個區域解析庫可以有多個NS記錄;其中一個爲主的;
    A: Address, 地址記錄,FQDN --> IPv4;
    AAAA:地址記錄, FQDN --> IPv6;
    CNAME:Canonical Name,別名記錄;
    PTR:Pointer,IP --> FQDN
    MX:Mail eXchanger,郵件交換器;
    優先級:0-99,數字越小優先級越高;
                
資源記錄的定義格式
     語法:name [TTL] IN RR_TYPE value


SOA:
  name: 當前區域的名字;例如”mageud.com.”,或者“2.3.4.in-addr.arpa.”;
  value:有多部分組成
     (1) 當前區域的區域名稱(也可以使用主DNS服務器名稱);
     (2) 當前區域管理員的郵箱地址;但地址中不能使用@符號,一般使用點號來替代;
     (3) (主從服務協調屬性的定義以及否定答案的TTL)
                        
 例如:
  baidu.com.  86400   IN    SOA   baidu.com.  admin.magedu.com.  (
           2017010801    ; serial
           2H         ; refresh
           10M         ; retry
           1W         ; expire
           1D         ; negative answer ttl 
           )    
 

                       
NS:
   name: 當前區域的區域名稱
   value:當前區域的某DNS服務器的名字,例如ns.magedu.com.;
   注意:一個區域可以有多個ns記錄; 
                    
例如:
   baidu.com.     86400     IN     NS      ns1.baidu.com.
   baidu.com.     86400     IN     NS      ns2.baidu.com.
                    


MX:
   name: 當前區域的區域名稱
   value:當前區域某郵件交換器的主機名;
   注意:MX記錄可以有多個;但每個記錄的value之前應該有一個數字表示其優先級;
                    
例如:
    baidu.com.  IN   MX   10   mx1.baidu.com.
    baidu.com.  IN   MX   20   mx2.baidu.com.
                    
A:
   name:某FQDN,例如www.baidu.com.
   value:某IPv4地址;
                
  例如:
    www.baidu.com.        IN     A    1.1.1.1
    www.baidu.com.        IN     A    1.1.1.2
    bbs.baidu.com.        IN     A    1.1.1.1
        
AAAA:
    name:FQDN
    value: IPv6
            
PTR:
   name:IP地址,有特定格式,IP反過來寫,而且加特定後綴;例如1.2.3.4的記錄應該寫爲4.3.2.1.in-addr.arpa.;
   value:FQND
                
   例如:
    4.3.2.1.in-addr.arpa.  IN  PTR  www.baidu.com.
                    
CNAME:
   name:FQDN格式的別名;
   value:FQDN格式的正式名字;
                
  例如:
    web.baidu.com.   IN  CNAME  www.baidu.com.
                              
  注意:
    (1) TTL可以從全局繼承;
    (2) @表示當前區域的名稱;
    (3) 相鄰的兩條記錄其name相同時,後面的可省略;
    (4) 對於正向區域來說,各MX,NS等類型的記錄的value爲FQDN,此FQDN應該有一個A記錄;


實戰篇

首先安裝bind程序包

bind:
    主配置文件:/etc/named.conf 
    或包含進來其它文件;
       /etc/named.iscdlv.key
       /etc/named.rfc1912.zones
       /etc/named.root.key
   解析庫文件:
      /var/named/目錄下;
    一般名字爲:ZONE_NAME.zone
                    
   注意:(1) 一臺DNS服務器可同時爲多個區域提供解析;
      (2) 必須要有根區域解析庫文件: named.ca;
      (3) 還應該有兩個區域解析庫文件:localhost和127.0.0.1的正反向解析庫;
         正向:named.localhost
         反向:named.loopback
                            
rndc:remote name domain contoller(遠程域名控制)
    953/tcp,但默認監聽於127.0.0.1地址,因此僅允許本地使用;
                
bind程序安裝完成之後,默認即可做緩存名稱服務器使用;如果沒有專門負責解析的區域,直接即可啓動服務;
     CentOS 6.x: service named start
     CentOS 7.x: systemctl start named.service
                
主配置文件格式:
    全局配置段:
       options { ... }
    日誌配置段:
       logging { ... }
    區域配置段:
       zone { ... }
       那些由本機負責解析的區域,或轉發的區域;
                        
     注意:每個配置語句必須以分號結尾;
                        
緩存名稱服務器的配置:
    監聽能與外部主機通信的地址;                    
       listen-on port 53;
       listen-on port 53 { 172.16.100.67; };
                        
     學習時,建議關閉dnssec
        dnssec-enable no;
        dnssec-validation no;
        dnssec-lookaside no;    
                        
     關閉僅允許本地查詢:
        //allow-query  { localhost; };
            
檢查配置文件語法錯誤:
       named-checkconf   [/etc/named.conf]
                    
測試工具:
     dig, host, nslookup等


配置解析一個正向區域

    步驟:

        1、定義區域(在/etc/named.conf或/etc/named.rfc1912.zones)

        2、定義數據文件(/var/named/xxx.zone)

            權限及屬組修改

                修改該文件的權限爲640,屬主屬組爲root:named      
              檢查語法錯誤
                 # named-checkzone  ZONE_NAME   ZONE_FILE
                 # named-checkconf 

        3、重載配置文件

詳細

1、定義區域

    zone  "baidu.com"  IN  {
         type master;
         file "baidu.com.zone"; 
         };                  
        注意:區域名字即爲域名;

2、定義數據文件(編輯一個名爲baidu.com.zone的文件與第一步的file所指的相同) 

    文件爲:/var/named/baidu.com.zone
    $TTL 3600
  

baidu.com.   IN   SOA  ns1.baidu.com. dnsadmin.baidu.com. (
          2017010801
          1H
          10M
          3D
          1D )
      IN      NS      ns1
      IN      MX   10  mx1
      IN      MX   20  mx2
      ns1     IN      A     172.16.100.67
      mx1     IN      A     172.16.100.68
      mx2     IN      A     172.16.100.69
      www     IN      A     172.16.100.67
      web     IN      CNAME   www
      bbs     IN      A     172.16.100.70
      bbs     IN      A     172.16.100.71  

權限及屬組修改

   修改該文件的權限爲640,屬主屬組爲root:named      
檢查語法錯誤
    # named-checkconf

3、重載配置文件

    rndc reload


配置反向區域

    步驟:

    1、定義區域(在/etc/named.conf或/etc/named.rfc1912.zones)

    2、定義區域解析庫文件(/var/named/xxx.zone)

    3、重載配置文件

1、定義區域

    zone  "100.16.172.in-addr.arpa"  IN  {
          type  master;
          file  "172.16.100.zone"; 
         };    
                        
       注意:反向區域的名字
       反寫的網段地址.in-addr.arpa 
       如:100.16.172.in-addr.arpa

2、定義區域解析庫文件(主要記錄爲PTR)

        示例,區域名稱爲100.16.172.in-addr.arpa;
                    
   $TTL 3600
   $ORIGIN 100.16.172.in-addr.arpa.

 @   IN  SOA  ns1.baidu.com.  nsadmin.baidu.com. (
           2017010801
           1H
           10M
           3D
           12H )
         IN      NS      ns1.baidu.com.
 67      IN      PTR     ns1.baidu.com.
 68      IN      PTR     mx1.baidu.com.
 69      IN      PTR     mx2.baidu.com.
 70      IN      PTR     bbs.baidu.com.
 71      IN      PTR     bbs.baidu.com.
 67      IN      PTR     www.baidu.com.    

別忘了修改權限和屬主屬組

檢查語法錯誤

    named-checkconf

3、重載配置文件

   rndc reload 


配置主從DNS服務器

    步驟:

   1、定義一個從區域(/var/named/slaves)

   2、重載配置


1、定義區域(從區域)

    zone "ZONE_NAME"  IN { 
        type  slave;
        file  "slaves/ZONE_NAME.zone";
        masters  { MASTER_IP; };
        }                    
  配置文件語法檢查:named-checkconf
                        
(2) 重載配置
     rndc  reload


注意:(1) 確保區域數據文件中爲每個從服務配置NS記錄,並且在正向區域文件需要每個從服務器的NS記錄的主機名配置一個A記錄,且此A後面的地址爲真正的從服務器的IP地址;
                
    注意:時間要同步;
     ntpdate命令;


DNS子域授權

子域授權就相當於是劃片管理,是由上至下的授權。由根開始"."。
例如:.com .net 就是由根授權名稱空間,其實就是由.決定要劃分什麼的名稱空間,由它委派子名稱空間。

例:若有個baidu.com.的域名,自己想再分多點子域名,如zhangsan.baidu.com. 就需要子域授權 。這就和51cto的博客一樣,我的博客地址爲http://zhaoyongtao.blog.51cto.com/  這就是在blog.51cto.com.下的一個子域。

DNS中最重要的就是NS記錄,其中每個NS裏面的負責人就是SOA,在父域上定義一條NS記錄和一條A記錄就可以完成子域授權了

    

正向解析區域授權子域(/var/named/baidu.com.zone):
    zhangsan.baidu.com.  IN  NS  ns1.zhangsan.baidu.com.
   s1. zhangsan.baidu.com. IN  A   IP.AD.DR.ESS(子域服務器ip)

          

   lisi.baidu.com.      IN  NS  ns1.lisi.baidu.com.            

   ns1.lisi.baidu.com.   IN   A   IP.AD.DR.ESS
      

    此子域就相當於一個域了,可以再給此子域添加正向解析記錄。


定義轉發
  注意:被轉發的服務器必須允許爲當前服務做遞歸;
            
(1) 區域轉發:僅轉發對某特定區域的解析請求;
       zone  "ZONE_NAME"  IN {
        type  forward;
        forward  {first|only};
        forwarders  { SERVER_IP; };
        };
                
        first:首先轉發;轉發器不響應時,自行去迭代查詢;
        only:只轉發;
                
(2) 全局轉發:針對凡本地沒有通過zone定義的區域查詢請求,通通轉給某轉發器;
        options {
            ... ...
            forward  {only|first};
            forwarders  { SERVER_IP; };
            .. ...
           };


bind中的安全相關的配置:
  acl:訪問控制列表;把一個或多個地址歸併一個命名的集合,隨後通過此名稱即可對此集全內的所有主機實現統一調用;
        
     acl  acl_name  {
         ip;
         net/prelen;
        };
                
    示例:
      acl  mynet {
            172.16.0.0/16;
            127.0.0.0/8;
          };
                
bind有四個內置的acl
     none:沒有一個主機;
     any:任意主機;
     local:本機;
     localnet:本機所在的IP所屬的網絡;
                
訪問控制指令:
     allow-query  {};  允許查詢的主機;白名單;
     allow-transfer {};  允許向哪些主機做區域傳送;默認爲向所有主機;應該配置僅允許從服務器;
     allow-recursion {}; 允許哪此主機向當前DNS服務器發起遞歸查詢請求; 
     allow-update {}; DDNS,允許動態更新區域數據庫文件中內容;
            
bind view:
    視圖:
     view  VIEW_NAME {
          zone
          zone
          zone
        }
            
            
      view internal  {
          match-clients { 172.16.0.0/8; };
          zone "magedu.com"  IN {
          type master;
          file  "magedu.com/internal";
           };
         };
            
       view external {
          match-clients { any; };
           zone "magecdu.com" IN {
           type master;
           file magedu.com/external";
             };
          };


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