dns服務bind使用

正向,反向,主從,子域,轉發器,安全控制。數據庫



介紹
vim

wKioL1aQw2CSnCboAAEUzDzo8vA983.jpg


top level domain(tld) 頂級域windows

域的組織絡式,咱們也看到箭頭是單向的,這也是域名解析的方式,在本地DNS服務器沒法解析的狀況下,本地DNS服務器會直接去找根域,再找頂級域,找到組織域再找到主機名。註冊域名通常就是註冊的組織域,如今也有那種net.co,這種不知道是怎麼個狀況。
centos


遞歸 迭代緩存


wKioL1aQzWfgTaJEAAB7WQENmwk287.jpg

如今咱們先來看看左下角這個用戶是如何解析到redhat.com下面的主機的。server是對應的dns服務器。
安全

wKioL1aQ2q-iaSlWAACpc7SFsBs296.jpg


用戶向本地的DNS服務器,發送解析請求。本地的DNS服務器出去饒了一大圈最終返回給用戶結果。服務器

這種隱藏背後的操做,直接爲用戶返回結果就是對用戶支持遞歸網絡


可是對於DNS服務器來講,它本身沒有請求的答案,因此就直接去找根,而根告訴DNS服務器去找com.,服務器收到之後就再去找com.,com又告訴咱們的DNS服務器再去找redhat.com,服務器再去找redhat.com,redhat.com這個DNS服務器上面有這個答案,因此直接返回給咱們本地的DNS服務器。本地的DNS服務器再返回給用戶最終答案。session

上面DNS服務器一次又一次的重複去找同一個答案,這種過程就是迭代
dom


若是是redhat下面的主機想要解析google下面主機的主機名。redhat的DNS服務器沒有答案也是會直接去找根,不會去找上級COM的,即便看起來這樣更近。

由於要達到這樣的效果太難了,本地的DNS服務器須要有每一個負責com域服務器的IP地址,其它的同級域固然也要有了,並且那些服務器發生變化也還要同步更新。因此,結果就是咱們的DNS服務器上面只有全球13個根的服務器地址。


正向解析與反向解析

名稱 --> IP:正向解析
IP --> 名稱:反向解析

兩者的名稱空間,非爲同一個空間,即非爲同一棵樹;所以,也不是同一個解析庫;

反向的樹有點這個姿式。

wKioL1aQ8FeAm9JCAABe5O9JLlI711.jpg

地址就是從上到下的IP地址塊。不過這個在公網上沒有物理存在的解析樹,只是在公司組織內部有時候會使用。

正向解析是 倒置的域名樹。

反向解析是 倒置的IP樹。

很明顯它們一點也不同。因此在作DNS服務的時候要明白這是兩個徹底不一樣的東西,spacer.gif沒有交集。


DNS服務器類型
        主DNS服務器
        輔助DNS服務器
        緩存名稱服務器

只要是DNS服務器默認狀況下都會把不是本身管轄的區域的解析記錄,緩存下來。
而這種主要是用來給客戶端作遞歸的DNS服務器就是緩存名稱服務器。


一次完整的查詢請求通過的流程:
Client --> hosts文件 --> DNS Local Cache --> DNS  Server (recursion) -->
本身負責解析的域:直接查詢數據庫並返回答案;
不是本身負責解析的域:Server Cache --> iteration(迭代)
    
解析答案
    確定答案:
    否認答案:不存在查詢的鍵,所以,不存在與其查詢鍵對應的值;
    
    權威答案:由直接負責的DNS服務器返回的答案;
    非權威答案:


主-輔DNS服務器
    主DNS服務器:維護所負責解析的域數據庫的那臺服務器;讀寫操做都可進行;
    從DNS服務器:從主DNS服務器那裏或其它的從DNS服務器那裏「複製」一份解析庫;但只能進行讀操做;
        「複製」操做的實施方式:
            序列號:serial, 也便是數據庫的版本號;主服務器數據庫內容發生變化時,其版本號遞增;
            刷新時間間隔:refresh, 從服務器每多久到主服務器檢查序列號更新情況;
            重試時間間隔:retry, 從服務器從主服務器請求同步解析庫失敗時,再次發起嘗試請求的時間間隔;
            過時時長:expire,從服務器始終聯繫不到主服務器時,多久以後放棄從主服務器同步數據;而且本身也中止提供服務;
            否認答案的緩存時長:
            
        主服務器能夠」通知「從服務器隨時更新數據;
        
區域傳送:區域數據文件
        全量傳送:axfr, 傳送整個數據庫;通常剛創建完成DNS的時候。

        增量傳送:ixfr, 僅傳送變化的數據;


區域數據庫文件

    資源記錄:Resource Record, 簡稱rr;
    記錄類型:A, AAAA, PTR, SOA, NS, CNAME, MX

    資源記錄類型,用於資源的功能。

    SOA: Start Of Authority,  起始受權   區域管理者,一個區域解析庫有且只能有一個SOA記錄,並且必須放在第一條;
    NS: Name Server  域名服務記錄;一個區域解析庫能夠有多個NS記錄;其中一個爲主的;

    MX: Mail eXchange: 郵件交換器, 優先級:0-99,數字越小優先級越高;
    A:  Address    : (FQDN-->IP)  地址記錄,FQDN --> IPv4;
    PTR: PoiTeR, IP --> FQDN   反向地址記錄,IP --> FQDN
    AAAA: Address    FQDN --> IPv6   地址記錄,FQDN --> IPv6
    CNAME: Canonical Name,   別名記錄

    資源記錄的定義格式:

    語法:    name      [TTL]     IN    RR_TYPE         value


資源記錄的格式
        name    [ttl]    IN    RRtype         Value
        name: 須要解析的名稱
        ttl : 客戶端緩存能夠保留的時間。
        IN  : 關鍵字
        RRtype: 記錄類型
        Value :所解析名稱得值
   

SOA :
        name  只能是區域名稱 能夠用@來表示區域。
        value  區域名稱(也能夠用主dns的FQDN), 管理員郵箱 , 附加信息。  ; 分號表明註釋。


         @    600    IN    SOA    ds.star.com.   dd.star.com.  (
                serial number  ;序列號,用來表示記錄是否有變更,十位之內的十進制數字
                refresh time   ;刷新時間,多久到服務器檢查一次數據。
                retry time     ;重試時間, 刷新失敗後,再嘗試時間。
                expire time    ;過時時間, 輔助DNS將中止工做。
                negative answer ttl ;否認答案的ttl,客戶端緩存否認答案的時間。
            )

        上面中括號裏的數據能夠寫在同一行。用空格分隔。
        dd.star.com 就是 dd@star.com.     由於文件中@有特殊意義。
        SOA 必須是區域數據庫文件的第一條記錄。
        刷新時間單位  秒。  也能夠用 M 分  H 小時,  D  天

        SOA中定義的序列號只要是增加,主服務器就會觸發通知機制,序列號減小不會觸發。

NS : 表明DNS服務器,一個區域能夠有多個。
        name 區域名稱, 能夠用@表示。
        value   dns服務器的FQDN.

        @    600    IN    NS    dns.star.com.    
        @    600    IN    NS    ns        不寫全自動補上區域名稱。

: 若是有多個相同主機名的A記錄,就會輪詢着給客戶端地址。
        name: FQDN
        value: IP

MX: 表明這個區域裏的smtp服務器,一個區域能夠有多個 指定優先級。
        用來標識區域裏的郵件服務器的。要否則這也不知道發給誰啊 tc@star.com   
        name:區域名稱
        value: 包含優先級和FQDN.
        優先級: 0-99 ,數字越小,級別越高。此優先級不是輪詢用是,是用來備份的。


        @    600    IN    MX    10    mail

         這個域的郵件服務器是mail,要有相對應的A記錄。

CNAME:
        name : FQDN    別名
        value: FQDN    真實的名
        ftp    600    IN    CNAME    www

        ftp 的正式名稱是www, www 的別名是ftp

PTR : IP-->FQDN,  反向查找,在正向區域物理文件中雖然也能夠寫PTR記錄,但最好仍是把它們分開的好。   能夠有多條記錄。
        name: IP    反向IP地址。
        value: FQDN

        區域名稱爲: 網絡地址反向.in-addr.arpa.

注意主機名的 .  和相對名稱 、絕對名稱。相對名稱就是會自動會在主機名後加上區域名稱的。絕對名稱必定要以.點結尾。 要否則會再加上區域名稱。

一個區域只能有一個主DNS服務器。

注意:
(1) TTL能夠從全局繼承;  $TTL 3600
(2) @表示當前區域的名稱;
(3) 相鄰的兩條記錄其name相同時,後面的name可省略;
(4) 對於正向區域來講,各MX,NS等類型的記錄的value爲FQDN,此FQDN應該有一個A記錄;



環境

bind:BIND 9.9.4-RedHat-9.9.4-18.el7 (Extended Support Version)

系統:CentOS Linux release 7.1.1503 (Core)

各主機:

172.16.40.10
主DNS服務器
172.16.40.11
從DNS
172.16.40.12
子DNS
172.16.249.218
測試機


注意事項:時間同步。


安裝

BIND:Berkeley Internet Name Domain 伯克利建立,現由ISC.ORG維護。

isc(www.isc.org)   dhcp軟件也是由isc來維護。


直接yum安裝便可,並且也省去了本身建立一些所必須的區域文件。

咱們這裏就只安裝bind包了,其它的如chroot功能包這裏就不介紹了。

 [root@localhost ~]# yum install bind -y 
 Package bind.x86_64 32:9.9.4-18.el7 will be installed
[root@localhost ~]# rpm -ql bind
.....
/etc/named
/etc/named.conf
/etc/named.rfc1912.zones
/etc/named.root.key        #在CentOS6上面若是不能轉發,能夠把這個註釋試試。
/etc/rndc.conf             #用於rndc與bind通訊
/etc/rndc.key              #用於rndc與bind通訊
/usr/sbin/named-checkconf  #用來檢查bind的配置文件。
/usr/sbin/named-checkzone  #用來檢查區域數據文件
/usr/sbin/rndc
/var/named/named.ca
/var/named/named.empty
/var/named/named.localhost
/var/named/named.loopback
/var/named/slaves

主配置文件:

/etc/named.conf
包含進來的其它文件:
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key


解析庫文件:
/var/named/目錄下;
通常名字爲:ZONE_NAME.zone

rndc: Remote Name Domain Controller  遠程名稱域管理。953/tcp,默認監聽於127.0.0.1地址,所以僅容許本地使用;爲了安全着想通常也不用設置。

看到生成了幾個named開頭的文件,這些都是所必須的區域數據文件。


注意:
(1) 一臺DNS服務器可同時爲多個區域提供解析;
(2) 必需要有根區域解析庫文件: named.ca;
(3) 還應該有兩個區域解析庫文件:localhost和127.0.0.1的正反向解析庫;
    正向:named.localhost
    反向:named.loopback

rpm安裝的會本身帶,就是上面的那幾個named.*文件,若是是編譯安裝就要本身寫了。


bind程序安裝完成以後,默認便可作緩存名稱服務器使用;若是沒有專門負責解析的區域,直接便可啓動服務;
CentOS 6: service  named  start
CentOS 7: systemctl  start  named.service



配置:

主配置文件:
        options {
            全局選項;
        };

        zone "ZONE name" {
            區域數據文件;
        };
        
        logging {
            定義日誌系統;
        };

如:
        options {
            directory    "/var/named";
        };
        
        zone "." IN {
            type hint;
            file "named.ca";
        };

        zone "star.com." IN {
            type master;
            file "star.com.zone";
        };

type包括: 

           hint   根提示
           master 主區域
           slave  輔助區域
           forward 轉發區域

注意每行後面的分號。   

options {
        listen-on port 53 { 127.0.0.1; };        #默認監聽127,要改成監聽的網卡
        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     { localhost; };    #容許查詢的主機,白名單。能夠註釋,默認全部

recursion yes;                            #容許全部給全部主機遞歸。

        dnssec-enable yes;        #DNS的安全擴展認證機制,若是出現問題能夠禁用試試。
        dnssec-validation yes;    #
        dnssec-lookaside auto;    #

        bindkeys-file "/etc/named.iscdlv.key";

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

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

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";            #在centos6上面若是不能轉發,能夠註釋掉試試。

 
我這裏的配置

/etc/named.conf  全局配置,其它部分沒有改。

options {
        listen-on port 53 { 172.16.40.10; };
        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     { localhost; };

咱們先來啓動下看看。

wKioL1aR1MjhA8V1AAL9lIhTyw0912.jpg

[root@localhost ~]# ss -unl
State       Recv-Q Send-Q                                     Local Address:Port                                       Peer Address:Port 
UNCONN      0      0                                           172.16.40.10:53                                                    *:*     
UNCONN      0      0                                                      *:123                                                   *:*     
UNCONN      0      0                                              127.0.0.1:323                                                   *:*     
UNCONN      0      0                                                    ::1:53                                                   :::*     
[root@localhost ~]# ss -tnl
State       Recv-Q Send-Q                                     Local Address:Port                                       Peer Address:Port 
LISTEN      0      10                                          172.16.40.10:53                                                    *:*

tcp/udp的53號端口。


172.16.249.218測試:

[root@localhost ~]# dig -t A www.baidu.com @172.16.40.10

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6 <<>> -t A www.baidu.com @172.16.40.10
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50339
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 5, ADDITIONAL: 5

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

;; ANSWER SECTION:
www.baidu.com.        1200    IN    CNAME    www.a.shifen.com.
www.a.shifen.com.    300    IN    A    61.135.169.121
www.a.shifen.com.    300    IN    A    61.135.169.125

;; AUTHORITY SECTION:
a.shifen.com.        1198    IN    NS    ns4.a.shifen.com.
a.shifen.com.        1198    IN    NS    ns1.a.shifen.com.
a.shifen.com.        1198    IN    NS    ns2.a.shifen.com.
a.shifen.com.        1198    IN    NS    ns3.a.shifen.com.
a.shifen.com.        1198    IN    NS    ns5.a.shifen.com.

;; ADDITIONAL SECTION:
ns2.a.shifen.com.    1198    IN    A    180.149.133.241
ns3.a.shifen.com.    1198    IN    A    61.135.162.215
ns5.a.shifen.com.    1198    IN    A    119.75.222.17
ns1.a.shifen.com.    1198    IN    A    61.135.165.224
ns4.a.shifen.com.    1198    IN    A    115.239.210.176

;; Query time: 3253 msec
;; SERVER: 172.16.40.10#53(172.16.40.10)
;; WHEN: Sat Jan  9 17:00:12 2016
;; MSG SIZE  rcvd: 260


工具介紹

dig命令:
    dig  [-t RR_TYPE]  name  [@SERVER]  [query options]
        用於測試dns系統,所以其不會查詢hosts文件;

        查詢選項:
            +[no]trace:跟蹤解析過程;
            +[no]recurse:進行遞歸解析;
            
        反向解析測試
            dig  -x  IP
            
        模擬徹底區域傳送:
            dig  -t  axfr  DOMAIN  [@server]
            
host命令:
    host  [-t  RR_TYPE]  name  SERVER_IP
    
nslookup命令:
    nslookup  [-options]  [name]  [server]
    
    交互式模式:
        nslookup>
            server  IP:以指定的IP爲DNS服務器進行查詢;
            set  q=RR_TYPE:要查詢的資源記錄類型;
            name:要查詢的名稱;


nslookup在windows上也有。


配置一個正向解析區域:

一、定義區域
     在主配置文件中或主配置文件輔助配置文件中實現;
    zone  "ZONE_NAME"  IN  {
        type  {master|slave|hint|forward};
        file  "ZONE_NAME.zone";
    };    
    
注意:區域名字ZONE_NAME即爲域名;

我這裏是在named.rfc1912.zones文件中添加的,也能夠在named.conf文件中添加。

注意分號。

[root@localhost ~]# vim /etc/named.rfc1912.zones
zone "star.com" IN {
        type master;
        file "star.com.zone";
};

文件的位置是相對於主配置文件中的directory而言的。

檢測一下配置文件有沒有錯誤:

[root@localhost named]# named-checkconf

沒有消息就是最好的消息。


二、 創建區域數據文件(主要記錄爲A或AAAA記錄),在/var/named目錄下創建區域數據文件;

[root@localhost ~]# cd /var/named
[root@localhost named]# ls
data  dynamic  named.ca  named.empty  named.localhost  named.loopback  slaves
[root@localhost named]# vim star.com.zone

$TTL 3600
@       IN      SOA     ns      nsadmin.star.com.       (   
                2016011001
                30M 
                10M 
                1D  
                1H      )   
    
        IN      NS      ns  
ns      IN      A       172.16.40.10
www     IN      A       172.16.40.101
@       IN      MX  10  mail
mail    IN      A       172.16.40.102
pps     IN      CNAME   www 
pop3    IN      CNAME   mail

wKioL1aR9gnD4361AACvVly3B4w035.jpg

檢查一下區域數據文件:

[root@localhost named]# named-checkzone star.com star.com.zone 
zone star.com/IN: loaded serial 2016011001
OK
[root@localhost named]#

提示加載了一個區域,而且序列號爲2016011001,只要這個數字增加就會通知全部從服務器來拿數據。

咱們如今只有主服務器。

重讀一下置配:

[root@localhost named]# rndc reload
server reload successful
[root@localhost named]

這裏也能夠用systemctl reload named來重載配置文件。

不過在數據文件不少的時候用這個可能會卡住的。在最後會介結下rndc的經常使用使用。


172.16.249.218測試:

[root@localhost ~]# dig -t MX star.com @172.16.40.10

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

;; QUESTION SECTION:
;star.com.            IN    MX

;; ANSWER SECTION:
star.com.        3600    IN    MX    10 mail.star.com.

;; AUTHORITY SECTION:
star.com.        3600    IN    NS    ns.star.com.

;; ADDITIONAL SECTION:
mail.star.com.        3600    IN    A    172.16.40.102
ns.star.com.        3600    IN    A    172.16.40.10

;; Query time: 12 msec
;; SERVER: 172.16.40.10#53(172.16.40.10)
;; WHEN: Sat Jan  9 17:01:50 2016
;; MSG SIZE  rcvd: 96

[root@localhost ~]# dig -t axfr star.com @172.16.40.10

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6 <<>> -t axfr star.com @172.16.40.10
;; global options: +cmd
star.com.        3600    IN    SOA    ns.star.com. nsadmin.star.com. 2016011001 1800 600 86400 3600
star.com.        3600    IN    MX    10 mail.star.com.
star.com.        3600    IN    NS    ns.star.com.
mail.star.com.        3600    IN    A    172.16.40.102
ns.star.com.        3600    IN    A    172.16.40.10
pop3.star.com.        3600    IN    CNAME    mail.star.com.
pps.star.com.        3600    IN    CNAME    www.star.com.
www.star.com.        3600    IN    A    172.16.40.101
star.com.        3600    IN    SOA    ns.star.com. nsadmin.star.com. 2016011001 1800 600 86400 3600
;; Query time: 27 msec
;; SERVER: 172.16.40.10#53(172.16.40.10)
;; WHEN: Sat Jan  9 17:05:19 2016
;; XFR size: 9 records (messages 1, bytes 233)

模擬區域傳送,這裏能夠用來看看star.com區域裏面有哪些條目,看來咱們剛纔寫的所有都生效了。


這裏忽略了一個問題,看一下區域數據文件的權限:

[root@localhost named]# ll
total 20
drwxrwx---. 2 named named   22 Jan 10 11:44 data
drwxrwx---. 2 named named   58 Jan 10 14:44 dynamic
-rw-r-----. 1 root  named 2076 Jan 28  2013 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    6 Mar  6  2015 slaves
-rw-r--r--. 1 root  root   212 Jan 10 14:11 star.com.zone

如今的權限是其它人可讀的。來修改下。

[root@localhost named]# chown :named star.com.zone 
[root@localhost named]# chmod o= star.com.zone
[root@localhost named]# ll star.com.zone
-rw-r-----. 1 root named 212 Jan 10 14:11 star.com.zone
[root@localhost named]#



配置一個反向解析區域:

咱們先在配置文件中添加區域:

[root@localhost named]# vim /etc/named.rfc1912.zones
zone "16.172.in-addr.arpa" IN {
        type master;
        file "172.16.zone";
};

上面的區域名稱也能夠寫成40.16.172.in-addr.arpa。

我這裏只是爲了說明在數據文件中的地址的寫法。

[root@localhost named]# named-checkconf

沒有錯誤。

對區域添加對應的區域數據文件:

[root@localhost named]# vim 172.16.zone

$TTL 3600
@       IN      SOA     @       nsadmin.star.com. (
                2016011001
                30M 
                10M 
                1D  
                1H )
        IN      NS      ns.star.com.
10.40   IN      PTR     ns.star.com.
10.101  IN      PTR     www.star.com.
102.40  IN      PTR     mai.star.com.
102.40  IN      PTR     pop3.star.com.

wKioL1aSBhmRYq2TAADRd2GtV40321.jpg

我這裏的第10行的name部分寫錯了,正常應該是101.40。就是反着寫ip地址。作到下邊才發現,我實驗的主機改了下。這裏就不改了。


檢測一下:

[root@localhost named]# named-checkzone 16.172.in-addr.arpa 172.16.zone 
zone 16.172.in-addr.arpa/IN: loaded serial 2016011001
OK
[root@localhost named]# 
[root@localhost named]# rndc reload
server reload successful
[root@localhost named]#


172.16.249.128再來看看:

[root@localhost ~]# dig -x 172.16.40.10 @172.16.40.10

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

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

;; ANSWER SECTION:
10.40.16.172.in-addr.arpa. 3600    IN    PTR    ns.star.com.

;; AUTHORITY SECTION:
16.172.in-addr.arpa.    3600    IN    NS    ns.star.com.

;; ADDITIONAL SECTION:
ns.star.com.        3600    IN    A    172.16.40.10

;; Query time: 1 msec
;; SERVER: 172.16.40.10#53(172.16.40.10)
;; WHEN: Sat Jan  9 17:47:19 2016
;; MSG SIZE  rcvd: 98


[root@localhost ~]# dig -x 172.16.40.102 @172.16.40.10

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

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

;; ANSWER SECTION:
102.40.16.172.in-addr.arpa. 3600 IN    PTR    mai.star.com.
102.40.16.172.in-addr.arpa. 3600 IN    PTR    pop3.star.com.

;; AUTHORITY SECTION:
16.172.in-addr.arpa.    3600    IN    NS    ns.star.com.

;; ADDITIONAL SECTION:
ns.star.com.        3600    IN    A    172.16.40.10


主從配置

區域傳送:主從複製:
主服務器是時刻敞開的,只有用權限來控制。若是沒有權限控制,任何人均可以來複制。
因此: 從服務設置區域類型爲slave,從服務器作的就是去主服務器複製這個數據。別的無論。
服務器就會給它數據。

而父服務器上設置的從服務器的NS和A記錄只是爲了在區域文件序列號增長之後通知從服務器來獲取數據。

從服務器是用的隨機端口向服務器的53號端口開啓傳送的。從服務器扮演的是客戶端。


輔助DNS服務器從主DNS服務器或其它輔助DNS服務器處請求傳輸數據的過程。
輔助DNS服務器上面不用創建任務數據庫文件,會從主DNS上面同步。
徹底區域傳送: 傳送區域的全部數據, AXFR ,   通常剛創建完成DNS的時候。
增量區域傳送: 傳送區域中改變的數據部分, IXFR.


主的bind版本可能低於從的,從的不能低於主的。由於從的要兼容於主的。主的版本高會有新的功能,而從的沒有。從的去同步數據,可能就會出現問題。對於系統的版本沒有太大的要求,是軟件層面的同步。



從服務器設置:

172.16.40.11

安裝:

[root@localhost ~]# yum install bind -y

主配置文件:

options {
        listen-on port 53 { 172.16.40.11; };
        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     { localhost; };

配置文件中添加區域:

[root@localhost ~]# vim /etc/named.rfc1912.zones
zone "star.com" IN {
        type slave;
        file "slaves/star.com.zone";
        masters { 172.16.40.10; };
};

說明:

這裏的類型爲 slave。 文件放在slaves目錄下是由於這個目錄的的權限是named用戶可寫的,bind的工做用戶。masters 能夠在大括號中寫多個,以分號分隔。

[root@localhost named]# ll
total 16
drwxrwx---. 2 named named    6 Mar  6  2015 data
drwxrwx---. 2 named named    6 Mar  6  2015 dynamic
-rw-r-----. 1 root  named 2076 Jan 28  2013 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    6 Mar  6  2015 slaves

看最下面的一行,目錄的屬主組都是named。

從服務器不須要建立數據文件,它會去主服務器複製數據文件,而後再自動建立對應的數據文件。

咱們要作的就是爲它指定要在哪裏建立這個文件。 它的工做用戶是named,必須對目錄有寫入的權限才能建立文件。


啓動從服務器

[root@localhost named]# systemctl start named

172.16.40.10:主服務器

[root@localhost named]# tail -30 /var/log/messages
.....
Jan 10 16:10:15 localhost named[3224]: client 172.16.40.11#42701 (star.com): transfer of 'star.com/IN': AXFR started
Jan 10 16:10:15 localhost named[3224]: client 172.16.40.11#42701 (star.com): transfer of 'star.com/IN': AXFR ended

能夠看到172.16.40.11以隨機端口42701來請求star.com區域的數據。


172.16.40.11: 從服務器

[root@localhost named]# tail -20 /var/log/messages
Jan 10 16:10:15 localhost named[3257]: zone star.com/IN: transferred serial 2016011001
Jan 10 16:10:15 localhost named[3257]: transfer of 'star.com/IN' from 172.16.40.10#53: Transfer completed: 1 messages, 9 records, 233 bytes, 0.021 secs (11095 bytes/sec)
.....                    #從172.16.40.10:53傳送過來9條記錄,還有數據大小。
[root@localhost named]# ll slaves
total 4
-rw-r--r--. 1 named named 423 Jan 10 16:10 star.com.zone
[root@localhost named]#

數據文件確實有了,在centos7上面的這個bind版本 這個文件是以二進制格式存放的。咱們只能用dig命令來看看有沒有數據了。

[root@localhost ~]# dig -t axfr star.com @172.16.40.11

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6 <<>> -t axfr star.com @172.16.40.11
;; global options: +cmd
star.com.        3600    IN    SOA    ns.star.com. nsadmin.star.com. 2016011001 1800 600 86400 3600
star.com.        3600    IN    NS    ns.star.com.
star.com.        3600    IN    MX    10 mail.star.com.
mail.star.com.        3600    IN    A    172.16.40.102
ns.star.com.        3600    IN    A    172.16.40.10
pop3.star.com.        3600    IN    CNAME    mail.star.com.
pps.star.com.        3600    IN    CNAME    www.star.com.
www.star.com.        3600    IN    A    172.16.40.101
star.com.        3600    IN    SOA    ns.star.com. nsadmin.star.com. 2016011001 1800 600 86400 3600
;; Query time: 4 msec
;; SERVER: 172.16.40.11#53(172.16.40.11)
;; WHEN: Sat Jan  9 18:38:47 2016
;; XFR size: 9 records (messages 1, bytes 233)

別的測試就不貼了,太佔篇幅了。

這個dig -t axfr就是用來測試區域傳送的,也就是複製數據。由於如今尚未安全控制,因此在哪也可使用,到後面加上安全控制之後,能夠用這個命令來測試某主機有沒有複製的權限。


我這再把反向的也加上:

這裏我把上面添加的也貼出來了。剛添加的是下面那個。

zone "star.com" IN {
        type slave;
        file "slaves/star.com.zone";
        masters { 172.16.40.10; };
};

zone "16.172.in-addr.arpa" IN {
        type slave;
        file "slaves/172.16.zone";
        masters { 172.16.40.10; };
};

看下日誌:

[root@localhost named]# tail -20 /var/log/messages
.....
Jan 10 16:44:46 localhost named[3257]: zone 16.172.in-addr.arpa/IN: Transfer started.
Jan 10 16:44:46 localhost named[3257]: transfer of '16.172.in-addr.arpa/IN' from 172.16.40.10#53: connected using 172.16.40.11#51642
Jan 10 16:44:46 localhost named[3257]: zone 16.172.in-addr.arpa/IN: transferred serial 2016011001
Jan 10 16:44:46 localhost named[3257]: transfer of '16.172.in-addr.arpa/IN' from 172.16.40.10#53: Transfer completed: 1 messages, 7 records, 225 bytes, 0.006 secs (37500 bytes/sec)
Jan 10 16:44:46 localhost named[3257]: zone 16.172.in-addr.arpa/IN: sending notifies (serial 2016011001)
[root@localhost ~]# dig -t axfr 16.172.in-addr.arpa @172.16.40.11

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6 <<>> -t axfr 16.172.in-addr.arpa @172.16.40.11
;; global options: +cmd
16.172.in-addr.arpa.    3600    IN    SOA    16.172.in-addr.arpa. nsadmin.star.com. 2016011001 1800 600 86400 3600
16.172.in-addr.arpa.    3600    IN    NS    ns.star.com.
10.40.16.172.in-addr.arpa. 3600    IN    PTR    ns.star.com.
101.40.16.172.in-addr.arpa. 3600 IN    PTR    www.star.com.
102.40.16.172.in-addr.arpa. 3600 IN    PTR    mai.star.com.
102.40.16.172.in-addr.arpa. 3600 IN    PTR    pop3.star.com.
16.172.in-addr.arpa.    3600    IN    SOA    16.172.in-addr.arpa. nsadmin.star.com. 2016011001 1800 600 86400 3600
;; Query time: 4 msec
;; SERVER: 172.16.40.11#53(172.16.40.11)
;; WHEN: Sat Jan  9 19:08:02 2016
;; XFR size: 7 records (messages 1, bytes 225)

好了,還有一個問題。如今這種狀況下,從服務器只有到時間之後纔會去主服務器獲取數據。

若是想要讓主服務器通知從服務器,就要在主服務器的區域數據文件中加上從服務器的NS記錄。


忽然想到一點,在這裏加上,若是咱們這是公網的域名,而且想要在公網上使用。就要把主從兩臺服務器都在com服務器上受權才能使用。否則com服務器不知道有這我的,請求也就到不了這裏。


172.16.40.10: 加從服務器NS記錄。注意修改序列號。

wKiom1aSHx-yTHWJAACHI3LMUHU460.jpg

star.com區域。兩條記錄: 一、從服務器ns記錄,二、對應的A記錄。 

ftp記錄是我剛纔測試的時候加上的。這裏不用關注它。

wKioL1aSH1rT8wOLAABrJtK1-Ts216.jpg

16.172.in-addr.arpa加一條記錄,從服務器的NS記錄。

rndc reload 一下。主服務器會把此次修改通知給從服務器。  這就能夠了。



子域配置

注意:子區域服務器要在運行狀態,才能夠檢測經過區域數據文件。  namd-checkzone

           提示沒有A記錄。由於測試結果是由子域來返回的。
      
父域的區域數據文件中添加:有多個子域就要分別在文件中寫上這些設置。
            1, 受權的子區域名稱
            2, 子區域的名稱服務器
            3, 子區域的名稱服務器IP地址。

在相對應的區域數據文件中加上子區域的記錄  如我這裏要在star.com域中加上sst的子域:
            1, 子區域名稱 sst
            2, 子區域的名稱服務器 ns.sst.star.com.
            3, 子區域的名稱服務器 IP 地址, 加上A記錄。


看一下我這裏的star.com.zone的內容。爲了容易理解,NS記錄部分用的是絕對名稱。

$TTL 3600
@       IN      SOA     ns      nsadmin.star.com.       (   
                2016011006
                30M 
                10M 
                1D  
                1H      )   
    
star.com.               IN      NS      ns.star.com.
star.com.               IN      NS      ns1.star.com.
sst.star.com.           IN      NS      ns.sst.star.com.
ns.sst.star.com.        IN      A       172.16.40.12
.....#下面的沒有變化

wKioL1aSLITBpDuhAADl6nlTIPM700.jpg

主服務器這邊能夠了,子服務器是徹底獨立的一臺服務器,能夠說它不知道有父服務器的存在。

看咱們最上面的圖就能夠知道,是從上到下的,下邊的不會向上走,只會找到根向下走。


而父服務器作的上面的兩項只是標出子域,再來這種請求會去找子服務器。 而在父服務器不支持遞歸的狀況下,會返回給客戶端子域的地址。

序更號忘了改了,改一下,把配置通知給從服務器。


172.16.40.12:子服務器

主配置:

options {
        listen-on port 53 { 172.16.40.12; };
        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     { localhost; };

添加區域:

zone "sst.star.com" IN {
        type master;
        file "sst.star.com";
};

區域數據文件:

[root@localhost named]# vim sst.star.com

$TTL 3600
@       IN      SOA     ns.sst.star.com.  nsadmin.sst.star.com. (
                2016011001
                30M 
                10M 
                1D  
                1H )
    
        IN      NS      ns.sst.star.com.
ns      IN      A       172.16.40.12
www     IN      A       172.16.40.121
@       IN      MX  10  mail
mail    IN      A       172.16.40.120
pop     IN      CNAME   mail
ftp     IN      A       172.16.40.12

注意這裏的區域名稱是: sst.star.com.    相對名稱會在名稱以後自動加上這個。


檢測一下:

[root@localhost named]# named-checkconf
[root@localhost named]# named-checkzone sst.star.com sst.star.com 
zone sst.star.com/IN: loaded serial 2016011001
OK
[root@localhost named]#


172.16.249.218:

wKioL1aSQcWi62HNAAD-MUP-XyY526.jpg

成功了,發往父服務器來查找子域的查詢,父服務器遞歸去找子服務器。而後返回給咱們結果。

而若是,把父服務器的遞歸功能給關閉。再看一下會返回什麼結果。

172.16.40.10主配置文件:

   recursion no;

把這一項給改爲no。rndc reload 。我這裏在172.16.249.218上再看看。

wKiom1aSQa7wfiXGAAEH-Vb9AyU720.jpg

如今這種狀態就跟外網的根和頂級域在返回給本地DNS服務器的答案同樣,只返回下級域的地址。


再來看下從服務器會不會找到子域:

wKioL1aSQ3nxGEY-AACg09Dty6g430.jpg

沒問題,從服務器的主配置文件中,遞歸是打開的。


轉發器

如今咱們能夠從父服務器找到子服務器了,可是從子服務器是找不到父服務器的。

默認狀況下,在DNS上面沒有的區域是會直接找根的。
服務器都是由咱們所控制,也不必再讓子服務器去找根,再找com,再找到star.com了。

wKioL1aSSG-xRguKAADcNQXOkpQ494.jpg

找到外網去了,這種域名確定有人註冊啊。因此咱們要讓子服務器找父服務器去。


還有一種狀況,咱們只有二臺DNS服務器能夠上網,能夠解析外網的域名。可是如今又加了幾臺DNS,由於各類緣由這幾臺DNS不能上網,那麼如何才能解析外網的域名呢。可讓那二臺能夠解析外網域名的服務器爲咱們解析。


定義轉發:
注意:被轉發的服務器必須容許爲當前服務作遞歸;

(1) 區域轉發:僅轉發對某特定區域的解析請求;
    zone  "ZONE_NAME"  IN {
        type  forward;
        forward  {first|only};
        forwarders  { SERVER_IP; };
    };
   

(2) 全局轉發:沒有在本地定義的區域,統統轉發;

    options {
        ... ...
        forward only|first;

        forwarders  { SERVER_IP; };
        .. ...
    };


only 是隻轉發給目標主機,目標主機不能解析也不會再轉發給根。

first 轉發給目標主機,若是目標主機不能解析就再轉發給根。

所轉發的服務器, 要充許遞歸才行。 這樣服務器才能爲你遞歸找到結果並返回。

172.16.40.12: 子服務器。在/etc/named.rfc1912.zones文件中添加一個轉發區域。

zone "star.com" IN {
        type forward;
        forward only;
        forwarders { 172.16.40.10;172.16.40.11; };
};

rndc reload 就能夠了。如今直接再查詢可能會出現兩種地址,一個是轉到父服務器獲得的地址,還有是剛纔查詢結果的緩存。能夠在40.12服務器上執行 rndc flush。 來清空緩存。

172.16.:249.218:

wKioL1aSTLnhpZY-AACK2dt-d7M967.jpg


這種區域轉發,只能轉發單獨的區域。 全局的域能夠轉發本地不存在的全部區域,來解決咱們上面的第2種狀況。

wKiom1aSTSbSCEiuAACIDdL80ug832.jpg

加這兩項就能夠了。

全局性的總配置優先級低於各個區域,因此總轉發只會轉發不存在的區域。


安全控制

acl:訪問控制列表;把一個或多個地址歸併一個命名的集合,隨後經過此名稱便可對此集合內的全部主機實現統一調用;

ACL必需要定義後才能使用, 一般放在named.conf文件中最上方(不要在options內)。值若是有空格要用括號引發來。

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所屬的網絡;
    
訪問控制指令,有些能夠在zone中單獨使用。
allow-query  {};  容許查詢的主機;白名單;不指定則默認容許全部。
allow-transfer {};  容許向哪些主機作區域傳送;默認爲向全部主機;應該配置僅容許從服務器;
allow-recursion {}; 容許哪此主機向當前DNS服務器發起遞歸查詢請求;

                       定義遞歸白名單。測試只能在options中使用。要把recursion yes; 註釋掉。

allow-update {}; DDNS,容許動態更新區域數據庫文件中內容;容許動態更新區域數據庫文件中內容。爲了安全,最好是none。這個跟區域傳送沒有關係。


recursion yes; 給任何人遞歸。即然這裏明確指定爲yes。那麼默認應該是會不給遞歸纔對,並且上課也說是默認不給遞歸。但剛纔測試的倒是給遞歸,不知道嘍。


172.16.40.10:主服務器

定義幾個控制項:

wKiom1aSVPOyA_H_AACLxJoLwd0456.jpg

上面定義的只有172.16.40.11也就是從服務器能夠區域傳送。

在172.16.249.218上面:

[root@localhost mnt]# dig -t axfr star.com @172.16.40.10

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.5 <<>> -t axfr star.com @172.16.40.10
;; global options: +cmd
; Transfer failed.
[root@localhost mnt]#

直接失敗了。遞歸經測經也是生效的。用法也就這種方式。如今這裏只是修改的主服務器,從服務器也要修改。


最後再補充一點:

泛域名解析
        *    IN    A    172.16.0.1

 *星號表明若是沒有所要查詢的記錄,就以這個結果爲準。不用放到最後。不過感受仍是放到最後爲好。



域是一個邏輯的概念。而區域是域的兩種解析方式(正向解析區域,反向解析區域),就是咱們上面所說的兩種不一樣的樹。咱們平常所說的域名只是正向解析區域的,根固然也是了。

最高級的域(最外面的方框)包含這兩種區域(裏面的兩個長方形),而子域(裏面的實體長方形)又也這兩個區域的裏面,而後子域又有兩個區域(黑色長方形),依此類推。

區域能夠說是物理存在的,在咱們這裏它是文件,提供了各類解析記錄。

wKiom1aRtieyYtiWAAA6fP9B5h8650.jpg

這裏挺亂的,並且我我的理解可能也是錯的,因此暫時也不要管它了。只要知道咱們是由物理存在的區域數據文件來提供解析的。



rndc  子命令

status 統計數據
reload 重讀配置文件和區域文件
reload ZONE 指定重讀的區域
retransfer ZONE 手動區域徹底傳送,不用管區域數據文件序列號是多少
notify ZONE 手動向外發送區域的同步通知
reconfig

重讀配置文件並加載新增的區域。在有很是多的區域數據文件的時候很是有用。普通的重讀配置文件,會從新加載全部區域,區域多了之後會卡死的。

stats 把服務器的統計數據寫入statisics 文件中。
querylog 關閉或開啓查詢日誌,每條查詢都會記錄日誌,會產生大量I/O,正常狀況下不要開啓,調試的時候再開啓。
stop 關閉named進程。
flush 清空服務器端的緩存。有時候頗有用。
flushname NAME 只清除指定的緩存。
trace [LEVEL] 開啓調試模式,能夠指定級別。屢次開啓就是增長級別。詳細記錄日誌信息。一樣的會產生大量I/O操做。
debug 是有級別的, 調試級別。
notrace 等同於 trace 0


謝謝瀏覽。歡迎朋友們提出建議。

相關文章
相關標籤/搜索