DNS服務器的正反解析及主從複製

    在最開始的計算機網絡中,人們只能通過輸入某個網頁的IP地址才能夠進行對該網站的訪問,因此記憶一個網站的完整的IP地址就成爲了一件非常頭疼的事,顯然,人們對文字的記憶遠比對數字的記憶強,爲了能夠解決這一個問題,DNS就出現了。 DNSDomian Name Server)即域名服務器,dns建立了主機名和IP地址之間的映射關係,他是一個可以幫我們將用文字組成的主機名解析爲IP的一個工具,尤其當使用IPV6之後,DNS將扮演一個更加重要的角色。那麼本節我們就來了解一下DNS服務器相關的知識。

   這裏我們只是基於局域網的配置過程,並非真實環境,真實環境的話必須去註冊域名,如果是服務器的話主從DNS服務器都要去上級註冊,不然互聯網無法識別。

   實驗環境:Centos6.5x86_64

   主DNS服務器   172.16.6.20

   從DNS服務器   172.16.106.20 

1、DNS的查詢流程

DNS的管理流程如下,每個DNS服務器都僅管理自己的下一層主機,而對於下一層的下一層,則授權給下一層的DNS服務器來管理。我們就通過訪問http://www.magedu.com來描述一下其查詢流程。

wKioL1Ph1ILQCjghAAJy6Kq1Zas213.jpg首先,當你在瀏覽器中敲入該地址時,計算機先會去查看本地配置文件/etc/resolv.sonf中定義的DNS對應的IP地址進行查詢;如果沒有定義,則去找本地的DNS緩存;如果本地緩存沒有,則去找本地DNS服務器中的配置文件;如果本地DNS服務器中的配置文件也沒有定義,則去找本地DNS服務器中的緩存中找;如果還是沒有,那麼就由DNS服務開始迭代查找:

hostS——>本地DNS緩存——>本地DNS服務器——>本地DNS服務器緩存——>迭代

下面我們就介紹一下查找的流程:http://www.magedu.com

1、向最頂級.(root)查詢

當本地DNS向根查詢時,根發現所需查詢的地址在.com.中,於是根叫該本地DNS去找.com.

2、向第二層.com.查詢

當本地DNS向.com.查詢時,.com.發現所需查詢的地址在.magedu.com.中,於是.com.叫該本地DNS去找.magedu.com.

3、向第三層.magedu.com.查詢

當本地DNS向.magedu.com.查詢時,.magedu.com.發現所需查詢的地址爲www.magedu.com.,而該主機正好在其管理的範圍之內,於是.magedu.com.把該主機對應的IP地址返回給該本地DNS。

4、記錄緩存並返回給用戶

本地DNS查詢到該地址的IP地址之後,爲了在下次有相同的請求時不再跑一趟,他就會會在本地對該地址及IP進行緩存,然後將IP返回給用戶,當然緩存是有時間限制的,一旦過期,緩存就會失效。

進過以上的步驟之後,本地主機就可以拿着IP地址直接去訪問http://www.magedu.com 了,當然本地主機也會進行緩存。這樣一個訪問流程就結束了。


2、BIND的安裝及配置

bind是使用最廣泛的一種DNS實現,這裏我們就不用源碼編碼安裝BIND了,而是直接使用yum安裝。

初始配置

#yum install bind

安裝完成之後我們可以看下生成了哪些文件

#rpm -ql bind

wKiom1Ph5MrxU16wAAGbaJH64XE632.jpg

其中/etc/named.conf 和/etc/named.rfc1912.zones都是我們的配置文件,/etc/rc.d/init.d/named是我們的服務腳本,其它的這裏就先不介紹了,當我們用到時再進行介紹。

當然試驗中的測試工具也是必不可少的。我這裏已經安裝了,沒安裝小夥伴還需要將這些工具手動安裝哦。

wKiom1Ph8WKAcOdbAAErcd-bsYk628.jpg

下面我們就開始進行配置了。

 # vim /etc/named.conf

由於這裏我們只先簡單的配置,所以我們就將其他的選項都註釋掉了。

wKioL1Ph6j2jsXIQAAHFvtaTE30383.jpg

配置好之後不要忘記檢查語法。

wKioL1Ph6uCQktG4AAA-YXEs8Ss033.jpg

這樣配置之後,一個簡單的緩存服務器就可以運行了。

wKiom1Ph6pSDuOitAAB6poRFGMM656.jpg需要注意的是,當你在啓動服務時,可能會卡住,原因是啓動過程中需要生成/etc/rndc.key文件,而在生成過程中需要一大堆的隨機數,而這些隨機數是從熵池(對熵池概念不瞭解的建議上GOOGLE搜下,這裏我就不解釋了)中取的,而卡住的原因可能正是由於熵池用完的了,這個時候你可以在XSHELL中新建一個窗口不同的敲鍵盤來生成熵池(可能會比較久),過一會你會發現就可以啓動了。

服務打開後由於其監聽在53號端口,我們可以通過下面命令查看

#ss -tunl

這時候,由於其他東西都沒配置,所以它相當於緩存服務器,不負責任何主機的DNS解析,但是它允許其他主機對他進行遞歸。

正向解析

好的下面我們就來配置主DNS服務器的正向解析。

#vim /etc/named.rfc1912.zones

加入以下一個zone

zone "magedu.com" IN {
        type master;                  定義服務器的類型,master爲主服務器
        file "magedu.com.znoe";       定義區域解析庫文件,該文件在主配置文件/etc/named.conf中
};                                      options中directory中定義的目錄下。

創建區域庫文件。

#vim /var/named/magedu.com.zone
$TTL  3600   
@       IN  SOA  ns.magedu.com.   admin.magedu.com (
                  2014080601             序列號
                  1H                     從服務器到主服務器同步的時間間隔
                  10M                    從服務重試時間間隔
                  7D                     從服務器過期時間
                  1D )                   否定答案的統一緩存時間
        IN  NS   ns         服務器            這裏的ns,mail,www,web都是簡寫,其中
        IN  mx  10  mail                      有個隱藏的變量,後面會自動加上.magedu.com.
ns      IN  A   172.16.6.20      對應的A記錄
mail    IN  A   172.16.6.21
www     IN  A   172.16.6.22
web     IN  CNAME www            主機的正式名稱,當訪問web.magedu.com.時,其實訪問的是
                                 www.magedu.com.

創建好之後對庫文件進行語法測試

[root@localhost ~]# named-checkzone  "magedu.com"   /var/named/magedu.com.zone 
zone magedu.com/IN: loaded serial 2014080601
OK
[root@localhost ~]# service named reload              重新加載庫文件
Reloading named:                                           [  OK  ]

需要注意的是爲了安全起見,我們還得對區域解析庫文件進行屬主屬組以及權限的限定;

[root@localhost named]# ll
total 32
drwxrwx--- 2 named named 4096 Aug  6 06:03 data
drwxrwx--- 2 named named 4096 Aug 27  2013 dynamic
-rw-r--r-- 1 root  root   332 Aug  6 07:26 magedu.com.zone   未修改前
-rw-r----- 1 root  named 1892 Feb 18  2008 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 4096 Aug 27  2013 slaves
[root@localhost named]# chmod 640   magedu.com.zone      
[root@localhost named]# chown :named  magedu.com.zone     改爲named組
[root@localhost named]# ll
total 32
drwxrwx--- 2 named named 4096 Aug  6 06:03 data
drwxrwx--- 2 named named 4096 Aug 27  2013 dynamic
-rw-r----- 1 root  named  332 Aug  6 07:26 magedu.com.zone    修改成功
-rw-r----- 1 root  named 1892 Feb 18  2008 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 4096 Aug 27  2013 slaves


下面我們就可以測試服務器是否正常工作了

 想要了解更多的測試命令可以參考此網站http://124894752.blog.163.com/blog/static/7134183201052352136936/

[root@localhost ~]# dig -t NS magedu.com @172.16.6.20

wKioL1PiAjvxRBuwAAHTwJHJWeU341.jpg

這樣我們的正向解析主服務器就建成功了。

反向解析

正向的解析服務器做好之後那麼反向就簡單了,步驟都差不多,我們來實現下。

[root@localhost named]# vim /etc/named.rfc1912.zones 
         添加以下zone
zone "6.16.172.in-addr.arpa" IN {       注意反向解析區域名稱的寫法:IP的反寫.in-addr.arpa
        type master;
        file "172.16.6.zone";      這裏的庫文件名都是可以自己定義的,不過一般都是IP加zone
};

創建反向解析庫文件:注意反向解析庫中沒有A記錄和MX記錄

[root@localhost named]# vim 172.16.6.zone
$TTL 3600   
@       IN  SOA  ns.magedu.com.   admin.magedu.com (    
                  2014080601                              這裏的意義跟正向解析庫中相同
                  1H
                  10M
                  7D
                  1D )
        IN  NS   ns.magedu.com.                          
20      IN  PTR  ns.magedu.com.          注意這裏反向地址的都是簡寫其實這裏有個隱藏的變量21      IN  PTR  mail.magedu.com.        後面會自動加上.6.16.172.in-addr.arpa 
22      IN  PTR           正反向解析中的變量是不一樣的

修改好之後進行語法測試以及庫文件權限修改,最終重新加載服務。

[root@localhost named]# named-checkconf 
[root@localhost named]# named-checkzone "6.16.172.in-addr.arpa" /var/named/172.16.6.zone 
zone 6.16.172.in-addr.arpa/IN: loaded serial 2014080601
OK
[root@localhost named]# chmod 640 172.16.6.zone 
[root@localhost named]# chown :named 172.16.6.zone 
[root@localhost named]# service named reload
Reloading named:                                           [  OK  ]

這樣我們的一個反向解析DNS服務器也建成功了,下面我們進行測試下。

[root@localhost named]# dig -x 172.16.6.21 @172.16.6.20

wKioL1PiDDahASlPAAIbVZWg_V4997.jpg

解析得到172.16.6.21的主機名爲mail.magedu.com.正確,服務正常運行。


3、DNS的主從複製

下面我們來講下DNS的主從複製,所謂主從複製,就是將主DNS服務器上的解析庫複製到從DNS服務器上,從DNS服務器根據庫文件就可以進行正向或者反向解析。

需要注意的是

1、主從時間同步:使用ntpdate命令

2、版本差異 :通常從服務器的版本要比主服務器的高,或者跟主的一樣,這是非常關鍵的。


正向解析從服務器

首先添加從服務器時,必須在主服務器中的解析庫中必須添加NS記錄,A記錄。

這是在主服務器中進行。172.16.6.20

[root@localhost ~]# vim /var/named/magedu.com.zone 
$TTL  3600
@       IN  SOA  ns.magedu.com.   admin.magedu.com (
                  2014080602     需要注意的是,每次文件更新,版本號必須改變,這裏從1升成2
                  1H
                  10M
                  7D
                  1D )
        IN  NS   ns
        IN  NS   ns2            添加的從服務器ns2.magedu.com.
        IN  mx  10  mail
ns      IN  A   172.16.6.20
ns2     IN  A   172.16.106.20   從服務器A記錄
mail    IN  A   172.16.6.21
www     IN  A   172.16.6.22
web     IN  CNAME www

一般我們修改好解析庫之後都要重新加載下,但這邊我們先不加載,等從服務器建好之後我們再加載。


配置從服務器:172.16.106.20

首先從服務器一開始的配置過程跟主服務器一樣,詳見bind安裝與配置中的初始配置

下面我們就開始對其進行配置

[root@localhost ~]# vim /etc/named.rfc1912.zones 
      加入一個zone
 zone "magedu.com" IN {
        type slave;                      服務器類型爲從
        file "slaves/magedu.com.zone";   注意文件是directory定義的目錄下的slaves目錄下
        masters { 172.16.6.20; };     指向的服務器,這裏我們只有2臺,所以指向主服務器地址
};

完成之後進行語法檢測,並重新加載。

[root@localhost named]#service named reload
[root@localhost named]# ls slaves/
magedu.com.zone

加載之後可以通過查看日誌確定同步是否進行。

[root@localhost ~]# tail /var/log/messages
Aug  6 09:26:35 localhost named[2138]: zone magedu.com/IN: notify from 172.16.6.20#37045: refresh in progress, refresh check queued
Aug  6 09:26:39 localhost named[2138]: zone magedu.com/IN: refresh: skipping zone transfer as master 172.16.6.20#53 (source 0.0.0.0#0) is unreachable (cached)
Aug  6 09:26:49 localhost named[2138]: zone 6.16.172.in-addr.arpa/IN: refresh: skipping zone transfer as master 172.16.6.20#53 (source 0.0.0.0#0) is unreachable (cached)
Aug  6 09:28:20 localhost named[2138]: client 172.16.6.20#34209: received notify for zone 'magedu.com'
Aug  6 09:28:20 localhost named[2138]: master 172.16.6.20#53 (source 0.0.0.0#0) deleted from unreachable cache
Aug  6 09:28:20 localhost named[2138]: zone magedu.com/IN: Transfer started.
Aug  6 09:28:20 localhost named[2138]: transfer of 'magedu.com/IN' from 172.16.6.20#53: connected using 172.16.106.20#50020
Aug  6 09:28:20 localhost named[2138]: zone magedu.com/IN: transferred serial 2014080606
Aug  6 09:28:20 localhost named[2138]: transfer of 'magedu.com/IN' from 172.16.6.20#53: Transfer completed: 1 messages, 10 records, 259 bytes, 0.001 secs (259000 bytes/sec)
Aug  6 09:28:20 localhost named[2138]: zone magedu.com/IN: sending notifies (serial 2014080606)

也可以在主服務器下查看。

這樣一個從服務就配置好了。我們可以進行測試了。

wKioL1PiHXyDty41AAII8wOBjfY684.jpg

測試成功,解析得到www.magedu.com的對應地址爲172.16.6.22。


反向解析從服務器

反向解析的步驟和正向的差不多,只是添加的東西略有不同而已,這裏我們就簡單的說下了。

同樣先在主服務器中進行。172.16.6.20

[root@localhost ~]# vim /var/named/172.16.6.zone 
$TTL 3600
@       IN  SOA  ns.magedu.com.   admin.magedu.com (
                  2014080608
                  1H
                  10M
                  7D
                  1D )
        IN  NS   ns.magedu.com.
        IN  NS   ns2.magedu.com.                 添加從服務器NS記錄
20      IN  PTR  ns.magedu.com.
20.106.16.172.in-addr.arpa. IN  PTR ns2.magedu.com.   添加從服務器PTR記錄
21      IN  PTR  mail.magedu.com.
22      IN  PTR  www.magedu.com.

這裏需要注意還是版本問題。

配置反向解析從服務器:172.16.106.20

[root@localhost ~]# vim /etc/named.rfc1912.zones 
      加入一個zone
 zone "6.16.172.in-addr.arpa" IN {
        type slave;                      服務器類型爲從
        file "slaves/172.16.6.zone";   注意文件是directory定義的目錄下的slaves目錄下
        masters { 172.16.6.20; };     指向的服務器,這裏我們只有2臺,所以指向主服務器地址
};

修改好之後進行語法測試及同步

[root@localhost named]# named-checkconf 
[root@localhost ~]# rndc reload
server reload successful

好了這樣我們的從服務器的反解就配置好了,來測試一下。

同樣先查看下日誌

[root@localhost named]# tail  -1 /var/log/messages
Aug  6 09:48:21 localhost named[2138]: zone magedu.com/IN: sending notifies (serial 2014080608)    版本號正確

wKiom1PiITrTppw9AAIXrsORnfs590.jpg

對172.16.6.21進行解析得到mail.magedu.com.


好了,本節的內容我就講到這裏,講的不好的地方希望大家多多包含,不對的地方希望大家能夠指正,謝謝!

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