DNS服务器搭建从协议到实现详解

一、域名和服务概述

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

          FQDN是指主机名加上全路径,全路径中列出了序列中所有域成员。全域名可以从逻辑上准确地表示出主机在什么地方,也可以说全域名是主机名的一种完全表示形式。从全域名中包含的信息可以看出主机在域名树中的位置。

 

   2.TLDTop Level Domain,顶级域名

       (1)顶级域名:域名由两个或两个以上的词构成,中间由点号分隔开,最右边的那个词

              域名分层设计:倒置树状结构,上级包含下级,全球只有13个根节点

                分布式数据库系统:将一个大的书库分割成多个小的数据库,分布式管理

       (2)分类

                国家和地区顶级域名(countrycode top-level domainsnTLDs):国家都按照ISO3166国家代码分配

                国际顶级域名(generictop-level domainsgTLDs)组织域.com, .net,.org, .gov, .edu, .mil

     [图示]

wKioL1aSVBrjo-p4AAGCeidl75s367.jpg

   3.DNSDomain Name System,域名服务(应用层协议)

           因特网上作为域名和IP地址相互映射的一个分布式数据库C/S架构而非IP数串访问。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行53/udp53/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:名称,可以为主机名、FQDNIP,正向解析主机名是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.localhostnamed.loopbackrpm安装后会自动生成,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/udprndc 程序开始监听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.zonesrfc1912:遵循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.178linux.com/15733