DNS工作原理及主從同步


搭建環境:CentOS6.5 x86_64虛擬機2臺,做DNS主從複製。

安裝包:使用yum安裝bind-9.8.2-0.17.rc1.el6_4.6.x86_64 rpm包。

主DNS服務器IP地址:172.16.32.10。

從DNS服務器IP地址:172.16.32.11。

測試bind view功能的win7系統IP:192.168.1.132


一.DNS工作原理及域名介紹 

1.)DNS端口協議

DNS,監聽於TCP/53端口。UDP/53端口。

UDP是屬於面向非連接協議,在DNS解析上速度會提升,一般用於域名解析,UDP最大傳輸512字節,而域名最長67字節。

TCP是屬於面向連接協議,提供可靠傳輸,需要經過三次握手,一般用於區域傳送(就是主從同步),來檢驗數據輸是否可靠,不可能說別人給我傳什麼,我就接收什麼。如果使用TCP協議解析域名,需要建立三次握手,並且還會經歷迭代查詢,影響解析速度。


2.)客戶端訪問網站簡單的分析:

wKioL1Pho4GQfIuBAAC6nv4JRtE454.jpg

客戶端相要訪問www.exmple.com的網站,在地址欄中輸入域名或者主機名,而主機間的通信是基於IP地址加端口來實現的,想要訪問www.exmple.com,就需要把www.exmple.com轉換成對應的IP地址。這時候就是需要DNS來把域名或者主機名解析成IP地址。

客戶端對DNS發起請求,如上圖的數字1,相要訪問www.exmple.com,而在DNS服務器中記錄着www.exmple.com的IP地址,如圖數字2。

DNS把解析出來的IP地址返回給客戶端,如圖數字3。客戶端用IP地址去訪問www.exmple.com 。如圖數字4。www.exmple.com網站將網頁內容顯示到客戶端的顯示器上,如圖數字5。


3.)域名 “www.exmple.com.”  拆分:

‘.’:根域名服務器。

‘com’:頂級域名,或者一級域名,還有net cn org等

‘exmple’:二級域名,由公司或者個人使用。

‘www’:主機名 ,主機名還有mall.ftp等都是主機名。

wKioL1PhpBSjo_MdAAGuZWVI1Ws651.jpg


4.)遞歸,迭代:

看看DNS是怎麼查找163.com的

首先客戶端想要去訪問163.com,在地址欄輸入www.163.com,對本地DNS服務器說,無論如何,要把163網站的IP給我返回正確結果。這種通常叫做遞歸查詢。

而本地DNS服務器不知道163.com的IP地址,就會去找13臺根服務器,根服務器不會直接給你返回IP地址,而是說,我知道.com歸誰負責,而後把.com的授權域全部列出來。DNS找到負責.com的DNS服務器,在.com頂級域名下列出一串負責163.com的DNS服務器,最後找到負責163.com服務器返回IP地址。這種通常叫做迭代查詢。


wKioL1PhpHuBpgJQAAKEsTnDJ_E674.jpg

wKiom1Pho2TTr5GnAAO6RlZeQn8239.jpg


5.)DNS服務器分類:

master:主DNS服務器,擁有區域正反向配置文件,管理區域。          

slave:從DNS服務器,擁有主DNS服務器的區域數據,大部分的時間在同步數據,如果主DNS服務器出故障,就會暫時頂替主DNS進行域名解析。

forward:將查詢請求發往其他的DNS服務器。

cache:緩存服務器,將客戶端上一次的解析緩存到服務器,過一段時間刷新一下。

 hint:根DNS服務器


二.安裝DNS

 1.)使用yum安裝bind

# yum install -y bind
#vim /etc/named.rfc1912.zones
options {
       //listen-on port 53 { 127.0.0.1; };
       //listen-on-v6 port 53 { ::1; };
       directory      "/var/named";  #正向反向解析文件存放目錄,前面加反斜線的代表註釋
};


2.)修改/etc/named.rfc1912.zones,定義正反解析區域

# vim /etc/named.rfc1912.zones 
zone"zhang.com" IN { #指定配置區域參數
        type master;  #類型,主/從
        file "zhang.com.zone"; #.zone區域存放路徑
};
zone"32.16.172.in-addr.arpa" IN { #反向解析
        type master;
        file"32.16.172.in-addr.arpa";
};


創建正向解析文件

區域解析庫:
   資源記錄rr
   SOA:起始授權記錄,一個區域文件只能有一個。
   NS:授權區域(授權哪個DNS服務器)。
   MX:郵件交換器,MX記錄有優先級屬性0-99,數字越小越高。
   A:將FQDN轉換成IP地址。
   PTR:IP轉換成FQDN。
   AAAA:FQDN -- IPV6。
   CNAME:正式名稱。
 
#touch zhang.com.zone
#chown :named zhang.com.zone
#chmod 640 zhang.com.zone
-rw-r-----1 root  named    0 Aug 4 03:28 zhang.com.zone
 
#vim zhang.com.zone
$TTL600
@       IN     SOA     ns1.zhang.com.  admin.zhang.com. (
                        2014080401 #解析庫的版本號
                        2H         #週期性同步時間間隔
                        10M        #重試時間間隔
                        7D         #過期時長
                        1D         #否定答案的統一緩存時長
)
        IN     NS      ns1.zhang.com.
        IN     MX      10(優先級,越小越大)      mail.zhang.com.
ns1     IN     A       172.16.32.10 #正向解析
www     IN     A       172.16.32.10
mail    IN     A       172.16.32.11
pop     IN     A       172.16.32.12
icmp    IN     CNAME   www

   

創建反向解析文件

#cp -p zhang.com.zone 32.16.172.in-addr.arpa
#vim 32.16.172.in-addr.arpa
$TTL600
@       IN     SOA     ns1.zhang.com.  admin.zhang.com. (
                        2014080401
                        2H
                        10M
                        7D
                        1D
)
        IN     NS      ns1.zhang.com.
        IN     MX      10      mail.zhang.com.
10      IN     PTR     na1.zhang.com.
10      IN     PTR     www.zhang.com.
11      IN     PTR     mail.zhang.com.
12      IN     PTR     pop.zhang.com


3.)設置開機啓動

#chkconfig named on
#chkconfig named --list
named             0:off  1:off  2:on   3:on   4:on   5:on   6:off
#這時候可以測試正反向解析了


4.)DNS主從備份:

時間同步,在主服務器上也需要像時間服務器同步。

#ntpdate 172.16.0.1
#crontab-e
*/3* * * *  /usr/sbin/ntpdate 172.16.0.1&>/dev/null


5.)需要添加從DNS的授權以及正向解析

#vim zhang.com.zone
$TTL600
@       IN     SOA     ns1.zhang.com.  admin.zhang.com. (
                        2014080406 #修改版本號
)
        IN     NS      ns1
        IN     NS      ns2 #授權從服務器
 
ns1     IN     A       172.16.32.10
ns2     IN     A       172.16.32.11 #添加正向解析


6.)從DNS配置

#vim /etc/named.conf
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";
……
}


開始的時候我想以自己的方式去命名,但是主從不能同步

#vim /etc/named.rfc1912.zones 
zone"zhang.com.zone" IN {
        type slave;
        file "slaves/zhang.com.zone";
        masters { 172.16.32.10; };
};
#rndc reload
Warning:'empty-zones-enable/disable-empty-zone' not set: disabling RFC 1918 empty zones#log會報這總錯誤

正確配置:
zone"zhang.com" IN {
        type slave;
        file "slaves/zhang.com.zone";
        masters { 172.16.32.10; };
};
#ls
zhang.com.zone


7.)使用dig命令進行解析下

#dig -t A www.zhang.com @172.16.32.11
……
;;flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2
 
;;QUESTION SECTION:
;www.zhang.com.          IN  A
 
;;ANSWER SECTION:
www.zhang.com.       600 IN  A   172.16.32.10
 
;;AUTHORITY SECTION:
zhang.com.    600 IN  NS  ns2.zhang.com.
zhang.com.    600 IN  NS  ns1.zhang.com.
 
;;ADDITIONAL SECTION:
ns1.zhang.com.       600 IN  A   172.16.32.10
ns2.zhang.com.       600 IN  A   172.16.32.11
……


8.)正向解析沒有問題了,開始同步反向解析

#vim /etc/named.rfc1912.zones
zone"32.16.172.in-addr.arpa" IN {
        type slave;
        file"slaves/32.16.172.in-addr.arpa";
        masters { 172.16.32.10; };
};
#rndc reload
#ls
32.16.172.in-addr.arpa  zhang.com.zone


開始測試反向解析

# nslookup 
> 172.16.32.11
Server:       127.0.0.1
Address:   127.0.0.1#53
 
11.32.16.172.in-addr.arpa   name = mail.zhang.com.
> 172.16.32.10
Server:       127.0.0.1
Address:   127.0.0.1#53
 
10.32.16.172.in-addr.arpa   name = www.zhang.com.
10.32.16.172.in-addr.arpa   name = ns1.zhang.com.
 
也已經OK了,開始在主DNS添加一個地址,看看從服務器是否能夠解析


9.)在主DNS zhang.com.zone添加一條,記得修改版本號,然後從服務器測試

2014080407
text   IN      A       192.168.132.10
重新加載配置文件
# rndc reload
server reload successful
 
從DNS服務器開始測試,之前沒有把從服務器的DNS添加到/etc/resolv.conf,使用nslookup解析的時候就是server :127.0.0.1,而不是DNS地址。修改後就可以了
#nslookup 
>text.zhang.com
Server:       172.16.32.11
Address:   172.16.32.11#53
 
Name:  text.zhang.com
Address:192.168.132.10


10.)主從同步區域控制

主服務器僅允許從服務器同步

#vim /etc/named.rfc1912.zones
zone"zhang.com" IN {
        type master;
        file "zhang.com.zone";
        allow-transfer { 172.16.32.11; }; #僅允許從服務器的IP地址同步區域
};
 
#rndc reload
serverreload successful


再次測試,看配置是否生效

已經獲取不到任何信息,這一步在添加記錄之前測試過,是可以看到本地有多少服務器和IP的,這裏爲了節約空間,就沒把之前測試的貼出來

#dig -t AXFR zhang.com @172.16.32.10
 
;<<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -tAXFR zhang.com @172.16.32.10
;;global options: +cmd
;Transfer failed.


同樣的命令,換成從DNS服務器來試試

#dig -t AXFR zhang.com @172.16.32.10
 
;<<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -tAXFR zhang.com @172.16.32.10
;;global options: +cmd
zhang.com.    600 IN  SOA ns1.zhang.com.admin.zhang.com. 2014080407 7200 600 604800 86400
zhang.com.    600 IN  NS  ns1.zhang.com.
zhang.com.    600 IN  NS  ns2.zhang.com.
zhang.com.    600 IN  MX  10mail.zhang.com.
icmp.zhang.com.      600 IN  CNAME  www.zhang.com.
mail.zhang.com.      600 IN  A   172.16.32.11
ns1.zhang.com.       600 IN  A   172.16.32.10
ns2.zhang.com.       600 IN  A   172.16.32.11
pop.zhang.com.       600 IN  A   172.16.32.12
text.zhang.com.      600 IN  A   192.168.132.10
www.zhang.com.       600 IN  A   172.16.32.10
zhang.com.    600 IN  SOA ns1.zhang.com.admin.zhang.com. 2014080407 7200 600 604800 86400
;;Query time: 3 msec
;;SERVER: 172.16.32.10#53(172.16.32.10)
;;WHEN: Tue Aug  5 19:44:28 2014
;;XFR size: 12 records (messages 1, bytes 290)
效果出來了。


11.)區域同步分幾個級別的:

none:所有機器都不允許同步

any:任何機器都允許同步

localhost:僅本機允許同步

all-transfer{ ip; };:指定ip地址可以同步


12.)rndc命令

reload:重新加載

flush:刷新緩存

status:查看狀態


13.)bind view

根據不同客戶端,返回不同的IP地址。

編輯主配置文件

# vim /etc/named.rfc1912.zones
view unicom {
       match-clients { 172.16.249.0/16; };
……#其他默認的我這邊就不貼上來了
//zone "zhang.com" IN {
//      typemaster;
//      file"zhang.com.zone";
//};
zone "32.16.172.in-addr.arpa" IN {
        typemaster;
        file"32.16.172.in-addr.arpa";
};
zone "zhang.com" IN {
        typemaster;
        file"zhang.com.uni";
};
};

view telecom {
       match-clients { 192.168.1.0/24; };
zone "zhang.com" IN {
        typemaster;
        file"zhang.com.telecom";
};
};


14.)新touch兩個區域文件,注意權限

zhang.com.telecom

zhang.com.uni

#vimzhang.com.uni #主要是爲了實現智能DNS,要的是結果,這個區域文件我是直接複製原來zhang.com.zone的,就不貼命令了。

#vim zhang.com.telecom
$TTL600
@  IN SOA   ns1.zhang.com.   admin.zhang.com. (
        2014080407
        2H
        10M
        7D
        1D 
)
   IN NS ns1
   IN MX 10 mail.zhang.com.
ns1   IN A  172.16.32.10
www   IN A  192.168.32.10
mail  IN A  192.168.32.11
pop   IN A  192.168.32.12


15.)配置完成後檢查配置文件是否正確

#named-checkconf 
#named-checkzone "zhang.com" /var/named/zhang.com.telecom 
zonezhang.com/IN: loaded serial 2014080407
OK
#named-checkzone "zhang.com" /var/named/zhang.com.uni 
zonezhang.com/IN: loaded serial 2014080407
OK
#rndc reload
serverreload successful

wKiom1Ph6zjQnOSrAAFClAmmLRI505.jpg

wKiom1Ph62Hh2i-bAAFBowaPh_g053.jpg


目的達到了


總結:

DNS服務器的進程是named,而用戶和組也是named,爲了安全起見。而這時候也需要修改/var/named下的文件權限,例如touch zhang.com.zone的時候權限爲644,這個權限過於大了,修改權限爲640,但是named用戶屬主,屬組都不屬於root,就需要修改zhang.com.zone的屬組爲named。不然解析的時候會出錯,因爲named用戶無法讀取配置文件。





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