BIND

BIND軟件:
BIND軟件的主要rpm包:
bind:主程序包,包括:
DNS服務程序(named)
解析庫
檢測工具;
bind-libs:Bind軟件的共享庫程序包;
bind-utils:通用工具包,包括各種服務測試工具,如:dig, host, nslookup等;
bind-chroot:設置僞根,啓用監牢模式;bind-9+版本中出現的安全功能實現;

應用層協議是DNS協議;DNS,Domain Name System;
DNS的應用程序實現:BIND;
BIND程序的服務主程序:named;
    53/TCP:完成區域傳送;
    53/UDP:完成主機名的解析查詢;
    953/TCP:rndc程序的監聽端口;

IETF:dnssec標準;dnssec,DNS安全擴展插件;

Bind軟件的組成:
    主配置文件:/etc/named.conf
    輔助配置文件:可以在主配置文件中利用include命令包含其他配置文件;
        /etc/named.rfc1912.zones:聲明瞭區域;
    安全認證密鑰文件:
        /etc/named.iscdlv.key
        /etc/named.root.key
    主程序:/usr/sbin/named
    遠程管理程序:/usr/sbin/rndc
    配置文件檢測工具:
        /usr/sbin/named-checkconf
    區域文件檢測工具:
        /usr/sbin/named-checkzone
    日誌文件:
        /var/log/named.log
    區域文件的存放目錄:
        /var/named
    存放輔助區域文件的目錄:
        /var/named/slaves

主配置文件:/etc/named.conf
    文件格式:
        格式特點:分段式配置格式;

    1.配置行的註釋方式:
        //:單行註釋;
        /*...*/:任意內容註釋;
        #:單行註釋;
    2.主配置文件中的常用配置段:
        1) 訪問控制列表配置段:
            acl string { address_match_element; ... };
        2) 全局選項配置段:
            options { statements; ... };
        3) 日誌配置段:
            logging { statements; ... };
        4) 區域配置段:
            zone string optional_class { statements; ... };
        5) 視圖配置段:
            view string optional_class { statements; ... };
        6) include命令:
            include /PATH/TO/SOME_CONFIG_FILE;

全局配置段:
    options {
        listen-on port 53 { 127.0.0.1; 172.16.72.2; };
            //在啓動DNS服務時,named進程所監聽的套接字;
        directory   "/var/named";
            //定義解析庫(區域數據庫文件)的根目錄;在主配置文件中添加此配置語句之後,可以在後面定義區域數據庫時使用相對路徑;
        allow-query     { localhost; };
            //訪問控制語句,意思是允許本服務器處理哪些主機發送來的解析查詢請求;默認爲localhost,即:只允許本機以127.0.0.1發送查詢請求;
        recursion yes;
            //允許本服務器爲所有查詢請求做遞歸查詢;
        allow-recursion { 172.16.72.1/16; };
            訪問控制指令,允許爲哪些客戶端做遞歸查詢;
        pid-file "/run/named/named.pid";
            //定義存放主進程pid文件的路徑;
    };

    rndc命令:Remote Name Domain Controller, 遠程名稱域控制器;
        953/TCP
        常用的子命令:
            status:查看服務器端的允許狀態;
            reload:通知服務器重載配置文件和區域文件,無需重新啓動服務;
            flush:清空服務器端的DNS緩存;
            stop:較安全的停止DNS服務;

區域配置段:
    zone "FQDN" IN {
        //聲明一個區域名稱;此名稱要是有FQDN表示;如:qhdlink.com
        type master;
            區域的類型:
                master:主區域;
                slave:輔助區域;
                hint:提示區域,僅能在根域上設置;
                forward:轉發區域;
        file "named.localhost";
            存放與該域有關的解析信息的數據庫文件的路徑;如果是相對路徑,則相對於主配置文件的全局配置段中的"directory"指令所定義的目錄而言;
            注意:文件的所有權和權限設置必須能夠讓named用戶有讀取權限;
        allow-update { none; };
            訪問控制指令,允許哪些客戶端對數據庫內容進行動態更新;主要用於DDNS;
        allow-transfer { 172.16.72.1; };
            訪問控制指令,允許哪些主機能夠從當前服務器進行區域傳送;
        allow-query { address_match_element; ... };
            訪問控制指令,允許哪些主機進行區域內的解析查詢;
        allow-notify { address_match_element; ... };
            訪問控制指令,允許哪些主服務器向當前服務器發送區域變更通知;
    };

正向查找區域聲明示例:

zone "ytc.com" IN {
type master;
file "ytc.zone";
allow-update { none; };
allow-transfer { none; };
};

創建數據庫文件,修改權限並添加相應資源記錄;
    /var/named/ytc.zone

檢測區域文件的語法格式:
    named-checkzone FQDN /PATH/TO/ZONE_FILE
例:# named-checkzone ytc.com /var/named/ytc.zone

對主配置文件或區域數據庫文件進行修改之後,並不會立即生效;只有在重載配置文件和區域文件之後,配置才生效;重載配置文件的方法:
    1.systemctl reload named.service
    2.rndc reload
    3.systemctl restart named.service(不推薦)
    4.service named reload(CentOS 6-)

注意:對於應用程序服務進程重載配置文件的操作,如果能使用reload,就使用reload,不要輕易執行restart命令;

客戶端測試工具:dig, host, nslookup
dig命令:
dig - DNS lookup utility
格式:
dig [@server] [-t type] [-x addr] [queryopt...]

        @server:表示此次查詢請求使用指定的DNS服務器,而不使用/etc/resolve.conf文件中定義的nameserver;
        -t RR_type:指定此次查詢的資源記錄的類型;
        -x addr:進行反向解析查詢時,用於指定IP地址;
        queryopt:查詢選項:
            +[no]recurse:要求目標服務器必須[不]以遞歸方式進行查詢;
            +[no]trace:[不]跟蹤顯示整個查詢請求的解析過程;

        模擬區域傳送:
            dig -t axfr|ixfr DOMAIN_NAME_FQDN

host命令:
    host - DNS lookup utility
    格式:
        host [-t RR_type] {name} [server]
        示例:
            ~]# host -t A www.ytc.com 172.16.1.12

nslookup命令:
    交互式命令;
        server IP_ADDR:指定使用哪個DNS服務器進行查詢;
        set q=RR_type:指定此次查詢的資源記錄的類型及相關答案;
        set type=RR_type:功能同set q=RR_type;
        FQDN | IP_ADDR:根據FQDN進行正向查詢解析或根據IP_ADDR進行反向查詢解析;
    命令行工具;
        nslookup FQDN NS_SRV
        示例:
            ~]# nslookup www.ytc.com 172.16.72.2

配置反向解析區域:
    反向域的FQDN:172.16.0.0/16網段的反向域名:
        16.172.in-addrp.arpa.
    反向查找區域示例:

zone "16.172.in-addr.arpa" IN {
type master;
file "172.16.local";
allow-transfer { none; };
};

正向區域庫文件配置示例:
$ORIGIN ytc.com.
$TTL 86400
@ IN SOA ns1.ytc.com. root.ytc.com. (
2018041101;
1H;
20M;
2W;
1D);
IN NS ns1.ytc.com.
IN MX 10 mail.ytc.com.
ns1 IN A 172.16.1.11
mail IN A 172.16.1.11
www IN A 172.16.100.100
www IN A 172.16.100.101
web.ytc.com. IN CNAME www.ytc.com.
ftp.ytc.com. IN CNAME web.ytc.com.

反向區域配置示例:
$ORIGIN 16.172.in-addr.arpa.
$TTL 86400
@ IN SOA ns1.ytc.com. root.ytc.com. (
2018041102;
2H;
10M;
2W;
5H);
IN NS ns1.ytc.com.
11.1 IN PTR ns1.ytc.com.
11.1 IN PTR mail.ytc.com.
50.50 IN PTR www.ytc.com.
51.50 IN PTR www.ytc.com.

主從DNS服務器:(主輔)
注意:
1.主服務器和輔助服務器都是域級別的概念;
2.必須保證主輔服務器之間的網絡通信的順暢以及時間同步;
3.爲了確保所有的名稱服務器都能被識別和使用,需要在區域數據庫中爲所有的名稱服務器添加NS資源記錄;
4.區域數據庫中每條NS資源記錄都必須有A記錄與之對應;
5.從服務器上可以默認將複製而來的數據庫文件保存至/var/name/slaves目錄中;
6.在主服務器上應該通過訪問控制指令允許從服務器進行區域傳送;同時從服務器要指定主服務器;

從服務器配置示例:
zone "ytc.com" IN {
type slave;
masters { 172.16.1.12; };
file "slaves/ytc.slave.zone";
allow-transfer { none; };
};

zone "16.172.in-addr.arpa" IN {
type slave;
masters { 172.16.1.12; };
file "slaves/172.16.slave.local";
allow-transfer { none; };
};

轉發器:
全局轉發:
對於凡是不能由本服務器管理的域的請求,全部以轉發的方式由指定的服務器進行遞歸查詢;

    在bind的主配置文件的全局配置段中定義;

    options {
        forward first;
        forwarders { FORWARD_SERVER_IP_ADDR; };
    };

在A服務器上定義ytc.com域;
zone "ytc.com" IN {
type master;
file "ytc.zone";
allow-transfer { 172.16.1.12; } ;
};

配置庫文件:
$ORIGIN ytc.com.
$TTL 86400
@ IN SOA ns1.ytc.com. root.ytc.com.(
2018041111;
1H;
10M;
3D;
4H);
IN NS ns1
ns1 IN A 172.16.1.11
www IN A 1.1.1.2

在B服務器上,僅僅在全局配置段添加轉發器;
zone "ytc.com" IN {
type forward;
forward only;
forwarders { 172.16.1.11; };
};

再用客戶端測試:
dig @172.16.1.12 -t A www.ytc.com

區域轉發:
    專門針對於某個特定的域的請求,如果不能給出權威答案,則轉發至指定的服務器進行遞歸查詢;

    在bind的主配置文件的區域配置段中定義;

    區域轉發配置示例:

在A服務器上定義ytc.com.cn域;
zone "ytc.com.cn" IN {
type master;
file "ytc.cn.zone";
allow-transfer { none; };
};

還需要定義該域的區域數據庫:/var/name/ytc.cn.zone

在B服務器上定義qhdlink.com.cn域的區域轉發器:
zone "ytc.com.cn" IN {
type forward;
forward only;
forwarders { 172.16.1.11; };
};

forward first|only;
    first:首先轉發,當轉發器中指定的服務器無響應時,再自行迭代查找;
    only:只使用轉發器中指定的服務器進行遞歸查詢,如果無法獲得答案,則直接返回否定答案;自身不再迭代查找;

注意:任何形式的請求轉發,都必須依靠被指定的服務器允許自身做遞歸查詢;

子域委派授權:
將子域的管理權授權給子域中的名稱服務器;父域中不保存任何子域數據庫中資源記錄;但爲了能夠成功授權,需要添加一條NS記錄,指向子域的名稱服務器;

子域委派授權的示例:
在A服務器上維護父域ytc.org域;
在A服務器上的ytc.org域的數據庫中添加NS記錄,以實現委派授權;

$ORIGIN ytc.org.
$TTL 86400
@ IN SOA ns1.ytc.org. root.ytc.org. (
2018041103;
2H;
5M;
5D;
1D);
IN NS ns1.ytc.org.
qhd.ytc.org. IN NS ns1.qhd.ytc.org.
ns1 IN A 172.16.1.11
ns1.qhd.ytc.org. IN A 172.16.1.12
www IN A 1.2.1.1

在B服務器上維護子域qhd.ytc.org域;
    在B服務器上聲明子域並創建數據庫文件:

zone "qhd.ytc.org" IN {
type master;
file "qhd.ytc.org.zone";
allow-transfer { none; };
};

$ORIGIN qhd.ytc.org.
$TTL 86400
@ IN SOA ns1.ytc.org. root.qhd.ytc.org. (
201801104;
2H;
2M;
5D;
10H);
IN NS ns1
ns1 IN A 172.16.1.12
www IN A 11.11.22.22

注意:子域的委派授權,實際上是爲客戶端提供迭代查詢機制;

Bind中的基礎安全相關的配置:
1.訪問控制列表:
acl,Access Control List,將一個或多個IP地址,歸併爲一個集合,隨後可以通過實現定義好的名稱對集合中的多個IP地址進行統一調用或設置;

    bind內部有四個內置的acl:
        any:包括所有的IP地址,整個IP地址棧中的所有有效IP地址;
        none:不包括任何一個IP地址;
        local:僅包含本地已經配置生效的所有IP地址;
        localnet:包含本機所有已經配置並生效的IP地址所在的網段的IP地址;

    定義acl的語法格式:
        acl acl_name {
            [!] ip_addr;
            [!] network/prefix;
        };

    示例:
        acl myacl {
            172.16.0.0/16;
            ! 172.16.100.100;
            172.17.100.101;
        };

    注意:
        1.在調用ACL之前,確保事先已經定義了指定的ACL;
        2.通常在主配置文件/etc/named.conf中定義ACL,建議將自定義的ACL放置在配置文件的最前面,以保證後面的操作可以成功調用到此ACL;

        所有的allow*語句,都是可以調用ACL的,包括:
            allow-update { acl_name; }; 
            allow-transfer { acl_name; };
            allow-recursion { acl_name; };
            allow-query { acl_name; };
            allow-notify { acl_name; };
            ...

視圖的配置:View;
實現智能DNS解析服務;根據客戶端發送的請求報文中的某個封裝信息,判斷客戶端的網絡類型和服務類型,從而能夠提供最適合此用戶使用的解析結果;

定義視圖:
    view VIEW_NAME {
        match_clients { acl; };
        zone "DOMAIN1" IN {
            ...
        };
        zone "DOMAIN2" IN {
            ...
        };
        ...
    };

注意:一旦在Bind中啓用視圖功能,在所有的zone的聲明必須都設置在視圖中;

配置示例:
    1.給DNS服務器配置兩個不同網段的IP地址;
        eno16777736:172.16.72.2/16
        eno16777736:0:100.100.100.1/24

    2.修改主配置文件:
        1) 創建一個intranet的ACL;

acl intranet {
172.16.0.0/16;
192.168.1.0/24;
10.1.1.0/24;
};
2) 定義視圖:將所有的zone放置到視圖中;
view intranet {
match-clients { intranet; };
zone "." IN {
type hint;
file "named.ca";
};

zone "ytc.com" IN {
type master;
file "ytc.intra.zone";
allow-update { none; };
allow-transfer { 172.16.1.11; };
};
};

view internet {
match-clients { any; };

zone "ytc.com" IN {
type master;
file "ytc.inter.zone";
allow-update { none; };
allow-transfer { 172.16.1.11; };
};
};

/var/named/qhdlink.intra.zone

$ORIGIN ytc.com.
$TTL 86400
@ IN SOA ns1.ytc.com. root.ytc.com. (
2018040701;Serial
1H;Refresh
15M;Retry
1W;Expire
1D);Minimal TTL
IN NS ns1.ytc.com.
ns1 IN A 172.16.1.12
www IN A 172.16.100.100

/var/named/ytc.inter.zone

$ORIGIN ytc.com.
$TTL 86400
@ IN SOA ns1.ytc.com. root.ytc.com. (
2018040701;Serial
1H;Refresh
15M;Retry
1W;Expire
1D);Minimal TTL
IN NS ns1.ytc.com.
IN MX 10 mail.ytc.com.
ns1 IN A 100.100.100.1
www IN A 61.72.178.82

利用不同的客戶端進行測試:
client1:172.16.1.11/16 --> www.ytc.com ==> 172.16.100.100
cleint2:100.100.100.100/24 --> www.ytc.com ==> 61.72.178.82

總結:www.ytc.com域名的解析過程:
客戶端首選DNS服務器的名稱解析過程:
1.客戶端請求解析的內容是服務器管理和維護的內容:
client --> First DNS --> client
答案:權威答案;

    2.客戶端請求解析的內容不是服務器管理和維護的內容:
        1) 如果此服務器能夠爲客戶端實施遞歸查詢:
            client --> First DNS --> NS(.) --> FirstDNS {NS(com)}
                                 First DNS --> NS(com) --> FirstDNS {NS(ytc)}
                                 First DNS --> NS(ytc) --> Answer(www.ytc.com)
                                 First DNS --> client
            迭代查詢的過程;

        2) 如果此服務器不能爲客戶端實施遞歸查詢:
            直接返回否定答案;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章