今天配虛擬機想配置一下域名使用,然後就要配置DNS,很詳細瞭解了一下

轉載註明出處:http://blog.csdn.net/limanjihe/article/details/52208262

1、DNS 概述

1.1、DNS的出現及演化

    網絡出現的早期是使用IP地址通訊的,那時就幾臺主機通訊。但是隨着接入網絡主機的增多,這種數字標識的地址非常不便於記憶,UNIX上就出現了建立一個叫做hosts的文件(Linux和Windows也繼承保留了這個文件)。這個文件中記錄着主機名稱和IP地址的對應表。這樣只要輸入主機名稱,系統就會去加載hosts文件並查找對應關係,找到對應的IP,就可以訪問這個IP的主機了。

    但是後來主機太多了,無法保證所有人都能拿到統一的最新的hosts文件,就出現了在文件服務器上集中存放hosts文件,以供下載使用。互聯網規模進一步擴大,這種方式也不堪重負,而且把所有地址解析記錄形成的文件都同步到所有的客戶機似乎也不是一個好辦法。這時DNS系統出現了,隨着解析規模的繼續擴大,DNS系統也在不斷的演化,直到現今的多層架構體系。

1.2、DNS是什麼

    DNS(Domain Name System),即域名系統。它使用層次結構的命名系統,將域名和IP地址相互映射,形成一個分佈式數據庫系統。

域名層次系統

    DNS採用CS架構,服務器端工作在UDP協議端口53和TCP協議端口53上。

    FQDN(Fully Qualified Domain Name)完全限定域名,它是使用DNS的樹狀層級結構的完全路徑域名來表示一個準確位置對應的主機。

    提供正向解析(FQDN-->IP)和反向解析(IP-->FQDN)的功能。

    目前DNS已經成爲了互聯網通訊的基礎服務。

1.3、互聯網DNS訪問模型

    DNS服務器採用分佈式數據結構保存着海量的名稱,那麼用戶如何快速的在互聯網上訪問哪臺服務器或者哪些服務器就能找到待解析的數據呢?

域名訪問_副本

客戶機發起對www.kernel.org的解析請求

(1)客戶機首先查看查找本地hosts文件,如果有則返回,否則進行下一步

(2)客戶機查看本地緩存,是否存在本條目的緩存,如果有則直接返回,不再向外發出請求,否則進行下一步,轉發。

(3)將請求轉發本地DNS服務器。

(4)查看域名是否本地解析,是則本地解析返回,否則進行下一步。

(5)本地DNS服務器首先在緩存中查找,有則返回,無則進行下一步。

(6)向全球某一個根域服務器發起DNS請求,根域返回org域的地址列表。

(7)使用某一個org域的IP地址,發起DNS請求,org域返回kernel域服務器地址列表。

(8)使用某一個kernel域IP地址,發起DNS請求,kernel域返回www.kernel.org主機的IP地址,本地DNS服務收到後,返回給客戶機。

以上客戶機和本地DNS服務器直接的查詢方式,稱爲遞歸查詢。

本地DNS服務器多次重複查詢的方式,稱爲迭代查詢。

 

1.4、DNS的分類:

主DNS服務器:就是一臺存儲着原始資料的DNS服務器。

從DNS服務器:使用自動更新方式從主DNS服務器同步數據的DNS服務器。也成輔助DNS服務器。

緩存服務器:不負責本地解析,採用遞歸方式轉發客戶機查詢請求,並返回結果給客戶機的DNS服務器。同時緩存查詢回來的結果,也叫遞歸服務器。

轉發器:這臺DNS發現非本機負責的查詢請求時,不再向根域發起請求,而是直接轉發給指定的一臺或者多臺服務器。自身並不緩存查詢結果。

1.5、一些術語和概念

權威DNS服務器:它是負責對某區域能夠進行解析,並在父區域中存儲着NS記錄的主或者從服務器。

權威應答AA(Authoritative Answer):權威服務器給出的最終答案是就是權威答案,並用協議中的某個標誌位表示。

授權:就是上一級將它的子域的管理授權給某一個特定的組織和機構,子域的記錄信息就直接由該組織或機構管理的權威服務器進行存儲和解析。在上一級中需要保留指向子域的記錄,這種記錄就稱爲膠水記錄(Glue Record)。

 

1.6、RR(Resource Record)資源記錄

DNS層級結構中,不管是節點還是葉子節點都是資源,對這些資源中的某一個的標識使用一定格式的多字段的一條記錄來表示,這條記錄就是資源記錄RR。RR的標準記錄在RFC 1034中。

1.6.1、RR的組成:

owner name 所屬名稱
type RR的類型
TTL 緩存RR的秒數(time-to-live)
class 表示一個協議或者一族協議,常用IN表示Internet
RDATA 記錄數據

1.6.2、RR中IN類(class)常見類型(type)

SOA 區域授權起始記錄,區域文件第一條記錄,而且一個區域文件只能有一條
NS 域的授權名稱服務器
MX 域的郵件交換器,要跟着一個優先級值,越小越高
A IPV4主機地址
AAAA IPV6主機地址
PTR 解析IP的指針
CNAME 權威(正式)名稱,定義別名記錄

1.6.3、常用指令

1、$TTL

TTL 可以在SOA之前使用該指令,給出TTL秒數的32位整數值。

2、$ORIGIN

設定域名,它必須出現在任何一行省略書寫的RR記錄前。當一個區域文件第一次被讀取時,隱含這個命令的值爲<zone_name>.(必須是跟着一個半角句號),如果不設置它,就必須在區域文件中書寫FQDN。

例如

$ORIGIN kernel.org.

www     CNAME    web-server

就等同於

www.kernel.org.    CNAME    web-server.kernel.org.

3、@符號

@符號等價於$ORIGIN。

 

1.6.4、SOA的RDATA格式

MNAME 授權主機FQDN或者當前區域的名稱
RNAME 郵箱地址,@用.替代
SERIAL 區域傳送使用的版本號,格式爲yyyymmddnn
REFRESH 從服務器去同步主服務器時間間隔
RETRY 刷新失敗重試時間間隔
EXPIRE 從服務器過期時長
MINIMUM 否定答案過期時長

百度的SOA

a.shifen.com.        579    IN    SOA    dns.baidu.com. sa.baidu.com.  (     
                      1408010001 ; serial number     
                      5 ; refresh 5s     
                      5 ; retry 5s     
                      86400 ; expire 1d     
                      3600 ;min TTL 1h     
)

1.6.5、NS的RDATA格式

NSDName:DNS的FQDN

baidu.com.        64899    IN    NS    ns2.baidu.com.     
baidu.com.        64899    IN    NS    ns4.baidu.com.     
baidu.com.        64899    IN    NS    dns.baidu.com.     
baidu.com.        64899    IN    NS    ns7.baidu.com.     
baidu.com.        64899    IN    NS    ns3.baidu.com.

1.6.6、MX的RDATA格式

PREFERENCE:優先級,越小越高

EXCHANGE:郵件服務器FQDN

baidu.com.        7200    IN    MX    20 jpmx.baidu.com.     
baidu.com.        7200    IN    MX    20 mx50.baidu.com.     
baidu.com.        7200    IN    MX    10 mx.n.shifen.com.     
baidu.com.        7200    IN    MX    20 mx1.baidu.com.

1.6.7、CNAME的RDATA格式

CNAME:權威名稱,FQDN

www.baidu.com.        1154    IN    CNAME    www.a.shifen.com.

www.a.shifen.com是正式名稱,而www.baidu.com是別名

1.6.8、A的RDATA格式

ADDRESS:IP V4地址

www.baidu.com.        1154    IN    CNAME    www.a.shifen.com.     
www.a.shifen.com.    36    IN    A    111.13.100.92     
www.a.shifen.com.    36    IN    A    111.13.100.91

1.6.9、PTR的RDATA格式

7.100.in-addr.arpa.    IN     PTR    www.example.com.

 


2、BIND實現DNS服務

2.1、BIND是什麼

1984年,加州大學伯克利分校的幾個學生完成了Unix名稱服務的實現,起名叫做Berkeley Internet Name Domain(BIND)。目前,它是互聯網上使用最爲廣泛的DNS服務軟件。

bind的發行版一般包含三個部分:域名服務器、域名解析器庫、軟件測試工具。


2.2、DNS實驗

下面就安裝bind來完成整個DNS的實驗

2.2.1、前提:時間同步

在生產環境中,所有的服務器需要使用同一的時鐘,一般會指向同一個時間源。時間源採用某種方式取得可靠準確的時間。

客戶機可以使用ntp服務或者在crontab中配置ntpdate完成來完成時間同步。

2.2.2、環境準備

本文介紹了2種安裝方式,源代碼編譯安裝需要依賴衆多開發庫,請使用yum安裝。將CentOS光盤掛載到/media/cdrom,配置本地yum源備用。配置yun請參看博主博文 《Linux的程序安裝和包管理》,此類博文很多,這裏不再贅述。使用下面的語句安裝開發環境。

兩臺服務器分別安裝了CentOS 6.5,地址分別爲192.168.60.133(源碼安裝)、192.168.60.134、192.168.60.171。

# yum groupinstall "Development tools" "Server Platform Development"


2.2.3、安裝BIND

2.2.3.1、rpm安裝bind(192.168.60.171和192.168.60.134)

默認bind的庫和工具已經安裝,但是服務器軟件沒有安裝,可以使用yum -y install bind 。

安裝成功生成一下目錄和文件:

服務腳本:/etc/rc.d/init.d/named

主配置文件:/etc/named.conf

區域解析庫文件:/etc/named.rfc1912.zones

服務根目錄:/var/named/

從服務器使用的區域解析庫目錄:/var/named/slaves,權限特殊

服務腳本使用的文件:

pid目錄:/var/run/named/,在其下創建named.pid文件,使用時創建符號鏈接到其父目錄中,即/var/run/named.pid,由服務腳本產生。

鎖文件:/var/lock/subsys/named,由服務腳本產生。

以上這些目錄和文件,是rpm安裝的時候創建的,而且對這些文件和目錄的權限做了很好的限定。對於配置文件的配置,下面將逐一實例介紹,部分解釋在上面。

 

2.2.3.2、源代碼安裝(192.168.60.133上)

下載bind的源碼,官網下載地址http://www.isc.org/downloads/bind/,本次使用版本爲bin-9.10.0-P2.tar.gz。


(1)安裝

configure的一些變量

    --prefix :默認在/usr/local

    --sysconfdir:默認在--prefix指定的目錄下,如果--prefix爲空,就爲/etc

    --localstatedir:默認在--prefix指定的目錄下,如果--prefix爲空,就爲/var

    --enable-threads:啓用多線程

    --disable-chroot:不支持chroot

1
2
3
# ./configure --prefix=/usr/local/named9.10 --sysconfdir=/etc/named9.10 --enable-threads --disable-chroot
# make && make install
# ln -s /etc/named9.10/ /etc/named

安裝完成  


(2)配置

編輯主配置文件/etc/named/named.conf

1
2
3
4
5
6
7
8
9
options {
    directory     "/var/named";
    recursion yes;     
}
zone "." IN {   
    type hint;
    file "named.ca";
}
include "/etc/named/named.rfc1912.zones";


生成/etc/named/named.rfc1912.zones文件,內容如下:

注意,此配置文件中,file中定義的是路徑都是相對於上文中directory的路徑 /var/named 的。   

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
zone "." IN {
    type hint;
    file "named.ca";
};
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; };
};


建立運行根目錄/var/named,準備基本的Zone文件,根、localhost正反向解析

1
2
3
# mkdir /var/named    
# cd /var/named/     
# touch named.ca named.localhost named.loopback named.empty


在/var/named目錄中準備好這4個文件     
named.ca,可以使用dig -t NS . @a.root-servers.NET > named.ca 生成。但是要注意的是,dig命令是安裝了bind之後纔有的,而且某些情況下,查詢根的NS記錄的命令返回結果可能沒有A記錄和AAAA記錄,有可能被攔截。 named.ca內容如下:  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
; <<>> DiG 9.5.0b2 <<>> +bufsize=1200 +norec NS . @a.root-servers.net
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34420
;; flags: qr aa; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 20
 
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;.              IN  NS
 
;; ANSWER SECTION:
.           518400  IN  NS  M.ROOT-SERVERS.NET.
.           518400  IN  NS  A.ROOT-SERVERS.NET.
.           518400  IN  NS  B.ROOT-SERVERS.NET.
.           518400  IN  NS  C.ROOT-SERVERS.NET.
.           518400  IN  NS  D.ROOT-SERVERS.NET.
.           518400  IN  NS  E.ROOT-SERVERS.NET.
.           518400  IN  NS  F.ROOT-SERVERS.NET.
.           518400  IN  NS  G.ROOT-SERVERS.NET.
.           518400  IN  NS  H.ROOT-SERVERS.NET.
.           518400  IN  NS  I.ROOT-SERVERS.NET.
.           518400  IN  NS  J.ROOT-SERVERS.NET.
.           518400  IN  NS  K.ROOT-SERVERS.NET.
.           518400  IN  NS  L.ROOT-SERVERS.NET.
 
;; ADDITIONAL SECTION:
A.ROOT-SERVERS.NET. 3600000 IN  A   198.41.0.4
A.ROOT-SERVERS.NET. 3600000 IN  AAAA    2001:503:ba3e::2:30
B.ROOT-SERVERS.NET. 3600000 IN  A   192.228.79.201
C.ROOT-SERVERS.NET. 3600000 IN  A   192.33.4.12
D.ROOT-SERVERS.NET. 3600000 IN  A   128.8.10.90
E.ROOT-SERVERS.NET. 3600000 IN  A   192.203.230.10
F.ROOT-SERVERS.NET. 3600000 IN  A   192.5.5.241
F.ROOT-SERVERS.NET. 3600000 IN  AAAA    2001:500:2f::f
G.ROOT-SERVERS.NET. 3600000 IN  A   192.112.36.4
H.ROOT-SERVERS.NET. 3600000 IN  A   128.63.2.53
H.ROOT-SERVERS.NET. 3600000 IN  AAAA    2001:500:1::803f:235
I.ROOT-SERVERS.NET. 3600000 IN  A   192.36.148.17
J.ROOT-SERVERS.NET. 3600000 IN  A   192.58.128.30
J.ROOT-SERVERS.NET. 3600000 IN  AAAA    2001:503:c27::2:30
K.ROOT-SERVERS.NET. 3600000 IN  A   193.0.14.129
K.ROOT-SERVERS.NET. 3600000 IN  AAAA    2001:7fd::1
L.ROOT-SERVERS.NET. 3600000 IN  A   199.7.83.42
M.ROOT-SERVERS.NET. 3600000 IN  A   202.12.27.33
M.ROOT-SERVERS.NET. 3600000 IN  AAAA    2001:dc3::35
 
;; Query time: 147 msec
;; SERVER: 198.41.0.4#53(198.41.0.4)
;; WHEN: Mon Feb 18 13:29:18 2008
;; MSG SIZE  rcvd: 615


named.localhost 內容如下: 

1
2
3
4
5
6
7
8
9
10
$TTL 1D     
@    IN SOA    @ rname.invalid. (
                         0    ; serial                         
                         1D    ; refresh                         
                         1H    ; retry                         
                         1W    ; expire                         
                         3H )    ; minimum
         NS    @         
         A    127.0.0.1         
         AAAA    ::1


named.loopback 內容如下:  

1
2
3
4
5
6
7
8
9
10
$TTL 1D     
@    IN SOA    @ rname.invalid. (
                         0    ; serial
                         1D    ; refresh
                         1H    ; retry
                         1W    ; expire
                         3H )    ; minimum
     NS    @
     A    127.0.0.1         
     AAAA    ::1         PTR    localhost.

    
named.empty 內容如下:   

1
2
3
4
5
6
7
8
9
10
$TTL 3H     
@    IN SOA    @ rname.invalid. (
                         0    ; serial                         
                         1D    ; refresh                         
                         1H    ; retry                         
                         1W    ; expire                         
                         3H )    ; minimum         
        NS    @         
        A    127.0.0.1         
        AAAA    ::1


檢查配置文件   

1
2
3
4
5
6
7
8
9
10
11
12
# named-checkconf      
# named-checkzone "localhost" named.localhost
zone localhost/IN: loaded serial 0     
OK     
# named-checkzone "localhost.localdomain" named.localhost
zone localhost.localdomain/IN: loaded serial 0     
OK
# named-checkzone "1.0.0.127.in-addr.arpa" named.loopback      zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0     
OK     
# named-checkzone "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" named.loopback      
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: loaded serial 0     
OK


可以開始測試運行named了,由於是編譯安裝,並沒有提供服務腳本,不能使用service啓動named。


(3)工作環境配置

    1)導出環境變量   
在/etc/profile.d下創建文件named9.10.sh    

1
2
PATH=/usr/local/named9.10/bin:/usr/local/named9.10/sbin:$PATH     
export PATH

重啓會話連接,echo $PATH,返回如下:  

1
/usr/lib64/qt-3.3/bin:/usr/local/named9.10/bin:/usr/local/named9.10/sbin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

這樣就把bind提供的衆多命令加入到了搜索路徑中了,方便使用     

    2)幫助文件導出

編輯/etc/man.config,添加下面的語句。     

1
MANPATH /usr/local/named9.10/share/man

    3)增加系統用戶和組     

1
2
# groupadd -g 53 -r named     
# useradd -M -g named -r -u 53 named


(4)第一次啓動

使用-g選項,讓服務運行於前臺,便於查錯  

1
# named -g -u named

發現幾個問題  

1
2
3
4
5
6
7
09-Aug-2014 03:29:52.385 couldn't mkdir '/usr/local/named9.10/var/run/named': Permission denied    
09-Aug-2014 03:29:52.385 generating session key for dynamic DNS    
09-Aug-2014 03:29:52.385 couldn't mkdir '/usr/local/named9.10/var/run/named': Permission denied    
09-Aug-2014 03:29:52.385 could not create /usr/local/named9.10/var/run/named/session.key    
09-Aug-2014 03:29:52.385 failed to generate session key for dynamic DNS: permission denied
09-Aug-2014 03:29:52.419 configuring command channel from '/etc/named9.10/rndc.key'   
09-Aug-2014 03:29:52.419 couldn't add command channel ::1#953: file not found

權限問題,執行下面語句

1
2
3
4
5
6
# chown -R named:named /usr/local/named9.10/var/    
# mkdir /var/named/slaves     
# chown -R :named /var/named/     
# chown named:named /var/named/slaves     
# chmod -R o-rwx /var/named/     
# chown :named /etc/named9.10/

開始測試

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# dig -t A localhost @192.168.60.133
; <<>> DiG 9.10.0-P2 <<>> -t A localhost @192.168.60.133    
;; global options: +cmd     
;; Got answer:     
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46079     
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
 
;; OPT PSEUDOSECTION:    
; EDNS: version: 0, flags:; udp: 4096   
   
;; QUESTION SECTION:     
;localhost.            IN    A
 
;; ANSWER SECTION:    
localhost.        86400    IN    A    127.0.0.1
 
;; AUTHORITY SECTION:    
localhost.        86400    IN    NS    localhost.
 
;; ADDITIONAL SECTION:    
localhost.        86400    IN    AAAA    ::1
 
;; Query time: 2 msec    
;; SERVER: 192.168.60.133#53(192.168.60.133)
;; WHEN: Sat Aug 09 04:50:22 CST 2014     
;; MSG SIZE  rcvd: 96


服務啓動成功。

以上配置好之後,基本達到了和rpm安裝同樣的狀態,可以開始試驗內容

 

3、實驗

3.1、實驗的內容

主從複製(區域傳送)、子域授權、轉發器、視圖

 

3.2、主從複製(區域傳送)

主從複製

(1)建立主DNS服務器

修改named.rfc1912.zone文件,在尾部添加

1
2
3
4
5
6
zone "example.org" IN {
    type master;
    file "example.org.zfile";
    allow-update { 127.0.0.1; };
    allow-transfer { 192.168.60.171; };
};

提供正向解析文件

在/var/named/下新建文件example.org.zfile,屬主數組爲named,權限640   

1
2
3
4
5
6
7
8
9
10
11
$TTL 1H     
@       IN SOA ns1 admin (
             2014080101 3600 600 86400 3600 )
             IN NS ns1             
             IN NS ns2             
             IN MX 10 mail
              
ns1    IN A 192.168.60.133     
ns2    IN A 192.168.60.171     
mail   IN A 192.168.60.200     
www    IN A 192.168.60.110
1
2
3
4
5
# chown named:named example.org.zfile
# chmod 640 example.org.zfile
# named-checkzone "example.org" example.org.zfile
zone example.org/IN: loaded serial 2014080101
OK

   

提供反向解析文件     

在主配置文件中,追加以下內容     

1
2
3
4
5
6
zone "60.168.192.in-addr.arpa" IN {
         type master;         
         file "60.168.192.in-addr.arpa.ptrfile";         
         allow-update { 127.0.0.1; };         
         allow-transfer { 192.168.60.171; };     
};

  

1
# cp -p example.org.zfile 60.168.192.in-addr.arpa.ptrfile
1
2
3
4
5
6
7
8
9
10
$TTL 1H     
@       IN SOA ns1.example.com. admin.example.com. (
             2014080101 3600 600 86400 3600 )
             IN NS ns1.example.com.             
             IN NS ns2.example.com.     
              
100 IN PTR ns1.example.com.     
101 IN PTR ns2.example.com.     
110 IN PTR www.example.com.     
200 IN PTR mail.example.com.

  
(2)RNDC

使用rndc(remote name domain controller)對named進行控制操作。默認工作TCP的953號端口,不安全,建議本地使用。

常用命令 :    
    reload 在線重新裝載配置文件和zone文件     
    reload zone  重新加載指定的zone     
    stop [-p] 安全停止named。使用-p返回pid     
    flush 清除DNS緩存     
    status 顯示服務器狀態

1
2
3
# rndc-confgen -r /dev/urandom > /etc/named/rndc.conf    
# chgrp named /etc/named/rndc.conf     
# chmod 440 /etc/named/rndc.conf

  
打開rndc.conf,將下面部分追加到/etc/named/named.conf尾部(要去除前面的#,即註釋)

1
2
3
4
5
6
7
8
key "rndc-key" {
    algorithm hmac-md5;         
    secret "I+gGCDDZ5OzuYTIj+bDu6g==";     
};
controls {
    inet 127.0.0.1 port 953             
        allow { 127.0.0.1; } keys { "rndc-key"; };     
};


(3)啓動DNS服務     

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# named -u named     
# rndc status     
version: 9.10.0-P2 <id:d23ac043>     
boot time: Fri, 08 Aug 2014 22:28:17 GMT     
last configured: Fri, 08 Aug 2014 22:28:17 GMT     
CPUs found: 2     
worker threads: 2     
UDP listeners per interface: 2     
number of zones: 103     
debug level: 0     
xfers running: 0     
xfers deferred: 0     
soa queries in progress: 0     
query logging is OFF     
recursive clients: 0/0/1000     
tcp clients: 0/100     
server is up and running


使用以下命令測試

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# dig -t SOA example.org @192.168.60.133    
# dig -t MX example.org @192.168.60.133     
# dig -t A www.example.org @192.168.60.133
# dig -x 192.168.60.110  @192.168.60.133
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -x 192.168.60.110 @192.168.60.133    
;; global options: +cmd     
;; Got answer:     
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51009     
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 0
 
;; QUESTION SECTION:    
;110.60.168.192.in-addr.arpa.    IN    PTR
 
;; ANSWER SECTION:    
110.60.168.192.in-addr.arpa. 3600 IN    PTR    www.example.com.
 
;; AUTHORITY SECTION:    
60.168.192.in-addr.arpa. 3600    IN    NS    ns1.example.com.     
60.168.192.in-addr.arpa. 3600    IN    NS    ns2.example.com.
 
;; Query time: 4 msec    
;; SERVER: 192.168.60.133#53(192.168.60.133)     
;; WHEN: Fri Aug  8 17:06:25 2014     
;; MSG SIZE  rcvd: 110

 

(4)建立從DNS服務器(rpm安裝的,192.168.60.171)

從服務器的主配置文件中,將這兩句改爲如下,或者註釋掉。   

1
2
3
4
5
6
7
8
9
10
11
listen-on port 53 { any; };     
allow-query     { any; };
 
在/etc/named.rfc1912.zones中
 
zone "example.org" IN {
    type slave;
    file "slaves/example.org.zone";
    masters { 192.168.60.133; };
    allow-transfer { none; };
};

啓動服務

1
# service named start

查看/var/named/slaves/,已經存在文件example.org.zone了,內容爲:     

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# cat example.org.zone      
$ORIGIN .     
$TTL 3600    ; 1 hour     
example.org        IN SOA    ns1.example.org. admin.example.org. (
         2014080101 ; serial          
         3600       ; refresh (1 hour)   
         600        ; retry (10 minutes)
         86400      ; expire (1 day)
         3600       ; minimum (1 hour)  )
                    NS    ns1.example.org. 
                    NS    ns2.example.org.
                    MX    10 mail.example.org.
$ORIGIN example.org.     
mail           A    192.168.60.200     
ns1            A    192.168.60.133     
ns2            A    192.168.60.171     
www            A    192.168.60.110

檢查是否能夠解析 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# dig -t A www.example.org @192.168.60.171
; <<>> DiG 9.10.0-P2 <<>> -t A www.example.org @192.168.60.171    
;; global options: +cmd     
;; Got answer:     
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36324     
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
 
;; OPT PSEUDOSECTION:    
; EDNS: version: 0, flags:; udp: 4096     
 
;; QUESTION SECTION:     
;www.example.org.        IN    A
 
;; ANSWER SECTION:    
www.example.org.    3600    IN    A    192.168.60.110
 
;; AUTHORITY SECTION:    
example.org.        3600    IN    NS    ns2.example.org.     
example.org.        3600    IN    NS    ns1.example.org.
 
;; ADDITIONAL SECTION:    
ns1.example.org.    3600    IN    A    192.168.60.133     
ns2.example.org.    3600    IN    A    192.168.60.171
 
;; Query time: 4 msec    
;; SERVER: 192.168.60.171#53(192.168.60.171)
;; WHEN: Sat Aug 09 08:16:32 CST 2014     
;; MSG SIZE  rcvd: 128

 

3.3、子域授權及轉發器

子域授權轉發

假設子域爲tech.example.org  

在父域172.168.60.133中的example.org.zfile添加膠水記錄   

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$TTL 1H     
@       IN SOA ns1 admin ( 
            2014080105 3600 600 86400 3600)             
        IN NS ns1             
        IN NS ns2             
        IN MX 10 mail     
         
tech    IN NS ns.tech     
ns.tech IN A 192.168.60.134
 
ns1     IN A 192.168.60.133    
ns2     IN A 192.168.60.171     
mail    IN A 192.168.60.200     
www     IN A 192.168.60.110

子域172.168.60.134中的/etc/named.rfc1912.zones中追加   

1
2
3
4
zone "tech.example.org" IN {
    type master;         
    file "tech.example.org.zone";
};

在/var/named下創建zone文件tech.example.org.zone   

1
2
3
4
5
6
7
$TTL 3600     
@ IN SOA ns admin (  
        2014080201 3600 600 86400 3600)
         IN NS ns
          
ns     IN A 192.168.60.134
www    IN A 192.168.60.190

啓動子域(rpm安裝的)   

1
# service named start

重新裝載父域配置文件     

1
# rndc reload

測試成功,解析有子域提供,返回非權威答案   

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# dig -t A www.tech.example.org @192.168.60.133
; <<>> DiG 9.10.0-P2 <<>> -t A www.tech.example.org @192.168.60.133    
;; global options: +cmd     
;; Got answer:     
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34877     
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
 
;; OPT PSEUDOSECTION:    
; EDNS: version: 0, flags:; udp: 4096     
;; QUESTION SECTION:     
;www.tech.example.org.        IN    A
 
;; ANSWER SECTION:    
www.tech.example.org.    3600    IN    A    192.168.60.190
 
;; AUTHORITY SECTION:    
tech.example.org.    3600    IN    NS    ns.tech.example.org.
 
;; ADDITIONAL SECTION:    
ns.tech.example.org.    3580    IN    A    192.168.60.134
 
;; Query time: 1 msec    
;; SERVER: 192.168.60.133#53(192.168.60.133)     
;; WHEN: Sat Aug 09 09:46:25 CST 2014     
;; MSG SIZE  rcvd: 98


3.4、轉發器配置

見子域授權圖

3.4.1、完全轉發

這裏有一個問題,使用子域的DNS服務,無法知曉父域,所有的非本域解析統統要去找根域。  

爲了解決這個問題,可以將子域配置成爲轉發器,除了子域本身以外的解析,全部轉發父域服務器。

在/etc/named.conf中添加forward和forwarders。     

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
options {
    listen-on port 53 { any; };         
    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     { any; };          
     
    // write here     
    forward only;        
    forwarders { 192.168.60.133; };
};
 
logging {
    channel default_debug {
        file "data/named.run";
        severity dynamic;
    };
};
 
zone "." IN {
    type hint;
    file "named.ca";
};
 
include "/etc/named.rfc1912.zones";

開始測試,本地轉發www.example.org的解析請求給父域,返回非權威答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# dig -t A www.example.org @192.168.60.134
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -t A www.example.org @192.168.60.134    
;; global options: +cmd     
;; Got answer:     
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38054     
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2
 
;; QUESTION SECTION:    
;www.example.org.        IN    A
 
;; ANSWER SECTION:    www.example.org.    3354    IN    A    192.168.60.110
 
;; AUTHORITY SECTION:    
example.org.        3354    IN    NS    ns1.example.org.     
example.org.        3354    IN    NS    ns2.example.org.
 
;; ADDITIONAL SECTION:    
ns1.example.org.    3354    IN    A    192.168.60.133     
ns2.example.org.    3354    IN    A    192.168.60.171
 
;; Query time: 0 msec    
;; SERVER: 192.168.60.134#53(192.168.60.134)     
;; WHEN: Sat Aug  9 02:42:26 2014     
;; MSG SIZE  rcvd: 117

3.4.2、區域轉發

當然這裏還可以配置區域轉發,對example.org定義爲一個區域,裏面配置forward和forwarders。  

在/etc/named.conf中移除forward和forwarders兩句。

在/etc/named.rfc1912.zones中追加   

1
2
3
4
5
zone "example.org" IN {
    type forward;
    forward only;
    forwarders { 192.168.60.133; };
};

使用rndc reload重新裝載配置文件     

1
# dig -t A www.example.org @192.168.60.134

測試成功。  

 

3.5、view視圖

視圖

不同IP段的客戶端,DNS分析判斷後返回不同的結果。

將來自172.168.60.133的請求訪問是intra_view,其他的IP的請求都訪問inter_view。  

這次使用acl訪問控制列表,在192.168.60.133上/etc/named/named.conf中,在起始行添加    

1
acl intranet { 192.168.60.133; 127.0.0.1; };

重新修改/etc/named/named.rfc1912.zones,定義2個視圖    

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
view "intra_view" {
    match-clients { intranet; };
     
    zone "." IN {
        type hint;
        file "named.ca";
    };
     
    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 "example.org" IN {
        type master;
        file "example.org.zfile";
        allow-update { 127.0.0.1; };
        allow-transfer { 192.168.60.171; };
    };
     
    zone "60.168.192.in-addr.arpa" IN {
        type master;
        file "60.168.192.in-addr.arpa.ptrfile";
        allow-update { 127.0.0.1; };
        allow-transfer { 192.168.60.171; };
    };
};
 
    view inter_view {
        match-clients { any; };
        zone "test.com" IN {
        type master;
        file "test.com.zone";
    };
};

新增/var/named/test.com.zone文件    

1
2
3
4
5
6
7
8
9
$TTL 1H     
@       IN SOA ns1 master (
            2014080101 3600 600 86400 3600)
        IN NS ns1
        IN MX 10 mail
  
ns1    IN A 172.16.200.100     
mail   IN A 172.16.200.200     
www    IN A 172.16.200.110

開始測試    

本機192.168.60.133上測試   

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# dig -t A www.example.org @192.168.60.133
; <<>> DiG 9.10.0-P2 <<>> -t A www.example.org @192.168.60.133    
;; global options: +cmd     
;; Got answer:     
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46433     
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
 
;; OPT PSEUDOSECTION:    
; EDNS: version: 0, flags:; udp: 4096     
 
;; QUESTION SECTION:     
;www.example.org.        IN    A
 
;; ANSWER SECTION:    
www.example.org.    3600    IN    A    192.168.60.110
 
;; AUTHORITY SECTION:    
example.org.        3600    IN    NS    ns1.example.org.     
example.org.        3600    IN    NS    ns2.example.org.
 
;; ADDITIONAL SECTION:    
ns1.example.org.    3600    IN    A    192.168.60.133     
ns2.example.org.    3600    IN    A    192.168.60.171
 
;; Query time: 2 msec    
;; SERVER: 192.168.60.133#53(192.168.60.133)     
;; WHEN: Sat Aug 09 18:40:14 CST 2014     
;; MSG SIZE  rcvd: 128
 
# dig -t A www.test.com @192.168.60.133
無法解析,此處省略

在192.168.60.134上測試  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# dig -t A www.test.com @192.168.60.133
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -t A www.test.com @192.168.60.133    
;; global options: +cmd     
;; Got answer:     
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5917     
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
 
;; QUESTION SECTION:    
;www.test.com.            IN    A
 
;; ANSWER SECTION:    
www.test.com.        3600    IN    A    172.16.200.110
 
;; AUTHORITY SECTION:    
test.com.        3600    IN    NS    ns1.test.com.
 
;; ADDITIONAL SECTION:    
ns1.test.com.        3600    IN    A    172.16.200.100
 
;; Query time: 2 msec    
;; SERVER: 192.168.60.133#53(192.168.60.133)     
;; WHEN: Sat Aug  9 04:21:18 2014     
;; MSG SIZE  rcvd: 80
 
# dig -t A www.example.org @192.168.60.133
解析不到,此處省略

 

    綜上,DNS是一個非常重要的基礎性服務,有很多的概念,標準內容也非常多。不僅用於互聯網解析,也可以用在企業內建網絡中。常用的就有主從複製、子域授權、轉發和視圖幾種模式。要熟悉這些基礎概念和應用場景,就能利用它對整個局域網乃至互聯網的訪問進行優化。

 

參考資料

維基百科

https://en.wikipedia.org/wiki/List_of_DNS_record_types

域名標準規格

http://tools.ietf.org/html/rfc1035

BIND手冊

http://www.isc.org/downloads/bind/doc/bind-9-9/

DNS資料

http://dns-learning.twnic.net.tw/dns/toc.html

https://www.cnnic.net.cn/

本文出自 “終南山下” 博客,請務必保留此出處http://me2xp.blog.51cto.com/6716920/1538163

發佈了31 篇原創文章 · 獲贊 7 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章