dns主從

一、前言

Dns全稱domain name system,當我們訪問一個網站時,在網站輸入一個網址。但是網絡是靠ip地址這個邏輯地址來標識地址的。而一個網址是如何轉換為ip地址的?下面我們將簡單講解下dns的原理。

二、dns查詢過程

在了解dns查詢過程時,我們先了解一些有關dns的專業名詞

    根域:用來管理互聯網的主目錄,全球共13臺。

    一級域:根域下的子域,如com.  cn.  org.  net. 等

    二級域:眾多一級域下的子域,如baidu.com. google.com.等

    子域:是相對與它的上級域而言,如根域下的com. org. 等

    遞歸:dns查詢的一種方式,服務器會把查詢請求逐級傳遞。

    迭代:dns查詢的一種方式,如主機A查詢一條dns資源記錄,那么如果服務器告訴主機A它在某一臺服務器上,那么將由A去找下一臺服務器,而非是

    這臺服務器本身幫它去尋找

     FQDN   :完全合格域名

    資源記錄:用于記錄解析的屬性。

     SOA :起始授權記錄,一個區域文件只有一個

     NS  :name server

     MX :郵件交換器

     A    :用于正向解析

     PTR :用于反向解析

     CNAME  :正式名稱

     Dns查詢過程,如下圖

blob.png

解說:

    1.當客戶端請求訪問www.baidu.com時,它向本地dns服務器發起請求詢問www.baidu.com的ip地址。

    2.本地dns服務器不知道www.baidu.com的ip地址,那么它將向根域詢問。

    3.根域說com.是它的子域,你可以問下com.域。

    4.本地dns于是去詢問com.域,com.域說baidu.com.是它的一個子域。

    5.于是本地dns去詢問baidu.com.域,baidu.com.說它負責解析這個域,知道www.baidu.com.的地址,于是返回ip地址給本地dns服務器

    6.本地dns服務器取得結果,返回給client。

三、案例

拓撲圖

blob.png

軟件版本:bind-9.10.3

簡要說明:master ip:192.168.19.128  , slave  ip :192.168.19.129   , subdomain ip :192.168.19.131  ,client ip :192.168.19.132

master 與slave為主從dns,master與subdomain為父域和子域關系。

3.1、在所有服務器上部署bind并啟動之

    所有的服務器中都需要安裝以下環境,這里不一一說明舉例。

    安裝環境:

[root@localhost ~]# yum groupinstall "Development tools" "Server  Platform" –y    #安裝編譯軟件所需的工具

    建立named用戶

[root@localhost bind-9.10.3]# groupadd -g 53 -r named                                #創建named用戶組
[root@localhost bind-9.10.3]# useradd -g 53 -r -u 53 -s /sbin/nologin  named    #創建named用戶,屬組named

   安裝bind

[root@localhost bind-9.10.3]# mkdir /usr/local/bind-9.10.3                                #創建bind-9.10.3的目錄
[root@localhost bind-9.10.3]# ./configure --prefix=/usr/local/bind-9.10.3 --disable-ipv6 --disable-chroot --enable-threads 
[root@localhost bind-9.10.3]# make && make install               #編譯安裝         
[root@localhost bind-9.10.3]# ln -s /usr/local/bind-9.10.3 /usr/local/bind    #為bind做一個軟鏈接,方便以后版本升級

   生成rndc.conf文件

[root@localhost etc]# /usr/local/bind/sbin/rndc-confgen -urandom > /usr/local/bind/etc/rndc.conf   #生成rndc.conf文件

   named.ca文件生成

[root@localhost etc]# dig -t NS . >/usr/local/bind/var/named.ca            #生成根的信息

    1.master配置

   named.conf文件配置

options {
directory "/usr/local/bind/var";            #設置named的工作目錄
allow-recursion { localnet; };            #允許使用遞歸查詢的客戶端
notify yes;                                 #啟用通知功能,當masterzone問修改后,通知slave

};
acl localnet {                             #定義一個localnet的acl
192.168.19.128;
192.168.19.129;
192.168.19.131;
127.0.0.1;
};
acl order {                                #定義一個order的acl
192.168.19.132;
172.16.0.0/16;
};
view  orderview {                         #創建orderview視圖
match-clients { order; };                 #允許訪問這個視圖的客戶端
zone "jack.com." IN {                     #定義一個zone文件
       type master;                  #類型
       file "jack.com.zone";         #存儲路徑,相對于directory目錄而言
       allow-update { none; };     #不允許所有客戶端更新
       allow-transfer { order; };  #允許被傳輸文件的客戶端
};
};
view localview {                            #定義一個localview視圖
match-clients { localnet; };               #允許訪問這個視圖的客戶端
zone "." IN {
type hint;                                   #設置類型
file "named.ca";
};
zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "127.0.0.zone";
allow-update { none; };
};
zone "leon.com." IN {                    #定義一個zone
type master;                                #類型是master
file "leon.com.zone";
allow-update { none; };            
allow-transfer { localnet; };            #允許acl是localnet的客戶端傳輸文件
allow-query { localnet; };               #允許哪些客戶端查詢
};
 
zone "19.168.192.in-addr.arpa" {            #定義一個反向zone
type master;
file "192.168.19.zone";
allow-update { none; };
allow-transfer { localnet; };
allow-query { localnet; };
};
};
 key "rndc-key" {                         #指定rndc的key文件和控制信息,這部分內容來源于,rndc.conf文件中的后半段
       algorithm hmac-md5;
       secret "wCtvv1ALOnb7Tv0d/o/qyw==";
 };
 controls {
       inet 127.0.0.1 port 953
            allow { 127.0.0.1; } keys { "rndc-key"; };
 };

  編輯master的zone文件

[root@localhost var]# ll            #查看需要哪些zone文件
total 28
-rw-r--r--. 1 root named  118 Sep 27 15:28 127.0.0.zone
-rw-r--r--. 1 root named  223 Sep 29 05:07 192.168.19.zone
-rw-r--r--. 1 root named  238 Sep 28 05:10 jack.com.zone
-rw-r--r--. 1 root named  330 Sep 29 05:03 leon.com.zone
-rw-r--r--. 1 root named  114 Sep 27 15:28 localhost.zone
-rw-r--r--. 1 root named  890 Sep 27 14:57 named.ca
drwxr-xr-x. 3 root root  4096 Sep 27 15:41 run
[root@localhost var]# cat *.zone    #zone文件內容如下,本處只給出結果,不給出內容
$TTL 86400
@    IN  SOA      localhost.    admin.localhost.(
2015092801           #版本號                         
3H                    #刷新間隔
15M                   #重現刷新間隔
7D                    #失效日期
1D                    #否定答案的統一緩存時長
)
IN  NS  localhost.
1     IN  PTR localhost.                #此處為127.0.0.zone內容



$TTL 86400                                     #此處為192.168.19.zone的內容
@    IN  SOA      ns1.leon.com.   admin.leon.com. (
2015092801
3H
15M
7D
1D
)
        IN  NS  ns1.leon.com.        #NS記錄
        IN  NS  ns2.leon.com.                #slave服務器的NS記錄
128  IN  PTR ns1.leon.com.          #master的PTR記錄
129  IN  PTR ns2.leon.com.                    #slave的PTR記錄
3   IN  PTR www.leon.com.
4   IN  PTR mail.leon.com.
 
 
$TTL 86400                                #此處為jack.com.zone的內容
@    IN  SOA      ns1.jack.com.    admin.jack.com. (
2015092801
3H
15M
7D
1D
)
         IN  NS  ns1.jack.com.
ns1    IN  A    192.168.19.128
www    IN  A    192.168.19.3
smtp   IN  CNAME  mail                #正式名稱,類似于別名
mail   IN  A    192.168.19.4
@    IN  MX  5   mail.jack.com.
*    IN  A    192.168.19.5


$TTL 86400                              #此處為leon.com.zone的內容              
@    IN  SOA      ns1.leon.com.   admin.leon.com. (
2015092801
3H
15M
7D
1D
)
@    IN  NS  ns1.leon.com.                #master的NS記錄
@    IN  NS  ns2.leon.com.                #slave的NS記錄
secret  IN  NS  ns3.secret.leon.com.        #子域授權NS記錄
ns3.secret IN  A    192.168.19.131         #子域授權A記錄
ns2       IN  A    192.168.19.129
ns1       IN  A    192.168.19.128
www        IN  A    192.168.19.3
smtp    IN  CNAME  mail
mail      IN  A    192.168.19.4
@       IN  MX  5   mail.leon.com.



$TTL 86400                        #此處為localhost.zone的內容
@    IN  SOA      localhost.    admin.localhost.(
2015092801
3H
15M
7D
1D
)
    IN  NS  localhost.
  IN  A    127.0.0.1

    修改zone文件的屬組

[root@localhost sbin]# chown :named /usr/local/bind/etc/named.conf
[root@localhost sbin]# chown :named named.ca localhost.zone 127.0.0.zone

修改rndc.conf的屬組

[root@localhost sbin]# chown :named /usr/local/bind/etc/rndc.con

2.部署slave

named.conf文件配置

[root@localhost etc]# cat named.conf                #查看slave的named.conf文件配置,此處不給出過程
options {
directory "/usr/local/bind/var";                        #工作目錄
};
zone "." IN {
type hint;
file "named.ca";
};
zone "localhost" IN {
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "127.0.0.zone";
};
zone "leon.com." IN {                        #定義zone文件
type slave;                                    #定義其類型為slave
masters { 192.168.19.128; };                 #指明它的master地址
file "slaves/leon.com.zone";                    #存放位置
};
zone "19.168.192.in-addr.arpa" IN {            #定義zone文件
type slave;                                      #定義其類型為slave
masters { 192.168.19.128; };
file "slaves/192.168.19.zone";
};
 
key "rndc-key" {                                #此處內容和master來源類似
       algorithm hmac-md5;
       secret "ywDZNig5qX0rHte7dIEK8Q==";
};
controls {
       inet 127.0.0.1 port 953
            allow { 127.0.0.1; } keys { "rndc-key"; };
};

編輯zone文件

[root@localhost var]# cat *.zone      #對于slave的zone文件,只需要設置localhost蒸發zone即可,對于leon.com的區域文件從master中傳輸過來
$TTL 86400                              #定義localhost的反向區域
@    IN  SOA      localhost.    admin.localhost. (
2015092801
3H
15m
7D
1D
)
        IN  NS  localhost.
129  IN  PTR localhost.
 
$TTL 86400                            #定義localhost的正向區域
@    IN  SOA      localhost.    admin.localhost. (
2015092801
3H
15m
7D
1D
)
    IN  NS  localhost.
    IN  A    192.128.19.129
admin     IN  A    192.168.19.129

創建slaves文件

[root@localhost var]# mkdir -p /usr/local/bind/var/slaves            #創建slaves文件,存儲master傳輸過來的zone文件
[root@localhost var]#chmod :named /usr/local/bind/var/slaves && chown +w  /usr/local/bind/var/slaves   #設置slaves的屬組,否則無法創建文件

  3.子域設置

  named.conf文件配置

[root@localhost etc]# cat named.conf
options {
directory "/usr/local/bind/var";

};
zone "." IN {
type hint;
file "named.ca";
};
zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "127.0.0.zone";
allow-update { none; };
};
zone "secret.leon.com." IN {
type master;
file "secret.leon.com.zone";
allow-update { none; };
};
 
zone "19.168.192.in-addr.arpa" {
type master;
file "192.168.19.zone";
allow-update { none; };
};
 
zone "leon.com." IN {                #定義leon.com的zone區域
type forward;                          #類型是轉發,即當客戶端詢問這個區域是,把請求轉發到指定的服務器上
forward only;                          #only指無論轉發服務器是否返回有結果,這個服務器依然轉發到被轉發的服務器上
forwarders { 192.168.19.128; };   #轉發到指定的服務器上
};
 key "rndc-key" {
       algorithm hmac-md5;
       secret "4qikE7ovgm5AA8rTY+fYLQ==";
 };
 
 controls {
       inet 127.0.0.1 port 953
            allow { 127.0.0.1; } keys { "rndc-key"; };
 };

zone文件配置

[root@localhost var]# cat *.zone    
$TTL 86400                            #localhost的反向區域
@    IN  SOA      localhost.    admin.localhost.(
2015092801
3H
15M
7D
1D
)
IN  NS  localhost.
1     IN  PTR localhost.


$TTL 86400                        #子域的反向區域
@    IN  SOA      ns1.secret.leon.com.      admin.secret.leon.com. (
2015092801
3H
15M
7D
1D
)
        IN  NS  ns1.secret.leon.com.
131  IN  PTR ns1.secret.leon.com.
30    IN  PTR www.secret.leon.com.
40    IN  PTR mail.secret.leon.com.
 
$TTL 86400                #localhost的正向區域
@    IN  SOA      localhost.    admin.localhost.(
2015092801
3H
15M
7D
1D
)
IN  NS  localhost.
IN  A    127.0.0.1


$TTL 86400                #子域的正向區域
@    IN  SOA      ns3.secret.leon.com.      admin.secret.leon.com. (
2015092801
3H
15M
7D
1D
)
IN  NS  ns3.secret.leon.com.
ns3  IN  A    192.168.19.131
www IN  A    192.168.19.30
mail  IN  A    192.168.19.40

檢查配置文件

[root@localhost var]# /usr/local/bind/sbin/named-checkconf            #檢測配置文件是否有語法錯誤

啟動named(先檢測子域的配置文件正確后在啟動named服務,master和slave服務器named服務后面啟動)

[root@localhost var]# /usr/local/bind/sbin/named    #使用絕對路徑啟動named服務,master和slave也一樣,這里不給出過程了

檢測配置文件是否正確

[root@localhost sbin]# /usr/local/bind/sbin/named-checkconf            #檢測配置文件是否正確,無提示則正確,否則錯誤
[root@localhost sbin]# /usr/local/bind/sbin/named-checkzone localhost /usr/local/bind/var/localhost.zone
zone localhost/IN: loaded serial 2015092801                          #檢測localhost的zone文件是否正確
OK
[root@localhost sbin]# /usr/local/bind/sbin/named-checkzone 0.0.127.in-addr-arpa /usr/local/bind/var/127.0.0.zone
zone 0.0.127.in-addr-arpa/IN: loaded serial 2015092801
OK
[root@localhost var]# /usr/local/bind/sbin/named-checkzone "leon.com." /usr/local/bind/var/leon.com.zone
zone leon.com/IN: loaded serial 2015092801      #檢測leon.com的正向zone文件是否正確,子域也一使用這種方法檢測,這里就不給出檢測過程
OK
[root@localhost var]# /usr/local/bind/sbin/named-checkzone "19.168.192.in-addr.arpa." /usr/local/bind/var/192.168.19.zone
zone 19.168.192.in-addr.arpa/IN: loaded serial 2015092801   
OK                #檢測leon.com的反向zone文件是否正確,子域也一使用這種方法檢測,這里就不給出檢測過程

查看是否監聽端口

[root@localhost var]# lsof -i:53             #通過lsof命令查看是否監聽了53端口,如果沒有則返回狀態結果為1,也可以使用netstat或ss命令
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME 
named   2821 root   21u  IPv4  24148      0t0  TCP localhost:domain (LISTEN)
named   2821 root   22u  IPv4  24150      0t0  TCP ns1.leon.com:domain (LISTEN)
named   2821 root  512u  IPv4  24147      0t0  UDP localhost:domain
named   2821 root  513u  IPv4  24147      0t0  UDP localhost:domain
named   2821 root  514u  IPv4  24149      0t0  UDP ns1.leon.com:domain
named   2821 root  515u  IPv4  24149      0t0  UDP ns1.leon.com:domain

查看日志

[root@localhost var]# tail -5 /var/log/messages   #啟動master和slave時,查看master的日志信息
Sep 29 08:00:57 localhost rsyslogd-2177: imuxsock lost 30 messages from pid 2821 due to rate-limiting
Sep 29 08:00:57 localhost named[2821]: client 192.168.19.129#41820 (leon.com): view localview: transfer of 'leon.com/IN': AXFR started (serial 2015092801)    
 #開始傳輸serial為2015092801的zone文件,類型為AXFR
Sep 29 08:00:57 localhost named[2821]: client 192.168.19.129#41820 (leon.com): view localview: transfer of 'leon.com/IN': AXFR ended                            
 #結束傳輸serial為2015092801的zone文件,類型為AXFR
Sep 29 08:00:58 localhost named[2821]: client 192.168.19.129#49398 (19.168.192.in-addr.arpa): view localview: transfer of '19.168.192.in-addr.arpa/IN': AXFR started (serial 2015092801)
Sep 29 08:00:58 localhost named[2821]: client 192.168.19.129#49398 (19.168.192.in-addr.arpa): view localview: transfer of '19.168.192.in-addr.arpa/IN': AXFR ended

測試主從

[root@localhost var]# dig -t A www.leon.com. @192.168.19.129   #可以在指定解析服務器為slave來解析,能解析可證明主從同步
 
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -t A www.leon.com. @192.168.19.129
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3597
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2
             #flags類型為aa則表示權威應答    
;; QUESTION SECTION:
;www.leon.com.             IN  A
 
;; ANSWER SECTION:            #返回的解析結果
www.leon.com.        86400   IN  A    192.168.19.3
 
;; AUTHORITY SECTION:
leon.com.          86400   IN  NS  ns2.leon.com.
leon.com.          86400   IN  NS  ns1.leon.com.
 
;; ADDITIONAL SECTION:
ns1.leon.com.          86400   IN  A    192.168.19.128
ns2.leon.com.          86400   IN  A    192.168.19.129
 
;; Query time: 4 msec
;; SERVER: 192.168.19.129#53(192.168.19.129)
;; WHEN: Tue Sep 29 08:04:56 2015
;; MSG SIZE  rcvd: 114

測試子域,授權及轉發

[root@localhost var]# dig -t A www.leon.com. @192.168.19.131  #可以指定子域服務器解析父域負責解析的資源,
 
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -t A www.leon.com. @192.168.19.131
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4294
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
  #可以看到flags無aa這個類型,則表示非權威應答,因為它不負責解析這個記錄,只是把請求轉發了出去,父域返回這條記錄,然后子域在返回該客戶端
;; QUESTION SECTION:
;www.leon.com.                    IN  A
 
;; ANSWER SECTION:
www.leon.com.              86400  IN  A     192.168.19.3
 
;; Query time: 14 msec
;; SERVER: 192.168.19.131#53(192.168.19.131)
;; WHEN: Tue Sep 29 08:06:26 2015
;; MSG SIZE  rcvd: 46

測試acl (在192。168.19.132機器中,指定父域解析)

[root@localhost ~]# dig -t A www.leon.com. @192.168.19.128
 
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -t A www.leon.com. @192.168.19.128
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 54867
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available
             #ANSWER為0,沒有解析這條記錄,原因是父域做了acl限制
;; QUESTION SECTION:
;www.leon.com.             IN  A
 
;; Query time: 4 msec
;; SERVER: 192.168.19.128#53(192.168.19.128)
;; WHEN: Tue Sep 29 08:09:38 2015
;; MSG SIZE  rcvd: 30

測試視圖(在192。168.19.132上指定父域解析)

[root@localhost ~]# dig -t A www.jack.com. @192.168.19.128  #在192.168.19.132上指定父域解析www.jack.com這條記錄。有返回結果,因為這個視圖上沒限制這個ip地址。
 
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -t A www.jack.com. @192.168.19.128
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45223
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but not available
 
;; QUESTION SECTION:
;www.jack.com.             IN  A
 
;; ANSWER SECTION:
www.jack.com.         86400   IN  A    192.168.19.3
 
;; AUTHORITY SECTION:
jack.com.           86400   IN  NS  ns1.jack.com.
 
;; ADDITIONAL SECTION:
ns1.jack.com.           86400   IN  A    192.168.19.128
 
;; Query time: 1 msec
;; SERVER: 192.168.19.128#53(192.168.19.128)
;; WHEN: Tue Sep 29 08:10:47 2015
;; MSG SIZE  rcvd: 80

四、總結

做此次實驗中,出現了較多錯誤,像zone文件一些忘記更改屬組,特別是zone文件內容格式很重要,盡量不要簡寫。幾臺服務器之前named啟動順序也比較重要,負責zone文件檢測時會出現錯誤,如先啟動子域,在啟動從域,最后主域。如果子域最后啟動,那么主域簡稱zone文件時會出錯。

原創文章,作者:成吉思汗,如若轉載,請注明出處:http://www.www58058.com/8513

(0)
成吉思汗成吉思汗
上一篇 2015-10-01
下一篇 2015-10-01

相關推薦

  • Linux文件之普通權限及其特殊權限

    普通權限: 當我們使用ls -l命令查看某個文件時: [root@centos7 ~]# ls -l file1.txt  -rw-r–r–. 1 root root 30286 Aug  1 19:30 file1…

    Linux干貨 2016-08-04
  • 從案例出發——命令總結之find篇

    在這篇文章中你將看到以下內容:1、find命令的格式、語法、及實際應用 2、3個時間戳的意義  3、各種文件類型的解釋  4、軟硬鏈接的區別 5、exec和xargs的區別 6、幾個邏輯判斷符的意義  7、通配符的意義  8、find 命令下時間查找的特殊定義 首先,來看看以下題目:   &nbsp…

    Linux干貨 2016-03-25
  • 程序包管理

    程序包 linux的程序包主要分為兩類;二進制可執行安裝包和源代碼程序文件包     二進制應用程序的組成部分:     二進制文件、庫文件、配置文件、幫助文件   查看二進制程序所依賴的庫文件:     ldd&nbs…

    Linux干貨 2016-05-30
  • linux基礎中的基礎 —- 用戶管理、文本處理、正則表達式等命令的使用(博客第三周作業)

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。     who | cut -d' ' -f1 | uniq 2、取出最后登錄到當前系統的用戶的相關信息。     who | tail -1 3、取出當前系統上被用戶當作其默認shell的最…

    Linux干貨 2016-07-22
  • 關于加密那點事

    作者【Jev Tse】 環境:sentos6.8     【本文預覽】      一、關于加密      二、對稱加密      三、非對稱加密      四、單向散列 …

    Linux干貨 2016-12-01
  • Python裝飾器與面向切面編程

    新年好~ 那么,很久沒有更新了,其實想想也沒多少可以寫的,因為Python的文檔似乎很全面的說……能做的差不多只有翻譯和整理了,英文過關的朋友不妨直接去doc.python.org這里查看相關資料 :) 轉載請注明原作者和原文地址,多謝! 今天來討論一下裝飾器。裝飾器是一個很著名的設計模式,經常被用于有切面需求的場景,較為經典的有插入日志、性能測試、事務處理…

    Linux干貨 2015-03-12

評論列表(1條)

  • Vicky
    Vicky 2015-10-01 22:14

    排版好的博客更吸睛哦~

欧美性久久久久