Linux網絡服務之DNS服務器介紹及配置實例詳解

一、概述
DNS( Domain Name  System)是“域名系統”的英文縮寫,是一種組織成域層次結構的計算機和網絡服務命名系統,它用於TCP/IP網絡,它所提供的服務是用來將主機名和 域名轉換爲IP地址的工作
它是一種協議,把這個協議予以實現軟件有很多,比如BIND(Berkeley Internet Name Domain), PowerDNS, dnsmasq
它工作時是監聽於兩種傳輸協議上的:TCP:53 UDP:53

二、什麼是域名?
首先我們都知道在訪問某個網站時輸入www.sina.com或其他類似格式的這種東東,其實他後面對應的是一臺或者多臺服務器,這些服務器的地址都是IP地址來代表的,而IP地址地址又是由一串有規律但是很難讓人記住的數字,比較難記。爲了使用和記憶方便,也爲了便於網絡地址的分層管理和分配,INTERNET在1984年採用了域名管理系統( DOMAIN NAME SYSTEM),入網的每臺主機都具有類似於下列結構的域名:
主機號.機構名.網絡名.最高層域名
所以我們在輸入www.sina.com的時候其實是訪問的是主機,www.sina.com是主機名,也叫FQDN,FQDN:FQDN:(Fully Qualified Domain Name)完全合格域名
那DNS有又是負責什麼的呢?DNS,即名稱解析,簡單來說就是名稱轉換,即Name Resolving,其背後有查詢過程,既然是查詢,肯定需要依賴某些數據庫來實現。那既然是名稱解析,主要實現什麼解析呢?其實現的是從FQDN <--> IP,這是一種雙向轉換,或者說雙向解析,從FQDN可實現到IP的解析,同樣,從IP也可以實現到FQDN的解析。但這種雙向轉換是通過不同的機制實現的。

三、DNS域架構
  域名系統作爲一個層次結構和分佈式數據庫,包含各種類型的數據,包括主機名和域名。DNS數據庫中的名稱形成一個分層樹狀結構稱爲域命名空間。域名包含單個標籤分隔點.
   DNS,採用的是C/S架構,使用一種分佈式數據庫,有嚴格的上下級關係,上級僅知道其直接下級,而下級只知道根的位置。當我們要解析某個主機名的時候,先從最上級進行查找,然後逐級往下查找,最終返回結果。最上級的是根域,用.表示根域,根域下又有許多TLD。
TLD:Top Level Domain頂級域,頂級域又分爲三類:
   組織域:如:.com,.org,.net,.cc等等
   國家域:如:.cn,.hk,.iq,.ir,.jp,.us等等
   反向域:IP-->FQDN(早期僅能實現該解析方式)
       反向:IP-->FQDN
       正向:FQDN-->IP    
wKioL1Mj1SnhO8TFAAFGqowUiZE738.jpg


四、DNS的查詢過程

DNS的查詢過程,按查詢方式的不同,分爲遞歸查詢和迭代查詢。
▲遞歸查詢:只發出一次請求,本地主機向本地域名服務器發出查詢請求,如果本地域名服務器能夠解析,則返回查詢結果,否則,本地域名服務器向根請求查詢,如果根知道結果則返回給本地域名服務器結果,否則,就由根在向下移級域名查詢結果,這樣逐級查詢,最終逐級返回結果,最終返回到本地主機。
迭代查詢:發出多次請求,本地主機先向本地域名與服務器發出查詢請求,如果本地域名服務器能夠解析,則返回結果,否則,由本地主機向根查詢,同樣,如果根能夠解析直接返回結果,否則返回負責該域名解析的下一級域名,讓本地主機找該域名繼續查詢,最終,找到結果。

在實際的網絡中,一般採用兩段式查詢過程,即先遞歸,後迭代。從本地主機到本地域名服務器採用遞歸查詢,而從本地域名服務器到最終結果則採用迭代方式查詢。
DNS的解析過程又可分爲正向解析和反向解析。
由FQDN到IP是正向解析,而由IP到FQDN屬於反向解析。
wKiom1MgMbGyWG_1AAJ_WSLOd5M012.jpg1、在瀏覽器中輸入www.qq.com域名,操作系統會先檢查自己本地的hosts文件是否有這個網址映射關係,如果有,就先調用這個IP地址映射,完成域名解析。

2、如果hosts裏沒有這個域名的映射,則查找本地DNS解析器緩存,是否有這個網址映射關係,如果有,直接返回,完成域名解析。

3、如果hosts與本地DNS解析 器緩存都沒有相應的網址映射關係,首先會找TCP/ip參數中設置的首選DNS服務器,在此我們叫它本地DNS服務器,此服務器收到查詢時,如果要查詢的 域名,包含在本地配置區域資源中,則返回解析結果給客戶機,完成域名解析,此解析具有權威性。

4、如果要查詢的域名,不由本地DNS服務器區域解析,但該服務器已緩存了此網址映射關係,則調用這個IP地址映射,完成域名解析,此解析不具有權威性。

5、如果本地DNS服務器本地區域文 件與緩存解析都失效,則根據本地DNS服務器的設置(是否設置轉發器)進行查詢,如果未用轉發模式,本地DNS就把請求發至13臺根DNS,根DNS服務 器收到請求後會判斷這個域名(.com)是誰來授權管理,並會返回一個負責該頂級域名服務器的一個IP。本地DNS服務器收到IP信息後,將會聯繫負 責.com域的這臺服務器。這臺負責.com域的服務器收到請求後,如果自己無法解析,它就會找一個管理.com域的下一級DNS服務器地址 (qq.com)給本地DNS服務器。當本地DNS服務器收到這個地址後,就會找qq.com域服務器,重複上面的動作,進行查詢,直至找到 www.qq.com主機。

6、如果用的是轉發模式,此DNS服 務器就會把請求轉發至上一級DNS服務器,由上一級服務器進行解析,上一級服務器如果不能解析,或找根DNS或把轉請求轉至上上級,以此循環。不管是本地 DNS服務器用是是轉發,還是根提示,最後都是把結果返回給本地DNS服務器,由此DNS服務器再返回給客戶機。

五、DNS服務器類型
DNS服務器類型主要分爲以下幾種:
(1)主DNS服務器(primary name server):它是特定域所有信息的權威性信息源。它從域管理員構造的本地磁盤文件中加載域信息,該文件(區文件)包含着該服務器具有管理權的一部分域結構的最精確信息。主服務器是一種權威性服務器,因爲它以絕對的權威去回答對其管轄域的任何查詢。
(2)輔助DNS服務器(secondary name server):它可從主服務器中複製一整套域信息。區文件是從主服務器中複製出來的,並作爲本地磁盤文件存儲在輔助服務器中。這種複製稱爲"區文件複製"。在輔助域名服務器中有一個所有域信息的完整拷貝,可以有權威地回答對該域的查詢。因此,輔助域名服務器也稱作權威性服務器。配置輔助域名服務器不需要生成本地區文件,因爲可以從主服務器中下載該區文件。
(3)高速緩存服務器(caching-only server):可運行域名服務器軟件,但是沒有域名數據庫軟件。它從某個遠程服務器取得每次域名服務器查詢的結果,一旦取得一個,就將它放在高速緩存中,以後查詢相同的信息時就用它予以回答。高速緩存服務器不是權威性服務器,因爲它提供的所有信息都是間接信息。對於高速緩存服務器只需要配置一個高速緩存文件,但最常見的配置還包括一個回送文件,這或許是最常見的域名服務器配置
===============================================================================
六、資源記錄:

1.資源記錄的格式:

數據庫中的每一個條目稱作一個資源記錄(Resource Record,RR)  

NAME  [TTL]  IN(關鍵字)  RRT(資源記錄類型) VALUE

2.資源記錄類型:
SOA(Start OF Authority):

起始授權記錄(第一條必須是此記錄)

格式: NAME     TTL    IN    SOA   FQDN    ADMINISTRATOR_MAILBOX (
                                serial number:序列號,十進制數字,不能超過10位,通常使用日期,例如2014031001
                                refresh time  ;刷新時間,即每隔多久到主服務器檢查一次
                                retry time    ;重試時間,應該小於refresh time
                                expire time   ;過期時間
                                nagative answer ttl; 否定答案緩存時間 )
時間單位:M(分鐘)、H(小時)、D(天)、W(周),默認爲秒
郵箱格式:[email protected] --寫--->admin.guomaoqiu.com
name:區域名稱,guomaoqiu.com. 通常可以簡寫爲"@"
value: 主DNS服務器的FQDN
如:
    guomaoqiu.com.      500    IN       SOA     ns1.guomaoiu.com.  admin.guomaoiu.com. (
                                    2014030101
                                    1H
                                    5M
                                    1W
                                    1D )

NS(Name Server):NAME-->FQDN :

名稱服務器(任何一個NS記錄都有一個A記錄與其相隨,一個區域中可以有多條)  

如:
guomaoqiu.com.       500   IN    NS   ns1.guomaoqiu.com.
  #上面的"guomaoqiu"可以簡寫爲"@"
ns1.guomaoqiu.com.   500   IN    A       172.16.0.1
name:區域名稱,通常簡寫爲"@"
value:DNS服務器的FQDN(可以使用相對名稱)

A(address):FQDN-->IPv4 :

主機記錄(只能定義在正向區域數據庫中)

如:
  www     600     IN      A           1.2.3.4
  www     600     IN      A           1.2.3.5
  www     600     IN      A           1.2.3.4
  ftp     600     IN      A           1.2.3.4
name: FQDN(可以使用相對名稱)
value: IP
#多個主機對應一種服務,可以達到負載均衡的作用

MX(Mail eXchanger):NAME-->FQDN:

郵件交換器 (只能定義在正向區域中,可以有多個)                      

如:
@     600     IN     MX   10   mail
@     600     IN     MX   20   mail2
name: 區域名稱,用於標識smtp服務器
value: 包含優先級和FQDN
#上面"600"代表優先級,取值範圍:0-99, 數字越小,級別越高;

CNAME(Canonical NAME):

Alias-->FQDN :別名記錄  

如:
ftp     IN      CNAME  www
mail    IN      CNAME  www
name: FQDN
value: FQDN
#用不同的名稱標記相同的服務

PTR(pointer):IP-->FQDN

指針記錄只能定義在反向區域數據文件中,反向區域名稱爲逆向網絡地址加.in-addr.arpa.後綴組成

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


七、區域傳送:

前面我們已經知道了DNS服務器的類型,作爲輔助DNS服務器那麼它就需要到主服務器或者其他的輔助DNS上去請求傳輸數據的過程就叫做區域傳送;它又分爲:

完全區域傳送:傳送區域中的所有數據;AXRF

增量區域傳送:傳送區域中改變的數據部分;IXFR

演示將在後面進行...

八、區域文件:

正向區域文件:

guomaoqiu.com.          IN      NS      ns.guomaoqiu.com.
ns.guomaoqiu.com.       IN      A       172.16.43.1
~                                              
可以簡寫爲:
@                IN      NS      ns
ns               IN      A       172.16.43.1

反向區域文件:

        IN      NS      ns.guomaoqiu.com.
1       IN      PTR     ns.guomaoqiu.com.


九、bind軟件的安裝以及各配置文件講解:

1.安裝:

       我們主機上面的DNS服務其實是通過一種軟件實現的,如果要想使用這個軟件那就需要先安裝並且配置它才能使用,下面介紹一下的安裝:

1)獲得bind軟件包:(配置yum源)

#配置yum,我的光盤作爲yum倉庫:
[root@larry ~]# cd /etc/yum.repos.d/   #先將該目錄下的文件都刪除或者備份.
[root@larry yum.repos.d]# vim base.repo
[base]
name=centos6.5iso
baseurl=file:///media
enabled=1
gpgcheck=0
[root@larry yum.repos.d]#

2)使用yum工具進行安裝:

[root@larry ~]# yum install bind -y
#我這裏安裝的是9.8版本的.

2.配置文件:

我們安裝完這個軟件之後會生成如下幾個目錄:

/etc/named.conf  #這是主配置文件,裏面包含有bind進程的工作屬性的定義和區域的定義;
/var/named/*     #這個目錄下是所有區域數據文件存放的地方。在該目錄下包含這樣兩個文件:
        /var/named/named.localhost
        /var/named/named.loopback  #這兩個文件是本地主機名的正反解析文件。
/etc/rc.d/init.d/named #這個是服務,我們可使用如下幾個命令來開啓、關閉服務等。
{start|stop|restart|status|reload}
bind安裝完成後,在修改配置文件及添加區域數據文件時,常使用如下兩個命令,對其進行檢查。
#named-checkconf:檢查配置文件有沒有語法錯誤
#named-checkzone:檢查區域文件有沒有語法錯誤



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

zone "ZONE NAME" IN {     #定義區域名稱,其中IN是關鍵字
   type [master|slave|hint|forward];   #指定區域類型
file "ZONE_DATA_FILENAME";    #指定區域數據文件保存地文件
 masters { MASTER_IP; };    #指明主服務器地址,該定義只在從服務器上使用
};


我們先來看一下這個文件裏面的內容:

options {    #定義全局選項,在所有區域中均有效,如果區域中對某一項有定義,則使用區域中定義的,否則使用此處定義好的;
   listen-on port 53 { 127.0.0.1; };#指定BIND偵聽的DNS查詢請求的本機IP地址和端口;
   listen-on-v6 port 53 { ::1; };#同上,但只用在IPv6版本中;
   directory       "/var/named";#指定區域配置文件所保存的路徑;
   dump-file       "/var/named/data/cache_dump.db"; #當執行rndc dumpdb命令時,DNS服務器存放數據庫文件的路徑名;
   statistics-file "/var/named/data/named_stats.txt";
   memstatistics-file "/var/named/data/named_mem_stats.txt";
   allow-query     { localhost; }; #指定接受DNS查詢請求的客戶端;
   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 {                    #指定bind服務的日誌參數;
   channel default_debug {   #日誌通道,用於指定日誌發送目標,default_debug是通道名稱;
         file "data/named.run"; #記錄的日誌保存到指定路徑下的的文件中;
         severity dynamic; #指定日誌的級別;
        };
};
zone "." IN {  #指定區域配置參數
        type hint;  #根
        file "named.ca"; #指定保存數據文件的路徑,這裏是相對路徑,即相對上邊的/var/named
};
include "/etc/named.rfc1912.zones"; #這裏使用include指令將該配置文件中其他區域定義在該文件中,
include "/etc/named.root.key";


下面我們通過實例來講解bind的配置

▲本地DNS服務器配置

加入現在我去註冊了一個域名guomaoqiu.com,計劃用172.16.43.43這臺主機來負責該域的解析,下面是我的規劃:

guomaoqiu.com   ----->   網段:172.16.43.0/24

ns1    172.16.43.43    ----->  域名服務器名稱及IP

www  172.16.43.41    ----->  www服務及IP

mail   172.16.43.42     ----->  郵件服務及IP

ftp    ----->   別名爲www

1)安裝bind軟件包:

[root@gmq ~]# yum install bind

2)修改主配置文件:(將用不到的項註釋掉)

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

3)在/etc/named.rfc1912.zone中創建區域信息:

#不要修改下面這些內容我們緊接着後面添加區域信息就行了.
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 "guomaoqiu.com" IN {
        type master;
        file "guomaoqiu.com.zone"; #區域文件
};

4)我們在/var/named目錄下創建區域文件"guomaoqiu.com.zone"

$TTL 600 #宏,表示TTL值爲600,全局使用,單位默認爲秒
@       IN SOA  ns1.guomaoqiu.com. admin.guomaoqiu.com.  (
                                2014031501      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN      NS      ns1   #域名與第一行相同時可不寫,表示直接繼承上一行的區域名
        IN      MX 10   mail  #同上,mail還可以寫成mail.langdu.com.
ns1     IN      A       172.16.43.43
www     IN      A       172.16.43.41
mail    IN      A       172.16.43.42
ftp     IN      CNAME   www

5)上面的信息填寫完整並保存退出後後我們通過需要修改文件的屬性並通過工具檢查語法:

#修改該區域文件的權限爲640
[root@gmq named]# chmod 640 guomaoqiu.com.zone
#修改該區域文件的屬主屬組
[root@gmq named]# chown root:named guomaoqiu.com.zone
#指定哪個區域中的哪個配置文件
[root@gmq named]# named-checkzone "guomaoqiu.com" /var/named/guomaoqiu.com.zone
zone guomaoqiu.com/IN: loaded serial 2014031501
OK  #檢查區域文件已經ok!
[root@gmq named]#

6)啓動服務並測試:

[root@gmq named]# service named start
[root@gmq named]# ss -tunl | grep :53
udp    UNCONN     0      0           172.16.43.43:53                    *:*  
udp    UNCONN     0      0              127.0.0.1:53                    *:*  
tcp    LISTEN     0      3           172.16.43.43:53                    *:*  
tcp    LISTEN     0      3              127.0.0.1:53                    *:*
[root@gmq named]# dig -t A www.guomaoqiu.com
#通過dig命令請求解析www.guomaoqiu.com這臺主機進行測試
[root@gmq named]# dig -t A  www.guomaoqiu.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -t A www.guomaoqiu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55810
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;www.guomaoqiu.com.     IN  A
;; ANSWER SECTION:
www.guomaoqiu.com.  86400   IN  A   172.16.43.41
;; AUTHORITY SECTION:
guomaoqiu.com.      86400   IN  NS  ns1.guomaoqiu.com.
;; ADDITIONAL SECTION:
ns1.guomaoqiu.com.  86400   IN  A   172.16.43.43
;; Query time: 0 msec
;; SERVER: 172.16.43.43#53(172.16.43.43)
;; WHEN: Sat Mar 15 13:19:53 2014
;; MSG SIZE  rcvd: 85
[root@gmq named]#


   但是如果我們需要如果要反向查詢一個172.16.43.0/24這個網段呢?

7)在/etc/named.rfc1912.zones中添加以下內容

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

8)在/var/named目錄下創建反向區域文件:

[root@gmq named]# vim /etc/named.rfc1912.zones  
$TTL 86400
@       IN SOA  ns1.guomaoqiu.com. admin.guomaoqiu.com.  (
                                2014031501      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN      NS      ns1.guomaoqiu.com.
43      IN      PTR     ns1.guomaoqiu.com.
41      IN      PTR     www.guomaoqiu.com.
42      IN      PTR     mail.guomaoqiu.com.
#其中@表示直接繼承區域名,也可以寫成:43.16.172.in-addr.arpa.

9)上面的信息填寫完整並保存退出後後我們通過需要修改文件的屬性並通過工具檢查語法:

#修改該區域文件的權限爲640
[root@gmq named]# chmod 640 172.16.43.zone
#修改該區域文件的屬主和屬組
[root@gmq named]# chown root:named 172.16.43.zone
#指定哪個區域中的哪個配置文件
[root@gmq named]# named-checkzone "43.16.172.in-addr.arpa" /var/named/172.16.43.zone
zone 43.16.172.in-addr.arpa/IN: loaded serial 2014031501
OK  #檢查區域文件已經ok!
[root@gmq named]#

10)重新加載服務並測試:

[root@gmq named]# service named reload
[root@gmq named]# dig -x 172.16.43.41
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -x 172.16.43.41
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60227
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;41.43.16.172.in-addr.arpa. IN  PTR
;; ANSWER SECTION:
41.43.16.172.in-addr.arpa. 86400 IN PTR www.guomaoqiu.com.
;; AUTHORITY SECTION:
43.16.172.in-addr.arpa. 86400   IN  NS  ns1.guomaqiu.com.
;; Query time: 0 msec
;; SERVER: 172.16.43.43#53(172.16.43.43)
;; WHEN: Sat Mar 15 13:39:13 2014
;; MSG SIZE  rcvd: 101
[root@gmq named]#

▲主、從DNS服務器配置

假設我們的客戶端逐漸的增多,一臺服務器已經無法承擔,所以現在就需要添加一臺作爲輔助DNS服務器以分擔主DNS服務器的壓力;我們接着用上面這個實驗場景,添加一臺DNS服務器.

輔助服務器名稱及地址:ns2    172.16.43.45  


主從:
主:bind版本可以低於從的;
向區域中添加從服務器的關鍵兩步:
在上級獲得授權
在區域數據文件中爲從服務器添加一條NS記錄和對應的A或PTR記錄;


1)輔助DNS安裝bind軟件包同主一樣(略)

2)修改/etc/named.conf,與上面的本地服務器一樣修改(略)

3)在主DNS服務器上獲得授權,在區域數據文件中爲從服務器添加一條NS記錄和對應的A或PTR記錄;

#編輯正向區域文件/var/named/guomaoqiu.com.zone
[root@ns1 ~]# /var/named/guomaoqiu.com.zone
$TTL 600
@       IN SOA  ns1.guomaoqiu.com. admin.guomaoqiu.com.  (
                                2014031501      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN      NS      ns1
        IN      NS      ns2  #從服務器名稱
        IN      MX 10   mail
ns1     IN      A       172.16.43.43
ns2     IN      A       172.16.43.45 #從DNS A記錄
www     IN      A       172.16.43.41
mail    IN      A       172.16.43.42
ftp     IN      CNAME   www
#編輯反向區域文件/var/named/172.16.43.zone
[root@ns2 ~]# vim /var/named/172.16.43.zone
$TTL 600
@       IN SOA  ns1.guomaoqiu.com. admin.guomaoqiu.com.  (
                                2014031501      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN      NS      ns1.guomaqiu.com.
        IN      NS      ns2.guomaoqiu.com.
43      IN      PTR     ns1.guomaoqiu.com.
45      IN      PTR     ns2.guomaoqiu.com. #從DNS PTR記錄
41      IN      PTR     www.guomaoqiu.com.
42      IN      PTR     mail.guomaoqiu.com.

4)在從DNS上配置

[root@ns2 ~]# vim /etc/named.rfc1912.zones
#添加如下內容:
zone "guomaoqiu.com" IN {
        type slave; #指定類型爲slave
        masters { 172.16.43.43; }; #指定主DNS的IP
        file "slaves/guomaoqiu.com.zone" #指定傳輸過來的區域文件存放位置
};
zone "43.16.172.in-addr-arpa" IN {
        type slave; #指定類型爲slave
        masters { 172.16.43.43; }; #指定主DNS的IP
        file "slaves/172.16.43.zone"; #指定傳輸過來的區域文件存放位置
};

5)重載主DNS、啓動從DNS

[root@ns1 named]# service named reload
Reloading named:                       [  OK  ]            
[root@ns1 named]#
[root@ns2 ~]# service named start
Starting named:                        [  OK  ]
[root@ns2 ~]#
#我們在從DNS服務器上查看日誌
Mar 15 14:28:03 localhost named[2138]: zone 43.16.172.in-addr.arpa/IN: Transfer started. #傳送開始
Mar 15 14:28:03 localhost named[2138]: transfer of '43.16.172.in-addr.arpa/IN' from 172.16.43.43#53: connected using 172.16.43.45#58879
Mar 15 14:28:03 localhost named[2138]: zone 43.16.172.in-addr.arpa/IN: transferred serial 2014031501
Mar 15 14:28:03 localhost named[2138]: transfer of '43.16.172.in-addr.arpa/IN' from 172.16.43.43#53: Transfer completed: 1 messages, 7 records, 227 bytes, 0.002 secs (113500 bytes/sec)
Mar 15 14:28:03 localhost named[2138]: zone 43.16.172.in-addr.arpa/IN: sending notifies (serial 2014031501)
Mar 15 14:28:03 localhost named[2138]: zone guomaoqiu.com/IN: refresh: unexpected rcode (REFUSED) from master 172.16.43.43#53 (source 0.0.0.0#0)
Mar 15 14:28:03 localhost named[2138]: zone guomaoqiu.com/IN: Transfer started.
Mar 15 14:28:03 localhost named[2138]: transfer of 'guomaoqiu.com/IN' from 172.16.43.43#53: connected using 172.16.43.45#43562
Mar 15 14:28:03 localhost named[2138]: zone guomaoqiu.com/IN: transferred serial 2014031501
Mar 15 14:28:03 localhost named[2138]: transfer of 'guomaoqiu.com/IN' from 172.16.43.43#53: Transfer completed: 1 messages, 10 records, 252 bytes, 0.001 secs (252000 bytes/sec)
Mar 15 14:28:03 localhost named[2138]: zone guomaoqiu.com/IN: sending notifies (serial 2014031501)
#再檢查一下從DNS /var/named/slaves目錄下是否同步過來了區域文件
[root@ns2 ~]# ll /var/named/slaves/
total 8
-rw-r--r-- 1 named named 431 Mar 15 14:28 172.16.43.zone
-rw-r--r-- 1 named named 459 Mar 15 14:28 guomaoqiu.com.zone
[root@ns2 ~]#
#已成功同步過來了.

 以上面的實驗來看如果我們不想讓誰隨便同步我主服務器上的區域文件那是可以控制的:

 在主DNS上面的添加控制即可:    

zone "guomaoqiu.com" IN {
        type master;
        file "guomaoqiu.com.zone"; #只允許這個IP的主機同步傳送
        allow-transfer { 172.16.43.45; };
};
zone "43.16.172.in-addr.arpa" IN {
        type master;
        file "172.16.43.zone";
        allow-transfer { 172.16.43.45; }; #只允許這個IP的主機同步傳送
};
#如果需要對整個區域(此區域及其他區域)進行控制我們可以寫到options這個全局配置中,這裏只是針對這個一個區域控制


   前面我提到了區域傳送的兩種模式:
   完全區域傳送:傳送區域的所有數據, AXFR

   增量區域傳送:傳送區域中改變的數據部分,IXFR    

   像上面新添加一臺DNS之後它上面什麼配置都沒有,但是把它當作輔助DNS你們主DNS就要爲它所有傳送區域文件了,此時我們就可以理解爲是完全區域傳送,主DNS、輔助DNS運行一段時間後我們在主DNS上面做了修改之後再次同步到輔助DNS的文件就可以理解爲增量區域傳送,因爲只是傳送了改變的部分.

   加入我們在主DNS上面又做了修改那輔助DNS又會是啥效果呢?


#在主DNS上面添加一條主機記錄
[root@ns1 named]# vim guomaoqiu.com.zone  
$TTL 600
@       IN SOA  ns1.guomaoqiu.com. admin.guomaoqiu.com.  (
                                2014031502      ; serial
 #注意這裏的序列號,自DNS建立起只要對此文件做過修改我們都要手動的去改變它                         
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN      NS      ns1
        IN      NS      ns2
        IN      MX 10   mail
ns1     IN      A       172.16.43.43
ns2     IN      A       172.16.43.45
www     IN      A       172.16.43.41
mail    IN      A       172.16.43.42
ftp     IN      CNAME   www
movie   IN      A       172.16.43.46   #添加內容
[root@ns1 named]# vim 172.16.43.zone
$TTL 600
@       IN SOA  ns1.guomaoqiu.com. admin.guomaoqiu.com.  (
                                2014031502      ; seria
 #注意這裏的序列號,自DNS建立起只要對此文件做過修改我們都要手動的去改變它
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN      NS      ns1.guomaoqiu.com.
        IN      NS      ns2.guomaoqiu.com.
43      IN      PTR     ns1.guomaoqiu.com.
45      IN      PTR     ns2.guomaoqiu.com.
41      IN      PTR     www.guomaoqiu.com.
42      IN      PTR     mail.guomaoqiu.com.
46      IN      PTR     movie.guomaoqiu.com.  #添加內容
#修改完畢後我們從新加載配置文件
[root@ns1 named]# service named reload
Reloading named:                               [  OK  ]
[root@ns1 named]#
#查看從DNS上面的日誌可以看出我們已經接到主DNS的通告並且是增量區域傳送
Mar 15 15:01:17 localhost named[2138]: zone 43.16.172.in-addr.arpa/IN: transferred serial 2014031502
Mar 15 15:01:17 localhost named[2138]: transfer of '43.16.172.in-addr.arpa/IN' from 172.16.43.43#53: Transfer completed: 1 messages, 9 records, 267 bytes, 0.001 secs (267000 bytes/sec)
Mar 15 15:01:17 localhost named[2138]: zone 43.16.172.in-addr.arpa/IN: sending notifies (serial 2014031502)
Mar 15 15:01:18 localhost named[2138]: client 172.16.43.43#55840: received notify for zone 'guomaoqiu.com'
Mar 15 15:01:18 localhost named[2138]: zone guomaoqiu.com/IN: refresh: unexpected rcode (REFUSED) from master 172.16.43.43#53 (source 0.0.0.0#0)
Mar 15 15:01:18 localhost named[2138]: zone guomaoqiu.com/IN: Transfer started.
Mar 15 15:01:18 localhost named[2138]: transfer of 'guomaoqiu.com/IN' from 172.16.43.43#53: connected using 172.16.43.45#36292
Mar 15 15:01:18 localhost named[2138]: zone guomaoqiu.com/IN: transferred serial 2014031502
Mar 15 15:01:18 localhost named[2138]: transfer of 'guomaoqiu.com/IN' from 172.16.43.43#53: Transfer completed: 1 messages, 11 records, 274 bytes, 0.003 secs (91333 bytes/sec)
Mar 15 15:01:18 localhost named[2138]: zone guomaoqiu.com/IN: sending notifies (serial 2014031502)
#在從DNS上面再次查看添加的那條主機記錄是否也一起傳送過來了
[root@ns2 slaves]# cat guomaoqiu.com.zone 172.16.43.zone
$ORIGIN .
$TTL 86400  ; 1 day
guomaoqiu.com       IN SOA  ns1.guomaoqiu.com. admin.guomaoqiu.com. (
2014031502 ; serial
86400      ; refresh (1 day)
3600       ; retry (1 hour)
604800     ; expire (1 week)
10800      ; minimum (3 hours)
)
NS  ns1.guomaoqiu.com.
NS  ns2.guomaoqiu.com.
MX  10 mail.guomaoqiu.com.
$ORIGIN guomaoqiu.com.
ftpCNAME   www
mail            A   172.16.43.42
movie           A   172.16.43.46
ns1         A   172.16.43.43
ns2         A   172.16.43.45
www         A   172.16.43.41
$ORIGIN .
$TTL 86400  ; 1 day
43.16.172.in-addr.arpa  IN SOA  ns1.guomaoqiu.com. admin.guomaoqiu.com. (
2014031502 ; serial
86400      ; refresh (1 day)
3600       ; retry (1 hour)
604800     ; expire (1 week)
10800      ; minimum (3 hours)
)
NS  ns1.guomaoqiu.com.
NS  ns2.guomaoqiu.com.
$ORIGIN 43.16.172.in-addr.arpa.
41          PTR www.guomaoqiu.com.
42          PTR mail.guomaoqiu.com.
43          PTR ns1.guomaoqiu.com.
45          PTR ns2.guomaoqiu.com.
46          PTR movie.guomaoqiu.com.
[root@ns2 slaves]#


基本命令使

dig -t RT(資源記錄類型) NAME [#IP]    #當記錄類型不同時,其後所跟的名稱也不同
dig -t NS ZONE_NAME     #通過區域名查詢
dig -x IP:根據IP查找FQDN   
    #在使用該命令時,系統會返回給我們很多信息,我們主要看ANSWER SECTION這個選項的信息,這纔是我們想要的答案,其他選項不做介紹
dig +norecurse -t A FQDN @HOST     #通過host主機不遞歸查詢該FQDN,默認情況使用遞歸查詢
dig +trace -t A FQDN @HOST         #通過host主機追蹤查詢該FQDN的查詢過程
host -t RT NAME:查詢名稱的解析結果
    如:# host -t RT www.mageedu.com     
nslookup      #交互式查詢界面,與windows下的該命令類似 
nslookup>
    server IP
    set q=RT
    set q=A      
    NAME


▲子域授權:

       假如,我們guomaoqiu.com這個域內的規模逐漸的壯大起來,成立了多個部門,而每個部門內都有多臺服務器我們使用以一臺DNS管理,那麼這臺DNS服務器壓力就會很大,由此我們就將部分權利下放給每個部門的DNS服務器,由它們來管理自己區域內的名稱解析.

這裏我創建了一子域tech.guomaoqiu.com

這個域內有它自己的主機,例如:

dns.tech.maoqiu.com   172.16.43.50   -----> 該域內的名稱服務器及IP

www.tech.maoqiu.com 172.16.43.51   -----> 該域內的www服務及IP

mail.tech.maoqiu.com 172.16.43.52   -----> 該域內的mail服務及IP

ftp   -----> 該域內的www服務別名

1)父域DNS服務器還是使用我們之前的配置(過程略)

2)配置子域

   修改主配置文件,註釋掉不用的項(略)    

#修改、添加區域文件信息
[root@ziyu ~]# vim /etc/named.rfc1912.zones
zone "tech.guomaoqiu.com" IN {
        type master;
        file "tech.guomaoqiu.com.zone";
};
zone "43.43.172.in-addr.arpa" IN {
        type master;
        file "43.43.172.tech.zone"
};
#添加區域文件
[root@ziyu named]# vim tech.guomaoqiu.com.zone
$TTL 6400
@       IN SOA  dns.tech.guomaoqiu.com. admin.tech.guomaoqiu.com.  (
                                2014031501      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN      NS      dns
        IN      MX 10   mail
dns     IN      A       172.16.43.50
www     IN      A       172.16.43.51
mail    IN      A       172.16.43.42
ftp     IN      CNAME   www

3)在父域的配置文件中添加如下項:
授權的子區域名稱
子區域的名稱服務器
子區域的名稱服務器的IP地址

#在此我們只做子域的正向授權
[root@fuyu ~]# vim /var/named/guomaoqiu.com.zone
$TTL 600
@       IN SOA  ns1.guomaoqiu.com. admin.guomaoqiu.com.  (
                                2014031503      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
         IN      NS      ns1
         IN      NS      ns2
         IN      MX 10   mail
ns1      IN      A       172.16.43.43
ns2      IN      A       172.16.43.45
www      IN      A       172.16.43.41
mail     IN      A       172.16.43.42
ftp      IN      CNAME   www
movie    IN      A       172.16.43.46
tech     IN      NS      dns.tech     #指定的子域服務名稱
dns.tech IN      A       172.16.43.50 #相對應的A記錄
#檢查語法並重新加載...

4)測試:  

[root@fuyu ~]# dig -t A www.tech.guomaoqiu.com @172.16.43.43
#解析在父域上子域中的主機結果成功.


區域轉發

 就目前的配置從子域上面直接解析是無法解析的,因爲子域不負責guomaoqiu.com這個域,它直接找的就是根,而這裏只是實驗環境,根也不可能知道,所以解析失敗。


 我們可將對於這個區域來講我們直接交給父域來解析就行了,於是我們就涉及到了區域的轉發功能,

明確定義一個區域不讓它去找根,我們明確的告訴它去找我們指定的DNS服務器。  


配置區域轉發:轉發域      

#解析某本機不負責的區域內的名稱時不轉發給根,而是轉給指定的主機;
zone "ZONE NAME" IN {
      type forward;
      forwarders { DNS_SERVER; };
      forward only|first;#only:
};

配置轉發的方式:          

#轉發非本機負責解析的所有區域:
options {
    forward only|first;
    forwarders { IP; };
};
#轉發某特定區域:
zone "特定區域" IN {
    type forward;
    forwarders { IP; }
    forward only|first;
};

允許使用轉發的前提:本機要在對方的允許的遞歸主機列表中


   緊接着上面的那個實驗,我配置轉發:

#在子域中定義
[root@ziyu named]# vim /etc/named.rfc1912.zones
zone "gumaoqiu.com" IN {
        type forward; #指定類型
        forwarders { 172.16.43.43; 172.16.43.45; }; #指定轉發的DNS的服務器我們上面實驗中的那兩臺
};

  經過我的修改,現在子域也能夠解析父域.


常用的選項:

安全控制選項:
       allow-transfer {  };
           通常都需要啓用;
       allow-query {  };
           此項通常僅用於服務器是緩存名稱服務器時,只開放查詢功能給本地客戶端;
       allow-recursion {  };
           定義遞歸白名單;
       allow-update { none; };
           定義允許動態更新區域數據文件的主機白名單


ACL: BIND支持使用訪問控制列表
       acl ACL_NAME {
           172.16.0.0/16;
           192.168.0.0/24
           127.0.0.0/8;
       };
訪問控制列表只有定義後才能使用;通常acl要定義在named.conf的最上方;

BIND有四個內置的acl:
   any: 任何主機
   none: 無一主機  

   local: 本機
   localnet: 本機的所在的網絡;



▲泛域名解析

   經常上網的人可能會遇到這樣的情況,我在輸入某個網址時,不小心輸錯了一個字符,但依然有結果返回,比如:我不小心想輸入baidu的網址,結果寫成wwww.baidu.com,但我依然可以打開百度首頁,這是爲什麼呢?這裏我們引入另一個概念,那就是泛域名解析

要實現泛域名解析,只需要在區域文件中添加一行信息即可實現泛域名解析。比如,當用戶輸入的信息錯誤時,我統統指向我的www服務器。則可在區域文件guomaoqiu.com.zone中添加如下一行信息:

[root@fuyu named]# vim guomaoqiu.com.zone
$TTL 86400
@   IN SOA  ns1.guomaoqiu.com. admin.guomaoqiu.com.  (
                2014031503  ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
    IN  NS  ns1
    IN  NS  ns2
    IN  MX 10   mail
ns1 IN  A   172.16.43.43
ns2 IN  A   172.16.43.45
www IN  A   172.16.43.41
mail    IN  A   172.16.43.42
ftp IN  CNAME   www
movie   IN  A   172.16.43.46
tech    IN  NS  dns.tech.guomaoqiu.com.
dns.tech IN     A   172.16.43.50
*.guomaoqiu.com. IN A   172.16.43.41  #添加此行內容,就可以實現泛域名解析了
[root@fuyu named]#

   修改完成之後我們檢測語法,最後測試:  

[root@fuyu named]# dig -t A aabbcc.guomaoqiu.com @172.16.43.43
#區域文件中沒有aabbcc,使用本主機查詢看能否實現泛域名解析

   通過測試執行結果,能夠實現泛域名解析.  




注:以上實驗中未涉及到rndc和壓力測試的一些應用,有興趣的請自行上網查看.


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