DNS服務器搭建從協議到實現詳解

一、域名和服務概述

   1.FQDNFully Qualified Domain Name,完全限定域名,全局唯一

          FQDN是指主機名加上全路徑,全路徑中列出了序列中所有域成員。全域名可以從邏輯上準確地表示出主機在什么地方,也可以說全域名是主機名的一種完全表示形式。從全域名中包含的信息可以看出主機在域名樹中的位置。

 

   2.TLDTop Level Domain,頂級域名

       (1)頂級域名:域名由兩個或兩個以上的詞構成,中間由點號分隔開,最右邊的那個詞

              域名分層設計:倒置樹狀結構,上級包含下級,全球只有13個根節點

                分布式數據庫系統:將一個大的書庫分割成多個小的數據庫,分布式管理

       (2)分類

                國家和地區頂級域名(countrycode top-level domains,nTLDs):國家都按照ISO3166國家代碼分配

                國際頂級域名(generictop-level domainsgTLDs)組織域,.com, .net,.org, .gov, .edu, .mil

     [圖示]

wKioL1aSVBrjo-p4AAGCeidl75s367.jpg

   3.DNSDomain Name System,域名服務(應用層協議)

           因特網上作為域名和IP地址相互映射的一個分布式數據庫C/S架構,而非IP數串訪問。通過主機名,最終得到該主機名對應的IP地址的過程叫做域名解析(或主機名解析)。DNS協議運行53/udp、53/tcp端口。

       C/S架構:Client:發起應用請求的程序;Server:響應請求(提供服務)的程序,監聽在端口;

      傳輸層協議: TCP, UDP,SCTP

               TCP: Transmission Control Protocol,面向連接的協議:雙方通信之前需要事先建立虛連接;

               UDP:User Datagram Protocol無連接的協議:雙方無須通信之前需要事先建立虛連接;

       (1)DNS查詢類型

      客戶主機—> 運營商or最近的DNS服務器

 —-> 存在,返回

 —-> 不存在—>進行分布式DNS系統根節點—>分布式運作向下迭代級別查詢

                 第一階段:遞歸查詢,從客戶機到自己所指向的DNS服務器

                 第二階段:迭代查詢(從分布式DNS系統頂端開始查詢)

       (2)DNS名稱解析方式

                 1)正向解析:名稱 –> IP,域名轉換成ip地址的操作

                 2)反向解析:IP –> 名稱ip地址轉換成域名的操作

ip地址為線索查詢,最頂端位置名字:in-addr.arpa

eg1.2.3.4   ==寫成4.3.2.1.in-addr.arpa,網段3.2.1.in-addr.arpa

             注意:二者的名稱空間,非為同一個空間,即非為同一棵樹狀結構體系;所以不是同一個解析庫;

                           域名服務代理商:godaddy、萬網 … …

       (3)DNS服務器類型

               1)負責解析至少一個域:主名稱服務器;輔助名稱服務器;

               2)不負責解析:緩存名稱服務器;

 

   4.DNS解析流程

          首先查找本機HOSTS表,有就直接使用表中定義,無查找網絡連接中設置的DNS 服務器由他來解析。

Client –> hosts文件 –> DNS LocalCache (本地DNS緩存)–> DNS  Server (recursion,遞歸請求) –>

—>自己負責解析的域:直接查詢數據庫并返回答案;

—>不是自己負責解析域:Server Cache –> iteration(迭代方式查找分布式DNS系統根)

解析答案分類

       1) 肯定答案:返回肯定答案

             否定答案:不存在查詢的鍵,因此,不存在與其查詢鍵對應的值;

        2)  權威答案:由直接負責的DNS服務器返回的答案;

  非權威答案:從緩存中讀取的答案

 

 

 

 

二、DNS區域配置文件

   1.DNS區域(zone)和域(domain)

         區域是物理概念,域是邏輯概念

              域:一段命名空間,一般包括正向解析區域和反向解析區域

              正向解析區域:包含FQDN –> IP的轉換、正向解析庫

              反向解析區域:包含IP –> FQDN的轉換、反向解析庫

 

   2.區域數據庫文件

        (1)資源記錄:ResourceRecord, 簡稱rr;

     區域數據庫文件中的每一個記錄條目

        (2)記錄有類型:A, AAAA, PTR,SOA, NS, CNAME, MX

                      SOA:StartOf Authority, 起始授權記錄; 一個區域解析庫有且只能有一個SOA記錄,而且必須放在第一條;

                      NS:NameService, 域名服務記錄;一個區域解析庫可以有多個NS記錄;其中一個為主的;

                      A: Address, 地址記錄,FQDN –> IPv4轉換

                      AAAA:地址記錄, FQDN –> IPv6轉換;

                      CNAME:CanonicalName, 別名記錄;

                      PTR:Pointer,指針IP –> FQDN實現反向解析地址

                      MX:Mail eXchanger, 郵件交換器;優先級的概念,用數字0-99表示,數字越小優先級越高;

        (3)資源記錄的定義格式:

                   語法:name   [TTL]              IN            RR_TYPE              value

                          name:名稱,可以為主機名、FQDN、IP,正向解析主機名是name,反向解析IPname

                           TTL:緩存周期。DNS的緩存機制,可以統一定義,每條定義記錄中省略從全局繼承

                           IN:關鍵字,不能省略,指明其類型和值

                           RR_TYPE :資源區域數據庫的資源記錄的類型

                           value:值,可以包含多段組成

             注意:資源區域數據庫的資源記錄類型不同,名稱和值會有特殊要求:

 

   3.定義不同資源類型記錄格式

注意:

     1)TTL可以從全局繼承;

    2) @表示當前區域的名稱,任何時候用到可以使用@來取代;

    3)相鄰的兩條記錄其name相同時,后面的那條記錄name可省略;

    4)對于正向區域來說,各MX,NS等類型的記錄的value為FQDN,此FQDN應該有一個A記錄,非必須;

       (1)SOA:任何一個數據庫此條必須存在且為第一條

                  name: 當前區域的名字,最后一個"."不能省略

                  value:有多部分組成

                        1) 當前區域的區域名稱(也可以使用主DNS服務器名稱);

                        2) 當前區域管理員的郵箱地址;但地址中不能使用@符號,一般使用點號來替代;

                        3) (主從服務協調屬性的定義以及否定答案的TTL)

     示例

xuding.win.         86400        IN                SOA        xuding.win.        admin.xuding.com.  (

2017010801        ;serial

2H                ;refresh

10M                ;retry

1W                ;expire

1D                ;negative answer ttl

)        

說明:

     1)value在一對( )中書寫,可以寫在同一行用空格隔開,也可以分行書寫

     2)value之后用";"其后可以進行注釋,也可以省略

     3)value的單位有H小時、M分鐘、W周、D

     4)serial最長只能是十位數字組成,一般用"當前日期+版本號"方便管理

       (2)NS:

                name:當前區域的區域名稱

                value:當前區域的某DNS服務器的名字

        一個區域可以有多個ns記錄; 多個主機的名稱相同無意義

     示例

xuding.win.         86400        IN        NS         ns1.xuding.win.

xuding.win.         86400        IN        NS         ns2.xuding.win.

       (3)MX:

                name:當前區域的區域名稱

                 value:當前區域某郵件交換器的主機名;

                               MX記錄可以有多個;每個記錄的value之前有一個數字表示其優先級;

 示例

xuding.win.                IN        MX        10          mx1.xuding.win.

xuding.win.                IN        MX        20          mx2.xuding.win.

       (4)A:

                 name:某FQDN,例如www.xuding.win.

                  value:某IPv4地址;

                          一個主機可以有多個地址,一個二地址也可以有多個名字

 示例

www.xuding.win.                IN        A        1.1.1.1

www.xuding.win.                IN        A        1.1.1.2

bbs.xuding.win.                        IN        A        1.1.1.1

       (5)PTR:指針記錄

                name:IP地址,有特定格式,IP反過來寫,而且加特定后綴;例如1.2.3.4的記錄應該寫為4.3.2.1.in-addr.arpa.;

                 value:FQND域名

 示例4.3.2.1.in-addr.arpa.         IN       PTR          www.xuding.win.

       (6)CNAME:

                 name:FQDN格式的別名;

                  value:FQDN格式的正式名字;

 示例web.magedu.com.         IN         CNAME     www.xuding.win.

 

 

 

 

三、BIND程序配置DNS服務器

   1.BINDBerkeley Internet NameDomain,伯克利互聯網名稱域

             BIND程序是DNS域名解析服務協議的實現,由ISC.org組織代為維護,該組織同時維護DHCP

wKioL1aSVCWCKBUPAAKeVZwmaqw157.jpg

   

   2.BIND相關程序包:[root@localhost ~]# yum list all bind*

          bind-libs:被bind(服務器包)和bind-utils包中的程序共同用到的庫文件;

          bind-utils:bind客戶端程序集,例如dig,host, nslookup等;

          bind:提供的dnsserver程序、以及幾個常用的測試程序;

          bind-chroot:選裝,讓named運行于jail(容器沙箱)模式下;

  注意:一般bind-libsbind-utils在發行版安裝時候會自動安裝

wKioL1aSVDKjqWHTAAMBhptkJvk731.jpg

 

   3.BIND配置文件

       (1)主配置文件:/etc/named.conf

                 可使用include指令包含進來其它文件

     /etc/named.iscdlv.key/etc/named.rfc1912.zones、/etc/named.root.key

       (2)解析庫文件:/var/named/ZONE_NAME.zone

                1)一臺DNS服務器可同時為多個區域提供解析;

     2) 必須要有根區域解析庫文件: CentOS上是named.ca文件;

     3) 還應該有兩個區域解析庫文件:localhost和127.0.0.1的正反向解析庫;

正向:/var/named/named.localhost、    反向:/var/named/named.loopback

wKiom1aSVBODeauWAAFwF5yKeZg169.jpg

named.canamed.localhost、named.loopback,rpm安裝后會自動生成,rpm包制作者提供該類文件

     (3)rndc:remotename domain contoller,名稱域(遠程)控制工具

    工作在953/tcp端口,但默認監聽于127.0.0.1地址,因此僅允許本地使用,不允許遠程;

                 NAMED啟動服務后/etc/named.conf默認仍然僅監聽172.0.0.1:53端口,且allowquery運行訪問為本地主機

wKiom1aSVCDQOzRvAAIQjaa4O0M987.jpg

 

   4.主配置文件格式:每個配置語句必須以分號結尾

                   全局配置段:options{… … }

                    日志配置段:logging{… … }

                    區域配置段:zone {… … }定義由本機負責解析的區域,或轉發的區域;

wKioL1aSVF6SmtV8AAL7DFYL6t0018.jpg

       (1)緩存名稱服務器的配置:

   監聽能與外部主機通信的地址listen-on port 53 {  172.0.0.1; 172.16.100.67; };

           注意:花括號前后要有空格,每個地址之后必須以;結束,否則會語法錯誤

       (2)測試時建議關閉dnssec,需要時開啟

dnssec-enableno;

dnssec-validationno;

dnssec-lookasideno;        

       (3)關閉僅允許本地查詢://allow-query  { localhost; };

       (4)檢查配置文件語法錯誤(默認檢查/etc/named.conf):named-checkconf  

  bind程序安裝完成之后,默認即可做緩存名稱服務器使用;如果沒有專門負責解析的區域,直接即可啟動服務;

CentOS6: service  named  start

CentOS7: systemctl  start  named.service

wKioL1aSV3LBReEQAAWnTAYxhzk913.jpg


       (5)查看此時的監聽端口:[root@localhost /]#netstat -tunlp

               此時named服務已經開始監聽端口53/tcp 53/udp,rndc 程序開始監聽953/tcp 

wKiom1aSVEig64kOAANHcdJYVR8591.jpg

 

 

 

 

 

四、BIND測試工具:dig, host, nslookup

   1.dig命令:用于測試dns系統,因此其不會查詢hosts文件

(1)反向解析測試:dig  -x  IP

注意,有正向解析,不一定能反向解析出域名,因為IPFQDN不在一個樹狀結構系統上

(2)模擬完全區域傳送:

dig  -t axfr  DOMAIN  [@server]

(3)正向解析:dig  [-t RR_TYPE] name  [@SERVER]  [query options]

                      -t  RR_TYPE:指明資源記錄類型

                      name:將名稱解析為指明的資源類型的

                      @SERVER:指明解析的服務器,指明服務器后,/etc/resolv.conf中配置的nameserver將無意義

                      query options額外查詢選項

                                 +[no]trace:[]跟蹤解析過程;

                              +[no]recurse:[]進行遞歸解析;

    實例ONE[root@localhost /]# dig-t A www.192171.org

wKioL1aSVInBpjJzAAOHurg-YYc344.jpg

     實例TWO[root@localhost /]# dig-t A www.sina.com

; <<>>  DiG 9.9.4-RedHat-9.9.4-18.el7 <<>> -t A www.sina.com

;; global options:  +cmd

全局屬性

;; Got answer:

獲得答案

;;  ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50782

;; flags: qr rd  ra; QUERY: 1, ANSWER: 5, AUTHORITY: 4, ADDITIONAL: 5

標志位

;; OPT  PSEUDOSECTION:

;  EDNS: version: 0, flags:; udp: 40960

偽選項段

;; QUESTION  SECTION:

;www.sina.com.                        IN        A

 

;;  ANSWER SECTION:答案段

www.sina.com.                53        IN        CNAME        us.sina.com.cn.

us.sina.com.cn.                53        IN        CNAME        news.sina.com.cn.

news.sina.com.cn.        53        IN        CNAME        jupiter.sina.com.cn.

jupiter.sina.com.cn.        2649        IN        CNAME        polaris.sina.com.cn.

polaris.sina.com.cn.        53        IN        A        202.108.33.60

問題

;; AUTHORITY  SECTION:

sina.com.cn.                54870        IN        NS        ns3.sina.com.cn.

sina.com.cn.                54870        IN        NS        ns1.sina.com.cn.

sina.com.cn.                54870        IN        NS        ns2.sina.com.cn.

sina.com.cn.                54870        IN        NS        ns4.sina.com.cn.

權威段,誰負責解析

;;  ADDITIONAL SECTION:

ns1.sina.com.cn.        54870        IN        A        202.106.184.166

ns2.sina.com.cn.        54870        IN        A        61.172.201.254

ns4.sina.com.cn.        54870        IN        A        121.14.1.22

ns3.sina.com.cn.        54870        IN        A        123.125.29.99

 顯示DNS主機的具體Ip

;;  Query time: 1 msec   

查詢時長

;;  SERVER: 172.16.0.1#53(172.16.0.1)

由哪個IP主機進行操作

;; WHEN: 一 1月 11  00:37:28 CST 2016

 時間

;; MSG SIZE  rcvd: 284


     實例THREE[root@localhost /]# dig+trace -t A www.192171.org    #顯示其解析過程,基于迭代方式解析

wKioL1aSVKOQ7ZR8AAOuS1ipRO0141.png

 

   2.host命令:

host  [-t RR_TYPE]  name  SERVER_IP

實例:

[root@localhost/]# host -t A www.baidu.com

[root@localhost/]# host -t NS  baidu.com

[root@localhost/]# host -t MX  baidu.com

wKiom1aSVIjQe6cmAAJTAhe96SY277.jpg

 

   3.nslookup命令:

       (1)命令行模式:nslookup  [-options] [name]  [server]

       (2)交互式模式:

# nslookup>

server  IP:以指定的IP為DNS服務器進行查詢;

set  q=RR_TYPE:要查詢的資源記錄類型;

name:要查詢的名稱;

wKiom1aSVJKgJ0N4AAGtcIIDl5A733.jpg

 

   4.rndc命令:named服務控制命令

        (1)rndc  -h 顯示全部子

        (2)rndc flush 清空服務器中dns緩存

        (3)rndc stop :可關閉dns服務

        (4)rndc reload 重載區域配置文件,可以致命一個區域名重新加載

        (5)rndc status:查看DNS服務器狀態

wKioL1aSVMeyUPeEAACn3EhM6fs038.png

version:  9.9.4-RedHat-9.9.4-18.el7 <id:8f9657aa>

#服務器版本號

CPUs found: 1

#CPU數量

worker threads: 1

#工作線程

UDP listeners per  interface: 1

#UDP在接口的監聽百分比

number  of zones: 101

 #區域的數量

debug level: 0

#調錯等級

xfers  running: 0

#運行中的xfers

xfers deferred: 0

#延遲的xfers

soa queries in  progress: 0

正在進行的SOA查詢有多少個

query logging is  OFF

查詢日志功能是關閉的

recursive  clients: 0/0/1000    

遞歸查詢的客戶端有多少個,最多允許1000

tcp  clients: 0/100

tcp客戶端有多少個,最多允許100

server  is up and running    

服務器處于正常的啟動狀態

 

 

 

五、DNS服務器正向區域配置

   1.配置主配置文件/etc/named.confoptions

      ==========================================================================

options{

listen-onport 53 { 127.0.0.1; 172.16.49.2; };

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     { localhost; };

recursionyes;

dnssec-enableno;

dnssec-validationno;

dnssec-lookasideno;

=========================================================================

   2.定義區域在主配置文件中或主配置文件輔助配置文件中實現;

/etc/named.con文件一般只有根"."文件區域的配置信息

但其能包含include"/etc/named.rfc1912.zones"文件中定義自定義的區域

一般在/etc/named.rfc1912.zones,rfc1912:遵循1912規范的各區域請求注解文檔

zone  "ZONE_NAME"  IN  {    

         /*區域名字即為域名*/

type  {master|slave|hint|forward}; 

 /*僅有一臺主機為DNS服務器此處一定有master*/

file  "ZONE_NAME.zone";         

};        

 /*相對路徑表示在/var/named目錄下,也可以使用絕對路徑*/

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

zone  "xuding.win" IN {

typemaster;

file"xuding.win.zone";

};

===============================================================================================

 

   3.建立區域數據文件(主要記錄為A或AAAA記錄)

        在/var/named目錄下建立區域數據文件,例如/var/named/xuding.win.zone;

1) $TTL 變量,全局繼承此處的緩存周期,單位是秒

2) @代替/etc/named.rfc1912.zones配置的ZONE_NAME,也可以自己定義補全宏:$ORIGIN  xuding.win.

3) 定義第二條記錄,若寫全稱最后一個點絕對不能省略

    簡寫時會自動補全/etc/named.rfc1912.zones配置的ZONE_NAME,此時一定不能有這個點

               示例格式:ns1==ns1.xuding.win.

4) 同一個地址可以有兩個名字

5) 一臺DNS服務器上配置可以為正常的在互聯網上運行的服務器解析,指向為www的具體地址

      www IN A   [www服務器地址]

6) 可以定義別名類型:例如web IN CNAME www #定義別名

wKiom1aSVKfxmRosAAKvPpZQPLQ791.jpg

 

   4.權限及屬組修改:

#chgrp  named  /var/named/magedu.com.zone

#chmod  o= /var/named/magedu.com.zone

wKiom1aSVLDAjam0AAD3Ib-11OE029.png

 

   5.檢查語法錯誤:

        # named-checkzone ZONE_NAME   ZONE_FILE

        # named-checkconf

[root@localhost named]# named-checkconf  檢查配置文件時候,因為鏈接到會一起檢查語法

[root@localhost named]# named-checkzonexuding.win /var/named/xuding.win.zone    檢查區域和區域文件語法

zonexuding.win/IN: loaded serial 2016011001

OK

 

   6.讓服務器重載配置文件和區域數據文件

#rndc  reload 或

#systemctl  reload  named.service

[root@localhost named]# rndc reload  重讀配置文件裝載區域

serverreload successful

wKioL1aSVOKAlMuIAAEnhDEjkRE079.jpg

 

   7.測試主機正向區域配置是否成功

[root@localhost named]# dig -t A www.xuding.win @172.16.49.2  測試本機

wKioL1aSVO3CQoAbAAKwfY1JSOc064.jpg

 

 

 

 

 

六、配置解析一個反向區域

   1. 定義區域

在主配置文件中或主配置文件輔助配置文件中實現;

zone  "ZONE_NAME"  IN  {

type  {master|slave|hint|forward};

file  "ZONE_NAME.zone";

};        

               注意:反向區域的名字,反寫的網段地址.in-addr.arpa :例如49.16.172.in-addr.arpa

 

   2.定義區域解析庫文件(主要記錄為PTR)

示例,區域名稱為49.16.172.in-addr.arpa;

$TTL3600

$ORIGIN  49.16.172.in-addr.arpa.

@       IN      SOA    ns1.xuding.win.  xuding19931202.163.com.  (

2017010801

1H

10M

3D

12H)

IN      NS      ns1.xuding.win.

2     IN      PTR     www.xuding.win.                                        

 

   3.權限及屬組修改:

# chgrp  named  /var/named/172.16.49.zone

# chmod  o=  /var/named/172.16.49.zone

 

   4.檢查語法錯誤:

#named-checkzone  ZONE_NAME   ZONE_FILE

#named-checkconf

 

   5.讓服務器重載配置文件和區域數據文件

#rndc  reload 或

#systemctl  reload  named.service

Nicolo:http://xuding.blog.51cto.com/4890434/1733319

原創文章,作者:Nicolo,如若轉載,請注明出處:http://www.www58058.com/15733

(0)
NicoloNicolo
上一篇 2016-04-30
下一篇 2016-04-30

相關推薦

  • grep及正則表達式應用

    grep:文本過濾(模式:pattern)工具 grep家族介紹: grep:標準grep命令,支持標準的正則表達式  BRE  egrep:擴展的grep命令,支持擴展的正則表達式  ERE fgrep:快速的grep命令,不支持正則表達式 grep作用: 文本搜索工具,根據用戶指定的“模式”對目標文本逐行進行匹配檢查;打印匹…

    Linux干貨 2016-07-10
  • 8月3日作業

    文件權限相關的課堂練習: 1)當用戶xiaoming對/testdir 目錄無執行權限時,意味著無法做哪些操作?     用戶小明不能進入/testdir,不能刪除,不能創建。使用ll能看到有哪些文件,但是看不到具體信息 2)當用戶xiaoqiang對/testdir 目錄無讀權限時,意味著無法做哪些操作? 不能查看文…

    Linux干貨 2016-08-07
  • 初識正則表達式

    正則表達式是個什么東東? 正則表達式,又稱正規表示法、常規表示法(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE)。在很多文本編輯器里、命令中,通常要使用檢索、替換、放行和拒絕那些符合某個模式的文本。而正則表達式就是用于描述這些規則的工具。換句話說,正則表達式就是記錄文本規則的代碼。  摘自《正則表達式之…

    Linux干貨 2015-03-27
  • 馬哥教育網絡班21期+第五周課程練習

    馬哥教育網絡班21期+第5周課程練習 [TOC] 1. 顯示/boot/grub/grub.conf中至少以一個空白字符開頭的行。 [root@rhel-5 ~]# grep -E '^[[:space:]]+' /boot/grub/grub.conf  root (hd…

    Linux干貨 2016-08-02
  • 22期第十四周課堂練習

    系統的INPUT和OUTPUT默認策略為DROP; [root@localhost ~]# iptables -P INPUT DROP [root@localhost ~]# iptables -P OUTPUT DROP 1、限制本地主機的web服務器在周…

    Linux干貨 2017-03-15
  • 馬哥教育網絡班21期-第七周課程練習

    1、創建一個10G分區,并格式為ext4文件系統; (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl; # mkfs.ext4 -b 2048 -m 2 -L MYDATA /dev/sdb1 # mount&…

    Linux干貨 2016-08-24
欧美性久久久久