DNS and BIND

 

一、DNSbind簡介

DNS,Domain Name Service,簡稱域名服務,BIND(Berkeley Internet Name Domain)是DNS協議的實現,DNS是因特網上作爲域名和IP地址相互映射的一個分佈式數據庫,能夠使用戶更方便的訪問互聯網,而不用去記住能夠被機器直接讀取的IP數串。通過主機名,最終得到該主機名對應的IP地址的過程叫做域名解析(或主機名解析)。

    

二、DNS解析過程

 

wKioL1YH8y6A8Vh2AAIty2HdDuU994.jpg

(圖片來自magedu)

過程解析:當用戶通過域名訪問一個網站時,現在本地查找HOSTS文件中的解析條目,沒有對應的條目,則會查找本地DNS緩存,如果沒有此域名的緩存,則會把解析請求發送給電腦中配置的本地DNS服務器(本地DNS服務器必須支持對客戶端遞歸)。本地DNS服務器接到請求後,如果是其直接負責區域內的主機,則會返回權威答案(aa),否則,查看是否有此條目的緩存記錄,有則返回非權威解析,沒有則將請求發送給根,一層一層迭代請求,直到找到主機所屬直接區域的DNS服務器,如果該區域內有此主機,則返回對應的IP給本地DNS,本地DNS再發送給客戶端,如果該區域內沒有此主機,則查詢失敗,終止查詢過程。

    

三、相關概念

 

根域(.)-->一級域(ICCNA)-->二級域(組織域)

一級域:

    組織域:.com,.org,.mil,.gov,.edu,

    國家域:.cn,.hk,.tw,.jp,.ir,.us,.uk

    反向域:.in-addr.arpa

 

domain:域

zone:區域

namespace:名稱空間

FQDN:full queritify domain name,全稱域

 

查詢:

   遞歸查詢:只發起一次請求,最終能得到答案

   迭代:發起一次請求,不一定得到答案

 

DNS監聽端口:

    UDP:53   用戶客戶端查詢域名的請求

    TCP:53   用於主從DNS間的區域傳送

 

DNS服務器的類型:

      主DNS服務器:維護所負責解析的域內解析庫服務器;解析庫管理維護;

      輔助DNS服務器:從主DNS服務器或其它的從DNS服務器那裏“複製”(區域傳遞)一份解析庫;

      緩存DNS服務器:緩存查詢記錄

      轉發服務器:只負責轉發請求,不負責查詢

 

資源記錄的格式:

   name   [ttl(緩存時間)]   IN    資源記錄類型(RRtype)  Value

 

1、SOA

     SOA,start of authority,起始授權記錄,一個區域文件有且只能有一個SOA記錄,且爲資源記錄的第一條.

  name: 只能是區域名稱,通常可以簡寫爲@,例如:.

  value:有n個數值,最主要的是主DNS服務器的FQDN,點不可省略

  例子:

     @ 600 IN SOA  na.magedu.com. 管理員郵箱(admin.dnsstudy.com.)(

             serial number   ;序列號註釋,十進制數據,不能超過10位,通常使用日期

             refresh time ;刷新時間,從服務器從主服務器請求同步解析庫的時間間隔

             retry time      ;重試時間,從服務器到主服務器請求同步解析庫失敗時,再次嘗試的

                              ;時間間隔;應該小於refresh time

             expire time ;過期時間,若主服務器在這個時間內仍無法通信則放棄同步

             netgative answer ttl ; 否定答案的緩存時長

         )

   

2、NS:NAME Server,名稱服務器,可以有多條記錄

   name:區域名稱,通常可以簡寫爲@

   value:DNS服務器的FQDN(可以使用相對名稱)

   例子:

            @ 600 IN NS ns

 

3、A:Address,主機名到IP的正向解析,只能定義在正向區域數據文件中

   name:FQDN(可以使用相對名稱)

   value:IP

   例子:

       www  600(單位s) IN A 1.2.3.4

       www  600(單位s) IN A 1.2.3.5      # 相同FQDN的對應不同的IP時可以做輪詢

       www  600(單位s) IN A 1.2.3.4

       ftp  600(單位s) IN A 1.2.3.4


4、AAAA:主機名到IPv6的正向解析

5、CNAME:cononical NAME,設置別名

       name :FQDN

      value :FQDN

      例子:

          ftp IN CHANE www  

6、MX:Mail  eXchanger,郵件交換服務器,可以有多個

       name:區域名稱,用於標識smtp服務器

       value:包含優先級和FQDN

           優先級:0-99,數字越小,級別越高,

       例子:

        @ 600 IN MX 10 mail

        @ 600 IN MX 20 mail2

 

7、PRT:Pointer,反向域名解析記錄,IP 到FQDN,只能定義在反向區域數據文件中,反向區域名稱爲

逆向網絡地址加.in-addr.arpa後綴組成

     name:IP,逆向的主機地址,例如172.16.100.7的name爲7.100,完全格式爲7.100.16.172.in-addr.arpa.

     value:FQDN

         例子:

          4.3.2. 600 IN PTR www.test.com.

 

四、配置文件和工具

主配置文件:定義區域 /etc/named.conf

格式:

   options{

        //全局選項

   }

   zone "zone name" {

      //定於區域

   }

   logging{

       //日誌文件

   }

   include:加載別的文件

 

語法檢查:

name-checkconf 檢查主配置文件

name-checkzone "區域文件"  配置文件

 

dig 命令:

  格式:dig [-t type] [-x addr] name @DNS服務器

   選項:+[no]trace [不]適用迭代

               +[no]tcp 是否使用tcp

               +[no]recurse:是否使用遞歸

 

 

五、DNS配置

1、主從DNS服務器正向以及反向同步設置

 

主服務器(192.168.52.10/etc/named.conf  配置:

--------------------------start--------------------------------------------------

acl allow_clients {            # 設定允許遞歸IP的ACL
   192.168.52.0/24;
   127.0.0.0/8;
};
 

listen-on port 53 { 192.168.52.10; };        # 監聽主機IP地址192.168.52.10的DNS端口
//allow-query     { localhost;};             # 將此項註釋,即允許所有主機查詢
allow-recursion { allow-clients; };          # 允許對應ACL中的IP遞歸,默認yes爲允許所有
//include "/etc/named.root.key";             #  將此項註釋
 
/*-----------建立正向區域---------------------*/
zone "ops.com" IN {        # 增加區域ops.com
    type master;               # 設置爲主區域
    file "ops.com.zone";
};
 
/*-----------建立反向區域---------------------*/
zone
"52.168.192.in-addr.arpa" IN {
    type master;
    file "192.168.52.ptr.zone";
    allow-transfer { 192.168.52.20; 
};

 

/*-----------正向區域文件ops.com.zone設置--------*/

[root@Centos6_6-1 ~]# cat /var/named/ops.com.zone 
 
$TTL    1D    @    IN  
SOA  dns1.ops.com.  admin.ops.com. (
        2015091612
        8H
        15M
        7D
        1D
)
 
        IN   NS    dns1
        IN   NS    dns2
dns1    IN   A     192.168.52.10
dns2    IN   A     192.168.52.20
www     IN   A     192.168.52.10

 

/*-----------正向區域文件192.168.52.ptr.zone設置---------------------*/

[root@Centos6_6-1 ~]# cat /var/named/192.168.52.ptr.zone
$TTL    1D    @    IN    
SOA    dns1.ops.com.  admin.ops.com. (
            2015091612
            8H
            15M
            1W
            1D
)
 
       IN    NS   dns1.ops.com.
       IN    NS   dns2.ops.com.
       IN    MX  10  mail.ops.com.
10     IN    PTR  dns1.ops.com.
20     IN    PTR  dns2.ops.com.
10     IN    PTR  www.ops.com.
15     IN    PTR  mail.ops.com.

 

# 設置區域文件訪問權限

[root@Centos6_6-1 named]# chown :named ops.com.zone              
[root@Centos6_6-1 named]# chown :named 192.168.52.ptr.zone
[root@Centos6_6-1 named]# chmod 640 ops.com.zone 192.168.52.ptr.zone

檢測區域語法

[root@Centos6_6-1 ~]# named-checkzone ops.com /var/named/ops.com.zone   
zone ops.com/IN: loaded serial 2015091611
OK

檢測named配置文件語法

[root@Centos6_6-1 ~]# named-checkconf
[root@Centos6_6-1 ~]# service named restart
[root@Centos6_6-1 ~]# cat /var/named/ops.com.zone
$TTL    1D    @    IN  
SOA  dns1.ops.com.  admin.ops.com. (
        2015091612 8H 15M    7D  1D
)
        IN   NS    dns1
        IN   NS    dns2
        IN   MX 10 mail
dns1    IN   A     192.168.52.10
dns2    IN   A     192.168.52.20
www     IN   A     192.168.52.10
mail    IN   A     192.168.52.15
pop     IN   CNAME mail
[root@Centos6_6-1 ~]# cat /var/named/192.168.52.ptr.zone
$TTL    1D    @    IN    
SOA    dns1.ops.com.  admin.ops.com. (
        2015091612 8H 15M    7D  1D
)
 
       IN    NS   dns1.ops.com.
       IN    NS   dns2.ops.com.
       IN    MX  10  mail.ops.com.
10     IN    PTR  dns1.ops.com.
20     IN    PTR  dns2.ops.com.
10     IN    PTR  www.ops.com.
15     IN    PTR  mail.ops.com.

--------------------------- end -----------------------------------------------

DNS從服務器(192.168.52.20)配置(配置後需重啓服務)

/etc/named.conf 

zone "ops.com" IN {
    type slave;
    masters { 192.168.52.10; };
    file "slaves/ops.com.zone";
    allow-transfer { none; };
};
 
zone "52.168.192.in-addr.arpa" IN {
    type slave;
    masters { 192.168.52.100; };
    file "slaves/192.168.52.arpa.zone";
    allow-transfer { none; };
};

驗證

[root@Centos6_6-1 ~]# tail /var/log/messages     #查看日誌文件
...
Sep 18 23:30:59 Centos6_6-1 named[4445]: zone ops.com/IN: sending notifies (serial
2015091611)
Sep 18 23:34:07 Centos6_6-1 named[4445]: client 192.168.52.20#52910: transfer of
'ops.com/IN': AXFR started
Sep 18 23:34:07 Centos6_6-1 named[4445]: client 192.168.52.20#52910: transfer of
'ops.com/IN': AXFR ended
...
Sep 19 00:54:27 Centos6_6-1 named[4793]: zone ops.com/IN: sending notifies (serial
2015091612)
Sep 19 00:56:01 Centos6_6-1 named[4793]: client 192.168.52.20#54891: transfer of
'52.168.192.in-addr.arpa/IN': AXFR started
Sep 19 00:56:01 Centos6_6-1 named[4793]: client 192.168.52.20#54891: transfer of
'52.168.192.in-addr.arpa/IN': AXFR ended
[root@Centos6_6-2 ~]# ll /var/named/slaves/        # 文件已經生成,可以用cat查看裏面內容
                                                    是否和主DNS的是否一致
-rw-r--r--. 1 named named 443 Sep 17 07:05 192.168.52.ptr.zone
-rw-r--r--. 1 named named 452 Sep 17 07:09 ops.com.zone

 # dig工具查詢相關RR是否正常

[root@Centos6_6-1 ~]# dig -t NS ops.com @192.168.52.10   
;;
QUESTION SECTION:
;ops.com.                        IN        NS
;;
ANSWER SECTION:
ops.com.                86400        IN        NS        dns2.ops.com.
ops.com.                86400        IN        NS        dns1.ops.com.
;;
ADDITIONAL SECTION:
dns1.ops.com.                86400        IN        A        192.168.52.10
dns2.ops.com.                86400        IN        A        192.168.52.20
 
[root@Centos6_6-1 ~]# dig -x 192.168.52.10    @192.168.52.10
[root@Centos6_6-1 ~]# dig -t A www.ops.com   @192.168.52.20
[root@Centos6_6-1 ~]# dig -t MX ops.com    @192.168.52.20

六、子域授權及轉發

子域授權:

1、在父域服務器(192.168.52.10)上區域文件/var/named/ops.com.zone添加一下兩行:

linux     IN   NS      dns.linux
dns.linux   IN   A       192.168.52.30

2、子域服務器(192.168.52.30)上的配置文件/etc/named.conf

# 新增區域 linux.ops.com
zone "linux.ops.com" IN {
    type master;
    file "linux.opscom.zone";
};

# 子域服務器新建對應linux.ops.com.zone 區域文件

[root@Centos6_6-3 ~]# vim /var/named/linux.ops.com.zone 
$TTL    1D    @    IN  
SOA   dns.linux.ops.com.   admin.ops.com. (
        2015091610
        8H
        15M
        7D
        1D
)
 
       IN  NS    dns
dns     IN  A    192.168.52.30
www     IN  A    192.168.52.30
[root@Centos6_6-1 named]# chown :named linux.ops.com.zone
[root@Centos6_6-1 named]# chmod 640 linux.ops.com.zone
 
[root@Centos6_6-1 ~]# dig -t A [email protected]
...
;;QUESTION SECTION:
;www.linux.ops.com.                IN        A
 
;;ANSWER SECTION:
www.linux.ops.com.        86400        IN        A        192.168.52.30
 
;;AUTHORITY SECTION:
linux.ops.com.                86400        IN        NS        dns.linux.ops.com.
 
;;ADDITIONAL SECTION:
dns.linux.ops.com.        86400        IN        A        192.168.52.30

區域轉發:

1、子域域名服務器(192.168.52.30)上的配置文件/etc/named.conf

zone "ops.com" IN {    # ops.com區域解析請求轉發到父域域名服務器192.168.52.10
    type forward;
    forwarders { 192.168.52.10; };
};
[root@Centos6_6-3 ~]# dig -t A www.ops.com @192.168.52.30        # 解析父域的域名驗證轉發是否成功
...
;;QUESTION SECTION:
;www.ops.com.                        IN        A
;;ANSWER SECTION:
www.ops.com.                86400      IN        A        192.168.52.10
;;AUTHORITY SECTION:
ops.com.                86400        IN        NS        dns1.ops.com.
ops.com.                86400        IN        NS        dns2.ops.com.
;;ADDITIONAL SECTION:
dns2.ops.com.                86400     IN        A        192.168.52.20
dns1.ops.com.                86400     IN        A        192.168.52.10

 

六、view(視圖)

    視圖可以實現不同的請求返回不同的解析值,這對不同運營商的用戶訪問web服務器時返回解析IP時有非常重要的作用,由於國情原因,跨運營商訪問會出現互聯互通問題,而view就可以結合acl實現聯通用戶訪問web服務器可以解析返回聯通IP,而電信用戶訪問返回電信IP。定義view之後,所有的zone都需要放置在view中,此處在/etc/named.rfc1912.zones 文件中定義視圖,需要把/etc/named.conf文件中的根zone刪除,重新定義到此文件view中,否則會報錯。

配置:

[root@localhost named]# cat /etc/named.rfc1912.zones
...
acl ct_ip { 192.168.0.0/16; };      # 模擬定義電信IP ACL
acl cnc_ip { 172.16.0.0/16; };      # 模擬定義聯通IP ACL
view telecom {                       # 模擬定義電信view
        match-clients { ct_ip; };      # 匹配電信 ACL
---------------------------------------------------------------------------------------
zone "." IN  
zone "localhost.localdomain" IN
zone "localhost" IN zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa"
IN zone "1.0.0.127.in-addr.arpa" IN zone "0.in-addr.arpa" IN
注意:節省篇幅,裏面的value值不列出來。
--------------------------------------------------------------------------------------------------------------------------------------
zone "devops.com." IN {
        type master;
        file "devops.com.telecom";
    };
};
 
view unicom {              # 模擬定義聯通view
    match-clients { cnc_ip;any; };  # 匹配聯通ACL,其他不匹配的也默認以聯通視圖解析
    zone "devops.com." IN {
        type master;
        file "devops.com.unicom";
    };
};
[root@localhost named]# cat devops.com.telecom   # 定義區域telecom的zone文件
$TTL    1D    @     IN  
SOA     dns.devops.com.   admin.devops.com. (
        2015091612   8H     15M  1W   1D )
 
      IN   NS    dns
dns   IN   A     192.168.52.100
www   IN   A     192.168.52.200
[root@localhost named]# cat devops.com.unicom   # 定義區域unicom的zone文件d
$TTL    1D    @     IN  
SOA     dns.devops.com.   admin.devops.com. (
        2015091612   8H     15M  1W   1D )
 
      IN   NS    dns
dns   IN   A     172.16.0.100
www   IN   A     172.16.0.200

 

[root@localhost ~]# ifconfig       # 實驗要求,定義了一個模擬電信段IP:192.168.52.100 
                                   #和一個模擬聯通段的IP::172.16.0.100
eth0      Link encap:Ethernet  HWaddr 00:0C:29:9B:17:8B 
          inet addr:192.168.52.100  Bcast:192.168.52.255  Mask:255.255.255.0
eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:9B:17:8B 
          inet addr:172.16.0.100  Bcast:172.16.255.255  Mask:255.255.0.0

驗證:

[root@localhost named]# dig -t A www.devops.com @192.168.52.100       # 驗證電信用戶的訪問解析
;;QUESTION SECTION:
;www.devops.com.                        IN       A
;;ANSWER SECTION:
www.devops.com.           86400        IN        A   192.168.52.200  # 成功返回了電信IP
;;AUTHORITY SECTION:
devops.com.               86400        IN        NS        dns.devops.com.
;;ADDITIONAL SECTION:
dns.devops.com.           86400        IN        A        192.168.52.100

 

[root@localhost named]# dig -t A www.devops.com @172.16.0.100  # 驗證聯通用戶的訪問解析
 
;;QUESTION SECTION:
;www.devops.com.                      IN        A
;;ANSWER SECTION:
www.devops.com.            86400      IN        A    172.16.0.200    # 成功返回了聯通IP
;;AUTHORITY SECTION:
devops.com.                86400      IN        NS     dns.devops.com.
;;
ADDITIONAL SECTION:
dns.devops.com.            86400      IN       A        172.16.0.100

 

 

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