天天看點

DNS詳解

一、介紹DNS基礎

DNS(Domain Name System)域名系統,是一種用于TCP/IP應用程式的分布式資料庫,他提供主機名字和IP位址之間的轉換及有關電子郵件的選路資訊。DNS最常用的版本是BIND(Berkeley Internet Name Domain)——伯克利Internet域名伺服器。

1、伺服器類型

   緩存DNS伺服器:不需要注冊,内部用戶端使用,資料由用戶端請求後将結果緩存到伺服器上

   主DNS伺服器(master):儲存本域的NS記錄、主機A記錄、MX記錄、子域伺服器記錄等資料庫更新由管理者手動完成

   輔助DNS伺服器(slave):也叫從伺服器,資料庫跟新從主伺服器或其他輔助DNS伺服器那裡同步擷取

   子域伺服器:需要在父域伺服器授權

2、域名分級結構

頂級域:“.”也稱之為根域,全球總共有13台根伺服器,裝完bind後在/var/named/named.ca 中儲存的就是全球的13台根DNS資訊

一級域:

   國家域:.cn, .hk, .iq, .us, .jp, .uk

   組織域:.com, .net, .edu, .org, .gov, .mil, .cc, .mobi

   反向域:arpa    FQDN <--IP

3、解析過程

(1)用戶端client發起查詢請求www.baidu.com,客戶機首先查詢自己的緩存了有沒有,然後在檢視自己的hosts檔案,如果沒有,把請求送出給local DNS

(2)local DNS接受到請求後,首先檢查本地緩存中,有沒有客戶請求的位址,如果有就直接将緩存中的結果相應給客戶,否則就開始疊代查詢,去找根伺服器root DNS

(3)根伺服器root DNS接收到local DNS的請求并查找自己的區域檔案記錄,發現沒有www.baidu.com的記錄,但是我這裡有.com的記錄,我把.com以下的解析都授權給.com了, 然後将.com的位址回應給local DNS

(4)local DNS收到根root DNS的傳回結果後,就知道了.com的位址,并且這不是client所需要的結果,是以local DNS再去找.com

(5).com接收到local DNS的請求後查詢自己的區域檔案記錄。發現他這裡也沒有www.baidu.com的記錄,但是有baidu.com的記錄,并且已經将解析權限授權給了baidu.com,然後将baidu.com的位址回應給local DNS

(6)local DNS收到.com的回應,發現依然不是最終clent需求的的結果,于是乎local DNS再去找baidu.com

(7)baidu.com接收到local DNS的請求後,查詢自己的區域檔案記錄,自己這裡就有local DNS所要的答案,于是就将結果回應給localDNS

(8)local DNS收到baidu.com的結果後,發現這就是clent請求的位址,于是local DNS現将結果緩存一份然後就将最終結果通知clent

(9)client收到最終結果後就可以順利的通路到www.baidu.com了

4、資源記錄:

記錄的類型:A, AAAA, PTR, SOA, NS, CNAME, MX

SOA:Start of Authority,起始授權記錄;

在任何一個資料庫中有且隻能有一條SOA記錄,必須是資料庫的第一條記錄

A:Address,主機記錄;

辨別從完全合格域名到IP位址的映射關系,FQDN --> IPv4;

AAAA: Address,FQDN --> IPv6;

PTR:PoinTeR,指針記錄;

辨別從IP位址到完全合格域名的映射關系,IP --> FQDN

NS:Name Server,名稱伺服器記錄;

使用者标明目前域中所有的DNS伺服器;

CNAME:Conanical Name,别名記錄;

辨別從完全合格域名到完全合格域名的映射關系,FQDN --> FQDN

MX:Mail eXchanger,郵件交換器記錄;

辨別域中郵件伺服器的主機名,從域名映射到完全合格域名,Domain name --> FQDN

優先級:0-65536,數字越小優先級越高;

區域資料庫中資源記錄的定義格式:

文法:name|FQDN  [TTL]  IN  RR_TYPE  VALUE

注意:

1.名稱部分可以寫FQDN,也可以除去域名部分的主機名,其域名會從配置檔案中繼承,也可以使用宏$Origin來定義;

2.TTL是以每秒為機關的時間概念,如果省略,則從全局定義的宏$TTL繼承

3."@"符号可以用于引用目前區域的域名;

4.同一個name可以通過多條記錄定義多個不同的VALUE;DNS在查詢此類記錄的時候,會以輪詢的方式一次調取每個記錄的内容;

5.多個name通過多條記錄對應一個VALUE,通常用于多個名稱對應同一IP位址,可以使用CNAME記錄來進行辨別;

5、七種資源記錄在區域資料庫中的具體格式:

SOA資源記錄:

name:目前域的域名,如:qhdlink.com.;或者可以使用"@"代替域名;

value:

1.目前區域的主DNS伺服器的FQDN;

2.目前區域資料庫的管理者的郵件位址;但是使用"."來代替"@";

mailmaster.qhdlink.com.

3.主從伺服器進行區域傳送的相關時間定義及否定答案的統一TTL;

(Serial 1H 15M 1W 1D)

(

Serial;

1H;refresh

15M;retry

1W;expire

1D;minimal ttl)

例如:

$TTL 86400

qhdlink.com. 86400 IN SOA ns1.qhdlink.com. master.qhdlink.com.(

2017081001;serial

1D;ttl)

NS記錄:

name:目前域的域名

value:目前區域内某DNS伺服器的完全合格域名,如:ns.qhdlink.com.

1.一個域中可以有多個NS資源記錄;

2.每個NS資源記錄都必須要有一個A記錄與之對應;

1.正常寫法

qhdlink.com. 86400 IN NS ns1.qhdlink.com.

qhdlink.com. 86400 IN NS ns2.qhdlink.com.

2.使用宏繼承的寫法:

$Origin qhdlink.com.

IN NS ns1

IN NS ns2

MX記錄:

name:目前域的域名;

value:目前域中某有效的郵件伺服器的主機名;

1.一個域中,可以有多條MX資源記錄;

2.每個MX資源記錄都必須要有一條A記錄與之對應;

qhdlink.com. 86400 IN MX 10 mail1.qhdlink.com.

@ IN MX 20 mail2

A記錄:

name:域中某主機的FQDN或主機名稱;

value:與主機名對應的IPv4位址;

www.qhdlink.com. 86400 IN A 192.168.1.1

www.qhdlink.com. 86400 IN A 192.168.1.2

www.qhdlink.com. 86400 IN A 192.168.1.3

www.qhdlink.com. 86400 IN A 192.168.1.4

www IN A 192.168.1.1

泛域名:*.qhdlink.com. IN A  1.2.3.4

直接域名:qhdlink.com.  IN A  2.3.4.5

泛域名和直接域名都是防止使用者寫錯名稱而導緻無法給出正确的解析結果;

CNAME記錄:

name:别名的FQDN或簡單的名稱;

value:真正的名稱的FQDN或其簡單名稱;

web.qhdlink.com. 86400 IN CNAME www.qhdlink.com.

web IN CNAME www

AAAA記錄:規則與A記錄一緻;

ftp.qhdlink.com. 86400 IN AAAA ::1

PTR記錄:

name:将IP位址反過來寫,并在其字尾加反向域的标準字尾;是以其完整寫法應該是:1.72.16.172.in-addr.arpa.

value:FQDN

1.72.16.172.in-addr.arpa. 86400 IN PTR www.qhdlink.com.

如果有全局宏定義的話:

1.72 IN PTR www   www.qhdlink.com.

1.網絡部分的位址和标準字尾可以省略;

2.PTR記錄的value部分,必須寫FQDN;

3.如果剩餘的IP位址中的主機部分仍然是多段,主機部分依然需要反着寫; 

二、BIND軟體

BIND——Berkeley Internet Name Domain,ISC(isc.org)

bind:

主配置檔案:/etc/named.conf

可以在此配置檔案中使用include指令包含其他的配置檔案;

/etc/named.iscdlv.key

/etc/named.rfc1912.zones

聲明區域;

/etc/named.root.key

主配置檔案的格式:

1.注釋方式:

//:單行注釋;

/* ... */:任意内容注釋;

2.分段配置的特點:

a.通路控制清單定義段:

acl ACL_NAME {...};

b.全局選項段:

options {...};

c.日志配置段:

logging {...};

d.區域配置段:

zone "ZONE_NAME" IN {...};

e.視圖配置段:

view VIEW_NAME {...};

f.include包含段:

include /PATH/TO/SOME_CONFIG_FILE

全局配置段:

options {

listen-on port 53 { 127.0.0.1; 172.16.72.1; };

在啟動DNS服務之後,named程序監聽的IP位址;

directory   "/var/named";

規定的解析庫(區域資料庫)的根目錄;

allow-query     { localhost; };

通路控制語句,允許哪些主機将查詢請求發送至本伺服器;預設為localhost,即隻為伺服器自身提供查詢請求處理;

recursion yes;

全局開啟遞歸查詢;預設為所有用戶端開啟遞歸查詢;

初學時,建議關閉dnssec功能;

dnssec-enable no;

dnssec-validation no;

dnssec-lookaside no;

};

三、測試工具

1、dig

   基本文法:dig -t 資源記錄類型 名稱 @server(使用那台DNS伺服器去查詢,也可以不跟)

dig -t A    #主機A記錄

       NS   #NS伺服器記錄

       MX   #郵件記錄

       x    #反向解析

       axfr #查詢所有記錄,也叫區域傳輸

執行個體:

使用DNS伺服器172.16.0.1查詢NS記錄root-server.net

# dig -t NS root-server.net @172.16.0.1

使用DNS伺服器172.16.0.1查詢全球13台根DNS的NS記錄

# dig -t NS . @172.16.0.1

使用DNS伺服器172.16.0.1查詢www.sohu.com

# dig -t A www.sohu.com @172.16.0.1

2、host指令:

host [-t RR_TYPE] DOMAIN_NAME SERVER

  3、nslookup指令:

指令行工具+互動式指令:

指令行工具:nslookup DOMAIN_NAME

互動式指令:nslookup

> server IP_ADDR

指定此次查詢使用的DNS伺服器IP位址;

> set q=RR_TYPE

要查詢的資源記錄的類型;

> QUERY_NAME

壓迫查詢解析的主機名;

> set type=RR_TYPE

同set q=RR_TYPE

4、rndc

這個指令功能可以檢視DNS服務的運作狀态,可以重新加載配置檔案和清空緩存

rndc status             #檢視伺服器狀态

rndc reload             #重新裝載配置檔案及區域解析庫檔案

rndc reconfig           #僅重讀配置檔案     

rndc flash              #清空緩存

rndc trace              #提升調試級别,級别越高資訊越詳細

rndc trace LEVEL

    rndc trace 3        #指定調試級别為3

rndc notrace            #關閉調試

rndc querylog           #打開查詢日志功能

5、named-checkconf

  檢查配置檔案有沒有錯誤,直接輸入named-checkconf指令就可以測試,沒傳回任何資訊就是沒有錯誤。

6、named-checkzone

  檢查區域庫檔案有沒有錯誤

  基本文法:named-checkzone "區域名" 區域庫檔案路徑

[root@localhost named]# named-checkzone "lyd.com" /var/named/lyd.com.zone

zone lyd.com/IN: loaded serial 20130826

OK

四、基本的正向和反向區域的配置和解析

1.配置一個正向的區域:

1) 定義區域:/etc/named.rfc1912.zones

zone "ZONE_NAME" IN {

type {master|slave|forward|hint};

file "ZONE_NAME.zone";

zone "qhdlink.com" IN {

type master;

file "qhdlink.com.zone";

2) 建立區域資料檔案

/var/named/qhdlink.com.zone

注意修改權限:

# chown :named qhdlink.com.zone 

# chmod o-r qhdlink.com.zone

$ORIGIN qhdlink.com.

@ IN  SOA ns1.qhdlink.com. admin.qhdlink.com. (

                                2017081001;serial

                                1H;refresh

                                15M;retry

                                1W;expire

                                1D);TTL

IN NS ns1.qhdlink.com.

MX 10 mx1.qhdlink.com.

ns1.qhdlink.com.   IN  A   172.16.72.1

www   IN  A   172.16.100.1

www   IN  A   172.16.100.2

www   IN  A   172.16.100.3

web   IN  CNAME www

mx1 IN  A   172.16.100.4

3) 重載配置檔案和區域檔案,使配置生效;

a.檢測文法是否正确:

named-checkconf

檢測named.conf及其輔助配置檔案的文法正确與否;

named-checkzone "ZONE_NAME" FILE_NAME

檢測域名和區域資料庫檔案是否對應和是否存在文法錯誤;

b.重載配置檔案:

# rndc reload

# systemctl reload named.service

# service named reload(CentOS 6-)

2.配置一個反向的區域:

type {master主|slave從|forward轉發|hint根};

zone "16.172.in-addr.arpa" IN {

file "172.16.zone";

/var/named/172.16.zone

# chown :named 172.16.zone 

# chmod o-r 172.16.zone

$ORIGIN 16.172.in-addr.arpa.

1.72 IN  PTR  ns1.qhdlink.com.

1.100 IN  PTR  www.qhdlink.com.

2.100 IN  PTR  www.qhdlink.com.

3.100 IN  PTR  www.qhdlink.com.

4.100 IN  PTR  mx1.qhdlink.com.

3.主從伺服器:

注意:主從伺服器都是區域級别的概念;

配置一個從區域:

ON slave:

1) 定義區域

type slave;

file "slaves/ZONE_NAME.zone";

masters { MASTER_IP; };

示例:

file "slaves/qhdlink.com.zone";

masters { 172.16.72.1; };

2) 檢測并重載配置檔案;

rndc reload

五、子域委派授權

在父域的區域檔案中直接授權即可;

qhdlink.com區域的檔案/var/named/qhdlink.com.zone

tech.qhdlink.com. IN  NS  ns.tech.qhdlink.com.

ns.tech.qhdlink.com. IN A  172.16.69.1

在子域的NS伺服器上,直接建立子域的區域檔案,管理資源記錄即可;

zone "tech.qhdlink.com" IN {

file "tech.qhdlink.com.zone";

touch /var/named/tech.qhdlink.com.zone

chown :named /var/named/tech.qhdlink.com.zone

chmod 640 /var/named/tech.qhdlink.com.zone

如果想要從子域的NS伺服器解析父域的資源記錄,則需要轉發器的定義;

定義區域轉發:

在子域的NS伺服器上的/etc/named.rfc1912.zones中定義父域轉發器;

type forward;

forward first;

forwarders { 172.16.72.1; };

}; 

定義全局轉發:

在子域的NS伺服器的主配置檔案/etc/named.conf檔案中定義:

...

六、視圖:view

定義視圖:

view VIEW_NAME {

match_clients { acl; };

zone 

zone

注意:一旦在bind中啟用的視圖,則所有的zone都必須定義在視圖中;

視圖配置示例:

view intranet {

  match-clients { mynet; };

  zone "." IN {

    type hint;

    file "named.ca";

  };

  zone "qhdlink.com" IN {

    type master;

    file "qhdlink.com.intra.zone";

    allow-query { mynet; };

    allow-update { none; };

    allow-transfer { none; };

view internet {

  match-clients { any; };

    file "qhdlink.com.inter.zone";

本文轉自 Runs_ 51CTO部落格,原文連結:http://blog.51cto.com/12667170/1957753,如需轉載請自行聯系原作者