淺談DNS基本原理以及實現方法(二)

         DNS作為互聯網服務的一個基礎型服務,了解和掌握DNS服務的原理和配置將是每一個運維人員必備的技能,這就如同闖蕩江湖的俠客不但要有的招式,還要懂的運用這些招式的心法一樣,接下來我將從DNS的正反向解析、主從同步、子域授權以及Bind view這四個方面來揭開它神秘的面紗。


正反向解析:

 

         首先,任何一臺服務器要想提供服務必須要有對應的服務應用程序,安裝bind

yum install -y bind bind--libs bind-utils

       安裝之后我們有必要認識一下bind安裝之后的文件,這樣有助于我們管理和配置這臺服務器

       1)服務腳本:/etc/rc.d/init.d/named

       2)主配置文件:/etc/name.con

                                 /etc/named.rfc1912.zones

                                 /etc/rndc.hey

       3)解析庫文件:/var/named/*.ZONE

       配置一臺DNS服務器,就是通過修改配置文件以及定義我們需要的解析庫來實現的,這里我先定義主服務器實現正反向解析

                 主DNS服務器:ns1.zhang.com      192.168.45.144

                 從DNS服務器:ns2.zhang.com      192.168.45.140

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

options {
        listen-on port 53 { 192.168.45.144; 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 yes;                                 ##以下幾行是DNS的安全,通常情況下關閉此功能
//      dnssec-validation yes;
//      dnssec-lookaside auto;

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

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

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";

        定義解析區域:/etc/named.rfc1912.zones

zone "zhang.com" IN {
        type master;
        file "zhang.com.zone";
        allow-update { none; };
};
zone "45.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.45.zone";
};

        創建區域解析庫文件:zhang.com.zone

$TTL 86400
$ORIGIN zhang.com.
@       IN      SOA     ns1.zhang.com.  admin.zhang.com (        ##定義SOA記錄        
                        201512151943                             ##序列號
                        1H                                       ##刷新時間 
                        5M                                       ##重試時間 
                        7D                                       ##過期時長     
                        1D )                                     ##否定答案的TTL值
        IN      NS      ns1                                      ##NS記錄
        IN      NS      ns2
        IN      MX 10   mx1                                      ##MX記錄以及優先級
        IN      MX 20   mx2
ns1     IN      A       192.168.45.144                           ##A記錄
ns2     IN      A       192.168.45.140
mx1     IN      A       192.168.45.142
mx2     IN      A       192.168.45.143
www     IN      A       192.168.45.141
pop     IN      CNAME   www                                      ##別名記錄
smtp    IN      CNAME   www
ftp     IN      CNAME   www
zhang.com.      IN      A       192.168.45.144
*       IN      A       192.168.45.141

       正向解析測試命令:

 dig -t A zhang.com @192.168.45.144

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -t A zhang.com @192.168.45.144
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54496
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;zhang.com.   IN A

;; ANSWER SECTION:
zhang.com.  86400 IN A 192.168.45.144

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

;; ADDITIONAL SECTION:
ns1.zhang.com.  86400 IN A 192.168.45.144
ns2.zhang.com.  86400 IN A 192.168.45.140

        反向解析測試命令:

dig -x 192.168.45.141 @192.168.45.144

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

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

;; ANSWER SECTION:
141.45.168.192.in-addr.arpa. 86400 IN PTR www.zhang.com.

;; AUTHORITY SECTION:
45.168.192.in-addr.arpa. 86400 IN NS ns1.zhang.com.
45.168.192.in-addr.arpa. 86400 IN NS ns2.zhang.com.

;; ADDITIONAL SECTION:
ns1.zhang.com.  86400 IN A 192.168.45.144
ns2.zhang.com.  86400 IN A 192.168.45.140

        測試命令dig總結:

        dig [-t type] name [@SERVER] [query options]

        dig用于測試dns系統,因此,不會查詢hosts文件進行解析;

                查詢選項:
               +[no]trace:跟蹤解析過程
               +[no]recurse:進行遞歸解析

        測試反向解析:
               dig -x IP @SERVER

主從復制:

    

       要實現主從同步,必須滿足以下要求:

          1、從服務器應該為一臺獨立的名稱服務器;
          2、主服務器的區域解析庫文件中必須有一條NS記錄是指向從服務器;
          3、從服務器只需要定義區域,而無須提供解析庫文件;解析庫文件應該放置于/var/named/slaves/目錄中;
          4、主服務器必須允許從服務器作區域傳送;可使用dig -t axfr  ZONE_NAME @SERVER_NAME測試主服務器是否可以做區域傳送
          5、主從服務器時間應該同步,可通過ntp進行;
          6、bind程序的版本應該保持一致;否則,應該從服務器高,主服務器低;

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

options {
        listen-on port 53 { 192.168.45.140; 127.0.0.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 yes;
//      dnssec-validation yes;
//      dnssec-lookaside auto;
        /* Path to ISC DLV key */
//      bindkeys-file "/etc/named.iscdlv.key";

//      managed-keys-directory "/var/named/dynamic";
};
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";

      定義解析區域:/etc/named.rfc1912.zones

zone "zhang.com" IN {
        type slave;
        masters { 192.168.45.144; };
        file "slaves/zhang.com.zone";
};

      此時我們的從服務器就只需執行:

rndc reload     ##重載主配置文件和區域解析庫文件

     從服務器就能從主服務器同步解析庫文件;

     執行測試命令:

dig -t A zhang.com @192.168.45.140

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -t A zhang.com @192.168.45.140
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7672
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;zhang.com.   IN A

;; ANSWER SECTION:
zhang.com.  86400 IN A 192.168.45.144

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

;; ADDITIONAL SECTION:
ns1.zhang.com.  86400 IN A 192.168.45.144
ns2.zhang.com.  86400 IN A 192.168.45.140

子域授權:

       每個域的名稱服務器,都是通過上級名稱服務器在解析庫中進行授權,類似根域授權tld一樣,那如何定義一個子域那?

       首先定義主服務器解析庫文件:/var/named/zhang.com.zone

$TTL 86400
$ORIGIN zhang.com.
@       IN      SOA     ns1.zhang.com.  admin.zhang.com (
                        201512151943
                        1H
                        5M
                        7D
                        1D )
        IN      NS      ns1
        IN      NS      ns2
        IN      MX 10   mx1
        IN      MX 20   mx2
ns1     IN      A       192.168.45.144
ns2     IN      A       192.168.45.140
mx1     IN      A       192.168.45.142
mx2     IN      A       192.168.45.143
www     IN      A       192.168.45.141
pop     IN      CNAME   www
smtp    IN      CNAME   www
ftp     IN      CNAME   www
zhang.com.      IN      A       192.168.45.144
*       IN      A       192.168.45.141

ops     IN      NS      ns1.ops
ops     IN      NS      ns2.ops
ns1.ops IN      A       192.168.45.140
ns1.ops IN      A       192.168.45.142

         然后編輯子域服務器解析區域:/etc/named.rfc1912.zones

zone "ops.zhang.com" IN {
        type master;
        file "ops.zhang.com.zone";

};

         同時一定別忘記創建解析庫文件:/var/named/ops.zhang.com.zone

$TTL 1D
$ORIGIN   ops.zhang.com.
@         IN            SOA     ns1.ops.zhang.com.      admin.ops.zhang.com. (
                                201515160000
                                1H
                                10M
                                3D
                                1D )
          IN            NS      ns1
          IN            NS      ns2
ns1       IN            A       192.168.45.144
ns2       IN            A       192.168.45.141
www       IN            A       192.168.45.141
www       IN            A       192.168.45.141

        同步主配置文件以及解析庫文件:rndc reload

        執行測試命令:

 dig -t A www.ops.zhang.com @192.168.45.140

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -t A www.ops.zhang.com @192.168.45.140
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11650
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;www.ops.zhang.com.  IN A

;; ANSWER SECTION:
www.ops.zhang.com. 86400 IN A 192.168.45.141

;; AUTHORITY SECTION:
ops.zhang.com.  86400 IN NS ns1.ops.zhang.com.
ops.zhang.com.  86400 IN NS ns2.ops.zhang.com.

;; ADDITIONAL SECTION:
ns1.ops.zhang.com. 86400 IN A 192.168.45.144
ns2.ops.zhang.com. 86400 IN A 192.168.45.141

bind view:

     一個bind服務器可定義多個view,而這個view就相當于bind的一個子容器,這個子容器能夠提供比服務器自身更靈活更小一部分配置的功能,每個view中可定義一個或多個zone;每個view用一來匹配一組客戶端;多個view內可能需要對同一個區域進行解析,但使用不同的區域解析庫文件;

        view定義的方法:

        view  VIEW_NAME  {

                       match-clients {};

         };

         注意:(1) 一旦啟用了view,所有的zone都只能定義在view中;
               (2) 僅有必要在匹配到允許遞歸請求的客戶所在view中定義根區域;
               (3) 客戶端請求到達時,是自上而下檢查每個view所服務的客戶端列表;

    首先定義主配置文件/etc/named.conf;為了方便定義解析區域,我將本地地址定義到localnet這個acl中,同時由于一旦啟用view功能,所有的zone都只能定義到view中,所以我將這里定義的根區域注釋掉,而是定義到/etc/named.rfc1912.zone中;

options {
        listen-on port 53 { 192.168.45.144; 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;
acl localnet {
        192.168.45.0/24;
        127.0.0.0/8;
};


};

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";


    其次在/etc/named.rfc1912.zone中定義我們的view

view internal {
        match-clients { localnet; };
        allow-recursion { localnet; };

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

zone "localhost.localdomain" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
};

zone "localhost" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
};

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 {
        type master;
        file "named.loopback";
        allow-update { none; };
};

zone "1.0.0.127.in-addr.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
};
zone "0.in-addr.arpa" IN {
        type master;
        file "named.empty";
        allow-update { none; };
};
zone "zhang.com" IN {
        type master;
        file "zhang.com.zone";
        allow-update { none; };
};
zone "45.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.45.zone";
};

};

view external {
        match-clients { any; };
        zone "zhang.com" IN {
                type master;
                file "zhang.com.external";
                allow-update { none; };
        };
};


    最后創建我們定義的解析區域文件zhang.com.external

$TTL 86400
$ORIGIN zhang.com.
@       IN      SOA     ns1.zhang.com.  admin.zhang.com (
                        201512151943
                        1H
                        5M
                        7D
                        1D )
        IN      NS      ns1
        IN      NS      ns2
        IN      MX 10   mx1
        IN      MX 20   mx2
ns1     IN      A       192.168.45.144
ns2     IN      A       192.168.45.140
www     IN      A       2.2.2.1
*       IN      A       2.2.2.1


    重啟服務后,我們就可以通過本機以及通過非本機網絡使用dig命令發現,同樣解析一個域名在不同的網絡中解析,得到的解析地址也不一樣


       以上就是bind服務器的四個基本應用,理解和使用這個網絡基礎服務對我們網絡運維工作中有很多的好處,歡迎有興趣的朋友一起討論DNS服務器的其他一下應用。

   

原創文章,作者:zhang,如若轉載,請注明出處:http://www.www58058.com/10102

(0)
zhangzhang
上一篇 2015-12-19
下一篇 2015-12-19

相關推薦

  • linux基礎之磁盤管理

    linux基礎之磁盤管理 學習linux,數據維護和管理是重中之重,而數據大部分存放在硬盤當中,因此,熟練掌握磁盤的使用和管理是運維人員的基礎要求。那么,linux系統包括哪些知識點呢? 下面,我們就詳細闡述下Linux中磁盤的分區、格式化,以及一些磁盤的高級用法:磁盤配額、RAID陣列和LVM 一、硬盤 隨著技術的進步,人類社會的不斷發展。硬盤也經歷了幾代…

    Linux干貨 2017-03-19
  • 基于NFS服務的mariadb數據庫實現

    實驗要求:     (1) nfs server導出/data/目錄;     (2) nfs client掛載/data/至本地的/mydata目錄;本地的mysqld或mariadb服務的數據目錄設置為/mydata, 要求服務能正常啟動,且可正常 存儲數據;   (3)用另一臺主機,…

    2017-06-11
  • 第二周作業

    一、文件管理命令以及演示方法  1.1. mkdir命令     作用:創建文件夾     基本用法:mkdir [OPTION]… DIRECTORY…     參數:   &nbsp…

    Linux干貨 2016-08-22
  • N26-第七周博客作業

    一、創建一個10G分區,并格式為ext4文件系統; 1、 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;          A、創建一個10G的磁盤空間 [root@VM_221_40_centos ~]#fdisk /de…

    2017-07-09
  • vim實用技能

    vim編輯器 簡介 vi: Visual Interface,文本編輯器 文本:ASCII, Unicode 文本編輯種類: 行編輯器: sed 全屏編輯器:nano, vi VIM – Vi IMproved 使用 vim:模式化的編輯 基本模式: 編輯模式,命令模式 輸入模式 末行模式: 內置的命令行接口 打開文件: # vim [OPTIO…

    Linux干貨 2018-01-16
  • corosync + pacemaker + iscsi實現高可用mysql (上)

    一、實驗圖   二、準備實驗環境:  1)確保sql服務器之間可以基于主機名通信 [root@SQL1 ~]# vim /etc/hosts 172.16.2.13  SQL1.linux.com  SQL1 172.16.2.14  SQL2.li…

    Linux干貨 2015-07-09

評論列表(1條)

  • stanley
    stanley 2015-12-19 19:18

    清晰詳細,堅持加油

欧美性久久久久