一、概述
DNS( Domain Name  System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和 域名转换为IP地址的工作
它是一种协议,把这个协议予以实现软件有很多,比如BIND(Berkeley Internet Name Domain), PowerDNS, dnsmasq
它工作时是监听于两种传输协议上的:TCP:53 UDP:53

二、什么是域名?
首先我们都知道在访问某个网站时输入www.sina.com或其他类似格式的这种东东,其实他后面对应的是一台或者多台服务器,这些服务器的地址都是IP地址来代表的,而IP地址地址又是由一串有规律但是很难让人记住的数字,比较难记。为了使用和记忆方便,也为了便于网络地址的分层管理和分配,INTERNET在1984年采用了域名管理系统( DOMAIN NAME SYSTEM),入网的每台主机都具有类似于下列结构的域名:
主机号.机构名.网络名.最高层域名
所以我们在输入www.sina.com的时候其实是访问的是主机,www.sina.com是主机名,也叫FQDN,FQDN:FQDN:(Fully Qualified Domain Name)完全合格域名
那DNS有又是负责什么的呢?DNS,即名称解析,简单来说就是名称转换,即Name Resolving,其背后有查询过程,既然是查询,肯定需要依赖某些数据库来实现。那既然是名称解析,主要实现什么解析呢?其实现的是从FQDN <--> IP,这是一种双向转换,或者说双向解析,从FQDN可实现到IP的解析,同样,从IP也可以实现到FQDN的解析。但这种双向转换是通过不同的机制实现的。

三、DNS域架构
  域名系统作为一个层次结构和分布式数据库,包含各种类型的数据,包括主机名和域名。DNS数据库中的名称形成一个分层树状结构称为域命名空间。域名包含单个标签分隔点.
   DNS,采用的是C/S架构,使用一种分布式数据库,有严格的上下级关系,上级仅知道其直接下级,而下级只知道根的位置。当我们要解析某个主机名的时候,先从最上级进行查找,然后逐级往下查找,最终返回结果。最上级的是根域,用.表示根域,根域下又有许多TLD。
TLD:Top Level Domain顶级域,顶级域又分为三类:
   组织域:如:.com,.org,.net,.cc等等
   国家域:如:.cn,.hk,.iq,.ir,.jp,.us等等
   反向域:IP-->FQDN(早期仅能实现该解析方式)
       反向:IP-->FQDN
       正向:FQDN-->IP    
Linux网络服务之DNS服务器介绍及配置实例详解_第1张图片


四、DNS的查询过程

DNS的查询过程,按查询方式的不同,分为递归查询和迭代查询。
▲递归查询:只发出一次请求,本地主机向本地域名服务器发出查询请求,如果本地域名服务器能够解析,则返回查询结果,否则,本地域名服务器向根请求查询,如果根知道结果则返回给本地域名服务器结果,否则,就由根在向下移级域名查询结果,这样逐级查询,最终逐级返回结果,最终返回到本地主机。
迭代查询:发出多次请求,本地主机先向本地域名与服务器发出查询请求,如果本地域名服务器能够解析,则返回结果,否则,由本地主机向根查询,同样,如果根能够解析直接返回结果,否则返回负责该域名解析的下一级域名,让本地主机找该域名继续查询,最终,找到结果。

在实际的网络中,一般采用两段式查询过程,即先递归,后迭代。从本地主机到本地域名服务器采用递归查询,而从本地域名服务器到最终结果则采用迭代方式查询。
DNS的解析过程又可分为正向解析和反向解析。
由FQDN到IP是正向解析,而由IP到FQDN属于反向解析。
Linux网络服务之DNS服务器介绍及配置实例详解_第2张图片1、在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。

2、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。

3、如果hosts与本地DNS解析 器缓存都没有相应的网址映射关系,首先会找TCP/ip参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的 域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。

4、如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。

5、如果本地DNS服务器本地区域文 件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务 器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负 责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址 (qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到 www.qq.com主机。

6、如果用的是转发模式,此DNS服 务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地 DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。

五、DNS服务器类型
DNS服务器类型主要分为以下几种:
(1)主DNS服务器(primary name server):它是特定域所有信息的权威性信息源。它从域管理员构造的本地磁盘文件中加载域信息,该文件(区文件)包含着该服务器具有管理权的一部分域结构的最精确信息。主服务器是一种权威性服务器,因为它以绝对的权威去回答对其管辖域的任何查询。
(2)辅助DNS服务器(secondary name server):它可从主服务器中复制一整套域信息。区文件是从主服务器中复制出来的,并作为本地磁盘文件存储在辅助服务器中。这种复制称为"区文件复制"。在辅助域名服务器中有一个所有域信息的完整拷贝,可以有权威地回答对该域的查询。因此,辅助域名服务器也称作权威性服务器。配置辅助域名服务器不需要生成本地区文件,因为可以从主服务器中下载该区文件。
(3)高速缓存服务器(caching-only server):可运行域名服务器软件,但是没有域名数据库软件。它从某个远程服务器取得每次域名服务器查询的结果,一旦取得一个,就将它放在高速缓存中,以后查询相同的信息时就用它予以回答。高速缓存服务器不是权威性服务器,因为它提供的所有信息都是间接信息。对于高速缓存服务器只需要配置一个高速缓存文件,但最常见的配置还包括一个回送文件,这或许是最常见的域名服务器配置
===============================================================================
六、资源记录:

1.资源记录的格式:

数据库中的每一个条目称作一个资源记录(Resource Record,RR)  

NAME  [TTL]  IN(关键字)  RRT(资源记录类型) VALUE

2.资源记录类型:
SOA(Start OF Authority):

起始授权记录(第一条必须是此记录)

格式: NAME     TTL    IN    SOA   FQDN    ADMINISTRATOR_MAILBOX (
                                serial number:序列号,十进制数字,不能超过10位,通常使用日期,例如2014031001
                                refresh time  ;刷新时间,即每隔多久到主服务器检查一次
                                retry time    ;重试时间,应该小于refresh time
                                expire time   ;过期时间
                                nagative answer ttl; 否定答案缓存时间 )
时间单位:M(分钟)、H(小时)、D(天)、W(周),默认为秒
邮箱格式:[email protected] --写--->admin.guomaoqiu.com
name:区域名称,guomaoqiu.com. 通常可以简写为"@"
value: 主DNS服务器的FQDN
如:
    guomaoqiu.com.      500    IN       SOA     ns1.guomaoiu.com.  admin.guomaoiu.com. (
                                    2014030101
                                    1H
                                    5M
                                    1W
                                    1D )

NS(Name Server):NAME-->FQDN :

名称服务器(任何一个NS记录都有一个A记录与其相随,一个区域中可以有多条)  

如:
guomaoqiu.com.       500   IN    NS   ns1.guomaoqiu.com.
  #上面的"guomaoqiu"可以简写为"@"
ns1.guomaoqiu.com.   500   IN    A       172.16.0.1
name:区域名称,通常简写为"@"
value:DNS服务器的FQDN(可以使用相对名称)

A(address):FQDN-->IPv4 :

主机记录(只能定义在正向区域数据库中)

如:
  www     600     IN      A           1.2.3.4
  www     600     IN      A           1.2.3.5
  www     600     IN      A           1.2.3.4
  ftp     600     IN      A           1.2.3.4
name: FQDN(可以使用相对名称)
value: IP
#多个主机对应一种服务,可以达到负载均衡的作用

MX(Mail eXchanger):NAME-->FQDN:

邮件交换器 (只能定义在正向区域中,可以有多个)                      

如:
@     600     IN     MX   10   mail
@     600     IN     MX   20   mail2
name: 区域名称,用于标识smtp服务器
value: 包含优先级和FQDN
#上面"600"代表优先级,取值范围:0-99, 数字越小,级别越高;

CNAME(Canonical NAME):

Alias-->FQDN :别名记录  

如:
ftp     IN      CNAME  www
mail    IN      CNAME  www
name: FQDN
value: FQDN
#用不同的名称标记相同的服务

PTR(pointer):IP-->FQDN

指针记录只能定义在反向区域数据文件中,反向区域名称为逆向网络地址加.in-addr.arpa.后缀组成

name: IP, 逆向的主机地址,例如172.16.100.7的name为7.100,完全格式为7.100.16.172.in-addr.arpa.
value: FQDN


七、区域传送:

前面我们已经知道了DNS服务器的类型,作为辅助DNS服务器那么它就需要到主服务器或者其他的辅助DNS上去请求传输数据的过程就叫做区域传送;它又分为:

完全区域传送:传送区域中的所有数据;AXRF

增量区域传送:传送区域中改变的数据部分;IXFR

演示将在后面进行...

八、区域文件:

正向区域文件:

guomaoqiu.com.          IN      NS      ns.guomaoqiu.com.
ns.guomaoqiu.com.       IN      A       172.16.43.1
~                                              
可以简写为:
@                IN      NS      ns
ns               IN      A       172.16.43.1

反向区域文件:

        IN      NS      ns.guomaoqiu.com.
1       IN      PTR     ns.guomaoqiu.com.


九、bind软件的安装以及各配置文件讲解:

1.安装:

       我们主机上面的DNS服务其实是通过一种软件实现的,如果要想使用这个软件那就需要先安装并且配置它才能使用,下面介绍一下的安装:

1)获得bind软件包:(配置yum源)

#配置yum,我的光盘作为yum仓库:
[root@larry ~]# cd /etc/yum.repos.d/   #先将该目录下的文件都删除或者备份.
[root@larry yum.repos.d]# vim base.repo
[base]
name=centos6.5iso
baseurl=file:///media
enabled=1
gpgcheck=0
[root@larry yum.repos.d]#

2)使用yum工具进行安装:

[root@larry ~]# yum install bind -y
#我这里安装的是9.8版本的.

2.配置文件:

我们安装完这个软件之后会生成如下几个目录:

/etc/named.conf  #这是主配置文件,里面包含有bind进程的工作属性的定义和区域的定义;
/var/named/*     #这个目录下是所有区域数据文件存放的地方。在该目录下包含这样两个文件:
        /var/named/named.localhost
        /var/named/named.loopback  #这两个文件是本地主机名的正反解析文件。
/etc/rc.d/init.d/named #这个是服务,我们可使用如下几个命令来开启、关闭服务等。
{start|stop|restart|status|reload}
bind安装完成后,在修改配置文件及添加区域数据文件时,常使用如下两个命令,对其进行检查。
#named-checkconf:检查配置文件有没有语法错误
#named-checkzone:检查区域文件有没有语法错误



   区域定义配置文件:/etc/named.conf

zone "ZONE NAME" IN {     #定义区域名称,其中IN是关键字
   type [master|slave|hint|forward];   #指定区域类型
file "ZONE_DATA_FILENAME";    #指定区域数据文件保存地文件
 masters { MASTER_IP; };    #指明主服务器地址,该定义只在从服务器上使用
};


我们先来看一下这个文件里面的内容:

options {    #定义全局选项,在所有区域中均有效,如果区域中对某一项有定义,则使用区域中定义的,否则使用此处定义好的;
   listen-on port 53 { 127.0.0.1; };#指定BIND侦听的DNS查询请求的本机IP地址和端口;
   listen-on-v6 port 53 { ::1; };#同上,但只用在IPv6版本中;
   directory       "/var/named";#指定区域配置文件所保存的路径;
   dump-file       "/var/named/data/cache_dump.db"; #当执行rndc dumpdb命令时,DNS服务器存放数据库文件的路径名;
   statistics-file "/var/named/data/named_stats.txt";
   memstatistics-file "/var/named/data/named_mem_stats.txt";
   allow-query     { localhost; }; #指定接受DNS查询请求的客户端;
   recursion yes; #是否允许递归
   dnssec-enable yes;
   dnssec-validation yes;
   dnssec-lookaside auto;
   /* Path to ISC DLV key */
   bindkeys-file "/etc/named.iscdlv.key";
   managed-keys-directory "/var/named/dynamic";
};
logging {                    #指定bind服务的日志参数;
   channel default_debug {   #日志通道,用于指定日志发送目标,default_debug是通道名称;
         file "data/named.run"; #记录的日志保存到指定路径下的的文件中;
         severity dynamic; #指定日志的级别;
        };
};
zone "." IN {  #指定区域配置参数
        type hint;  #根
        file "named.ca"; #指定保存数据文件的路径,这里是相对路径,即相对上边的/var/named
};
include "/etc/named.rfc1912.zones"; #这里使用include指令将该配置文件中其他区域定义在该文件中,
include "/etc/named.root.key";


下面我们通过实例来讲解bind的配置

▲本地DNS服务器配置

加入现在我去注册了一个域名guomaoqiu.com,计划用172.16.43.43这台主机来负责该域的解析,下面是我的规划:

guomaoqiu.com   ----->   网段:172.16.43.0/24

ns1    172.16.43.43    ----->  域名服务器名称及IP

www  172.16.43.41    ----->  www服务及IP

mail   172.16.43.42     ----->  邮件服务及IP

ftp    ----->   别名为www

1)安装bind软件包:

[root@gmq ~]# yum install bind

2)修改主配置文件:(将用不到的项注释掉)

//options {
//      listen-on port 53 { 127.0.0.1; };
//      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     { localhost; };
        recursion yes;
//      dnssec-enable yes;
//      dnssec-validation yes;
//      dnssec-lookaside auto;
        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";
        managed-keys-directory "/var/named/dynamic";
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
zone "." IN {
        type hint;
        file "named.ca";
};
include "/etc/named.rfc1912.zones";
//include "/etc/named.root.key";

3)在/etc/named.rfc1912.zone中创建区域信息:

#不要修改下面这些内容我们紧接着后面添加区域信息就行了.
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 "guomaoqiu.com" IN {
        type master;
        file "guomaoqiu.com.zone"; #区域文件
};

4)我们在/var/named目录下创建区域文件"guomaoqiu.com.zone"

$TTL 600 #宏,表示TTL值为600,全局使用,单位默认为秒
@       IN SOA  ns1.guomaoqiu.com. admin.guomaoqiu.com.  (
                                2014031501      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN      NS      ns1   #域名与第一行相同时可不写,表示直接继承上一行的区域名
        IN      MX 10   mail  #同上,mail还可以写成mail.langdu.com.
ns1     IN      A       172.16.43.43
www     IN      A       172.16.43.41
mail    IN      A       172.16.43.42
ftp     IN      CNAME   www

5)上面的信息填写完整并保存退出后后我们通过需要修改文件的属性并通过工具检查语法:

#修改该区域文件的权限为640
[root@gmq named]# chmod 640 guomaoqiu.com.zone
#修改该区域文件的属主属组
[root@gmq named]# chown root:named guomaoqiu.com.zone
#指定哪个区域中的哪个配置文件
[root@gmq named]# named-checkzone "guomaoqiu.com" /var/named/guomaoqiu.com.zone
zone guomaoqiu.com/IN: loaded serial 2014031501
OK  #检查区域文件已经ok!
[root@gmq named]#

6)启动服务并测试:

[root@gmq named]# service named start
[root@gmq named]# ss -tunl | grep :53
udp    UNCONN     0      0           172.16.43.43:53                    *:*  
udp    UNCONN     0      0              127.0.0.1:53                    *:*  
tcp    LISTEN     0      3           172.16.43.43:53                    *:*  
tcp    LISTEN     0      3              127.0.0.1:53                    *:*
[root@gmq named]# dig -t A www.guomaoqiu.com
#通过dig命令请求解析www.guomaoqiu.com这台主机进行测试
[root@gmq named]# dig -t A  www.guomaoqiu.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -t A www.guomaoqiu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55810
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;www.guomaoqiu.com.     IN  A
;; ANSWER SECTION:
www.guomaoqiu.com.  86400   IN  A   172.16.43.41
;; AUTHORITY SECTION:
guomaoqiu.com.      86400   IN  NS  ns1.guomaoqiu.com.
;; ADDITIONAL SECTION:
ns1.guomaoqiu.com.  86400   IN  A   172.16.43.43
;; Query time: 0 msec
;; SERVER: 172.16.43.43#53(172.16.43.43)
;; WHEN: Sat Mar 15 13:19:53 2014
;; MSG SIZE  rcvd: 85
[root@gmq named]#


   但是如果我们需要如果要反向查询一个172.16.43.0/24这个网段呢?

7)在/etc/named.rfc1912.zones中添加以下内容

[root@gmq named]# vim /etc/named.rfc1912.zones
zone "43.16.172.in-addr.arpa" IN {
        type master;
        file "172.16.43.zone";
};

8)在/var/named目录下创建反向区域文件:

[root@gmq named]# vim /etc/named.rfc1912.zones  
$TTL 86400
@       IN SOA  ns1.guomaoqiu.com. admin.guomaoqiu.com.  (
                                2014031501      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN      NS      ns1.guomaoqiu.com.
43      IN      PTR     ns1.guomaoqiu.com.
41      IN      PTR     www.guomaoqiu.com.
42      IN      PTR     mail.guomaoqiu.com.
#其中@表示直接继承区域名,也可以写成:43.16.172.in-addr.arpa.

9)上面的信息填写完整并保存退出后后我们通过需要修改文件的属性并通过工具检查语法:

#修改该区域文件的权限为640
[root@gmq named]# chmod 640 172.16.43.zone
#修改该区域文件的属主和属组
[root@gmq named]# chown root:named 172.16.43.zone
#指定哪个区域中的哪个配置文件
[root@gmq named]# named-checkzone "43.16.172.in-addr.arpa" /var/named/172.16.43.zone
zone 43.16.172.in-addr.arpa/IN: loaded serial 2014031501
OK  #检查区域文件已经ok!
[root@gmq named]#

10)重新加载服务并测试:

[root@gmq named]# service named reload
[root@gmq named]# dig -x 172.16.43.41
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -x 172.16.43.41
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60227
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;41.43.16.172.in-addr.arpa. IN  PTR
;; ANSWER SECTION:
41.43.16.172.in-addr.arpa. 86400 IN PTR www.guomaoqiu.com.
;; AUTHORITY SECTION:
43.16.172.in-addr.arpa. 86400   IN  NS  ns1.guomaqiu.com.
;; Query time: 0 msec
;; SERVER: 172.16.43.43#53(172.16.43.43)
;; WHEN: Sat Mar 15 13:39:13 2014
;; MSG SIZE  rcvd: 101
[root@gmq named]#

▲主、从DNS服务器配置

假设我们的客户端逐渐的增多,一台服务器已经无法承担,所以现在就需要添加一台作为辅助DNS服务器以分担主DNS服务器的压力;我们接着用上面这个实验场景,添加一台DNS服务器.

辅助服务器名称及地址:ns2    172.16.43.45  


主从:
主:bind版本可以低于从的;
向区域中添加从服务器的关键两步:
在上级获得授权
在区域数据文件中为从服务器添加一条NS记录和对应的A或PTR记录;


1)辅助DNS安装bind软件包同主一样(略)

2)修改/etc/named.conf,与上面的本地服务器一样修改(略)

3)在主DNS服务器上获得授权,在区域数据文件中为从服务器添加一条NS记录和对应的A或PTR记录;

#编辑正向区域文件/var/named/guomaoqiu.com.zone
[root@ns1 ~]# /var/named/guomaoqiu.com.zone
$TTL 600
@       IN SOA  ns1.guomaoqiu.com. admin.guomaoqiu.com.  (
                                2014031501      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN      NS      ns1
        IN      NS      ns2  #从服务器名称
        IN      MX 10   mail
ns1     IN      A       172.16.43.43
ns2     IN      A       172.16.43.45 #从DNS A记录
www     IN      A       172.16.43.41
mail    IN      A       172.16.43.42
ftp     IN      CNAME   www
#编辑反向区域文件/var/named/172.16.43.zone
[root@ns2 ~]# vim /var/named/172.16.43.zone
$TTL 600
@       IN SOA  ns1.guomaoqiu.com. admin.guomaoqiu.com.  (
                                2014031501      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN      NS      ns1.guomaqiu.com.
        IN      NS      ns2.guomaoqiu.com.
43      IN      PTR     ns1.guomaoqiu.com.
45      IN      PTR     ns2.guomaoqiu.com. #从DNS PTR记录
41      IN      PTR     www.guomaoqiu.com.
42      IN      PTR     mail.guomaoqiu.com.

4)在从DNS上配置

[root@ns2 ~]# vim /etc/named.rfc1912.zones
#添加如下内容:
zone "guomaoqiu.com" IN {
        type slave; #指定类型为slave
        masters { 172.16.43.43; }; #指定主DNS的IP
        file "slaves/guomaoqiu.com.zone" #指定传输过来的区域文件存放位置
};
zone "43.16.172.in-addr-arpa" IN {
        type slave; #指定类型为slave
        masters { 172.16.43.43; }; #指定主DNS的IP
        file "slaves/172.16.43.zone"; #指定传输过来的区域文件存放位置
};

5)重载主DNS、启动从DNS

[root@ns1 named]# service named reload
Reloading named:                       [  OK  ]            
[root@ns1 named]#
[root@ns2 ~]# service named start
Starting named:                        [  OK  ]
[root@ns2 ~]#
#我们在从DNS服务器上查看日志
Mar 15 14:28:03 localhost named[2138]: zone 43.16.172.in-addr.arpa/IN: Transfer started. #传送开始
Mar 15 14:28:03 localhost named[2138]: transfer of '43.16.172.in-addr.arpa/IN' from 172.16.43.43#53: connected using 172.16.43.45#58879
Mar 15 14:28:03 localhost named[2138]: zone 43.16.172.in-addr.arpa/IN: transferred serial 2014031501
Mar 15 14:28:03 localhost named[2138]: transfer of '43.16.172.in-addr.arpa/IN' from 172.16.43.43#53: Transfer completed: 1 messages, 7 records, 227 bytes, 0.002 secs (113500 bytes/sec)
Mar 15 14:28:03 localhost named[2138]: zone 43.16.172.in-addr.arpa/IN: sending notifies (serial 2014031501)
Mar 15 14:28:03 localhost named[2138]: zone guomaoqiu.com/IN: refresh: unexpected rcode (REFUSED) from master 172.16.43.43#53 (source 0.0.0.0#0)
Mar 15 14:28:03 localhost named[2138]: zone guomaoqiu.com/IN: Transfer started.
Mar 15 14:28:03 localhost named[2138]: transfer of 'guomaoqiu.com/IN' from 172.16.43.43#53: connected using 172.16.43.45#43562
Mar 15 14:28:03 localhost named[2138]: zone guomaoqiu.com/IN: transferred serial 2014031501
Mar 15 14:28:03 localhost named[2138]: transfer of 'guomaoqiu.com/IN' from 172.16.43.43#53: Transfer completed: 1 messages, 10 records, 252 bytes, 0.001 secs (252000 bytes/sec)
Mar 15 14:28:03 localhost named[2138]: zone guomaoqiu.com/IN: sending notifies (serial 2014031501)
#再检查一下从DNS /var/named/slaves目录下是否同步过来了区域文件
[root@ns2 ~]# ll /var/named/slaves/
total 8
-rw-r--r-- 1 named named 431 Mar 15 14:28 172.16.43.zone
-rw-r--r-- 1 named named 459 Mar 15 14:28 guomaoqiu.com.zone
[root@ns2 ~]#
#已成功同步过来了.

 以上面的实验来看如果我们不想让谁随便同步我主服务器上的区域文件那是可以控制的:

 在主DNS上面的添加控制即可:    

zone "guomaoqiu.com" IN {
        type master;
        file "guomaoqiu.com.zone"; #只允许这个IP的主机同步传送
        allow-transfer { 172.16.43.45; };
};
zone "43.16.172.in-addr.arpa" IN {
        type master;
        file "172.16.43.zone";
        allow-transfer { 172.16.43.45; }; #只允许这个IP的主机同步传送
};
#如果需要对整个区域(此区域及其他区域)进行控制我们可以写到options这个全局配置中,这里只是针对这个一个区域控制


   前面我提到了区域传送的两种模式:
   完全区域传送:传送区域的所有数据, AXFR

   增量区域传送:传送区域中改变的数据部分,IXFR    

   像上面新添加一台DNS之后它上面什么配置都没有,但是把它当作辅助DNS你们主DNS就要为它所有传送区域文件了,此时我们就可以理解为是完全区域传送,主DNS、辅助DNS运行一段时间后我们在主DNS上面做了修改之后再次同步到辅助DNS的文件就可以理解为增量区域传送,因为只是传送了改变的部分.

   加入我们在主DNS上面又做了修改那辅助DNS又会是啥效果呢?


#在主DNS上面添加一条主机记录
[root@ns1 named]# vim guomaoqiu.com.zone  
$TTL 600
@       IN SOA  ns1.guomaoqiu.com. admin.guomaoqiu.com.  (
                                2014031502      ; serial
 #注意这里的序列号,自DNS建立起只要对此文件做过修改我们都要手动的去改变它                         
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN      NS      ns1
        IN      NS      ns2
        IN      MX 10   mail
ns1     IN      A       172.16.43.43
ns2     IN      A       172.16.43.45
www     IN      A       172.16.43.41
mail    IN      A       172.16.43.42
ftp     IN      CNAME   www
movie   IN      A       172.16.43.46   #添加内容
[root@ns1 named]# vim 172.16.43.zone
$TTL 600
@       IN SOA  ns1.guomaoqiu.com. admin.guomaoqiu.com.  (
                                2014031502      ; seria
 #注意这里的序列号,自DNS建立起只要对此文件做过修改我们都要手动的去改变它
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN      NS      ns1.guomaoqiu.com.
        IN      NS      ns2.guomaoqiu.com.
43      IN      PTR     ns1.guomaoqiu.com.
45      IN      PTR     ns2.guomaoqiu.com.
41      IN      PTR     www.guomaoqiu.com.
42      IN      PTR     mail.guomaoqiu.com.
46      IN      PTR     movie.guomaoqiu.com.  #添加内容
#修改完毕后我们从新加载配置文件
[root@ns1 named]# service named reload
Reloading named:                               [  OK  ]
[root@ns1 named]#
#查看从DNS上面的日志可以看出我们已经接到主DNS的通告并且是增量区域传送
Mar 15 15:01:17 localhost named[2138]: zone 43.16.172.in-addr.arpa/IN: transferred serial 2014031502
Mar 15 15:01:17 localhost named[2138]: transfer of '43.16.172.in-addr.arpa/IN' from 172.16.43.43#53: Transfer completed: 1 messages, 9 records, 267 bytes, 0.001 secs (267000 bytes/sec)
Mar 15 15:01:17 localhost named[2138]: zone 43.16.172.in-addr.arpa/IN: sending notifies (serial 2014031502)
Mar 15 15:01:18 localhost named[2138]: client 172.16.43.43#55840: received notify for zone 'guomaoqiu.com'
Mar 15 15:01:18 localhost named[2138]: zone guomaoqiu.com/IN: refresh: unexpected rcode (REFUSED) from master 172.16.43.43#53 (source 0.0.0.0#0)
Mar 15 15:01:18 localhost named[2138]: zone guomaoqiu.com/IN: Transfer started.
Mar 15 15:01:18 localhost named[2138]: transfer of 'guomaoqiu.com/IN' from 172.16.43.43#53: connected using 172.16.43.45#36292
Mar 15 15:01:18 localhost named[2138]: zone guomaoqiu.com/IN: transferred serial 2014031502
Mar 15 15:01:18 localhost named[2138]: transfer of 'guomaoqiu.com/IN' from 172.16.43.43#53: Transfer completed: 1 messages, 11 records, 274 bytes, 0.003 secs (91333 bytes/sec)
Mar 15 15:01:18 localhost named[2138]: zone guomaoqiu.com/IN: sending notifies (serial 2014031502)
#在从DNS上面再次查看添加的那条主机记录是否也一起传送过来了
[root@ns2 slaves]# cat guomaoqiu.com.zone 172.16.43.zone
$ORIGIN .
$TTL 86400  ; 1 day
guomaoqiu.com       IN SOA  ns1.guomaoqiu.com. admin.guomaoqiu.com. (
2014031502 ; serial
86400      ; refresh (1 day)
3600       ; retry (1 hour)
604800     ; expire (1 week)
10800      ; minimum (3 hours)
)
NS  ns1.guomaoqiu.com.
NS  ns2.guomaoqiu.com.
MX  10 mail.guomaoqiu.com.
$ORIGIN guomaoqiu.com.
ftpCNAME   www
mail            A   172.16.43.42
movie           A   172.16.43.46
ns1         A   172.16.43.43
ns2         A   172.16.43.45
www         A   172.16.43.41
$ORIGIN .
$TTL 86400  ; 1 day
43.16.172.in-addr.arpa  IN SOA  ns1.guomaoqiu.com. admin.guomaoqiu.com. (
2014031502 ; serial
86400      ; refresh (1 day)
3600       ; retry (1 hour)
604800     ; expire (1 week)
10800      ; minimum (3 hours)
)
NS  ns1.guomaoqiu.com.
NS  ns2.guomaoqiu.com.
$ORIGIN 43.16.172.in-addr.arpa.
41          PTR www.guomaoqiu.com.
42          PTR mail.guomaoqiu.com.
43          PTR ns1.guomaoqiu.com.
45          PTR ns2.guomaoqiu.com.
46          PTR movie.guomaoqiu.com.
[root@ns2 slaves]#


基本命令使

dig -t RT(资源记录类型) NAME [#IP]    #当记录类型不同时,其后所跟的名称也不同
dig -t NS ZONE_NAME     #通过区域名查询
dig -x IP:根据IP查找FQDN   
    #在使用该命令时,系统会返回给我们很多信息,我们主要看ANSWER SECTION这个选项的信息,这才是我们想要的答案,其他选项不做介绍
dig +norecurse -t A FQDN @HOST     #通过host主机不递归查询该FQDN,默认情况使用递归查询
dig +trace -t A FQDN @HOST         #通过host主机追踪查询该FQDN的查询过程
host -t RT NAME:查询名称的解析结果
    如:# host -t RT www.mageedu.com     
nslookup      #交互式查询界面,与windows下的该命令类似 
nslookup>
    server IP
    set q=RT
    set q=A      
    NAME


▲子域授权:

       假如,我们guomaoqiu.com这个域内的规模逐渐的壮大起来,成立了多个部门,而每个部门内都有多台服务器我们使用以一台DNS管理,那么这台DNS服务器压力就会很大,由此我们就将部分权利下放给每个部门的DNS服务器,由它们来管理自己区域内的名称解析.

这里我创建了一子域tech.guomaoqiu.com

这个域内有它自己的主机,例如:

dns.tech.maoqiu.com   172.16.43.50   -----> 该域内的名称服务器及IP

www.tech.maoqiu.com 172.16.43.51   -----> 该域内的www服务及IP

mail.tech.maoqiu.com 172.16.43.52   -----> 该域内的mail服务及IP

ftp   -----> 该域内的www服务别名

1)父域DNS服务器还是使用我们之前的配置(过程略)

2)配置子域

   修改主配置文件,注释掉不用的项(略)    

#修改、添加区域文件信息
[root@ziyu ~]# vim /etc/named.rfc1912.zones
zone "tech.guomaoqiu.com" IN {
        type master;
        file "tech.guomaoqiu.com.zone";
};
zone "43.43.172.in-addr.arpa" IN {
        type master;
        file "43.43.172.tech.zone"
};
#添加区域文件
[root@ziyu named]# vim tech.guomaoqiu.com.zone
$TTL 6400
@       IN SOA  dns.tech.guomaoqiu.com. admin.tech.guomaoqiu.com.  (
                                2014031501      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN      NS      dns
        IN      MX 10   mail
dns     IN      A       172.16.43.50
www     IN      A       172.16.43.51
mail    IN      A       172.16.43.42
ftp     IN      CNAME   www

3)在父域的配置文件中添加如下项:
授权的子区域名称
子区域的名称服务器
子区域的名称服务器的IP地址

#在此我们只做子域的正向授权
[root@fuyu ~]# vim /var/named/guomaoqiu.com.zone
$TTL 600
@       IN SOA  ns1.guomaoqiu.com. admin.guomaoqiu.com.  (
                                2014031503      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
         IN      NS      ns1
         IN      NS      ns2
         IN      MX 10   mail
ns1      IN      A       172.16.43.43
ns2      IN      A       172.16.43.45
www      IN      A       172.16.43.41
mail     IN      A       172.16.43.42
ftp      IN      CNAME   www
movie    IN      A       172.16.43.46
tech     IN      NS      dns.tech     #指定的子域服务名称
dns.tech IN      A       172.16.43.50 #相对应的A记录
#检查语法并重新加载...

4)测试:  

[root@fuyu ~]# dig -t A www.tech.guomaoqiu.com @172.16.43.43
#解析在父域上子域中的主机结果成功.


区域转发

 就目前的配置从子域上面直接解析是无法解析的,因为子域不负责guomaoqiu.com这个域,它直接找的就是根,而这里只是实验环境,根也不可能知道,所以解析失败。


 我们可将对于这个区域来讲我们直接交给父域来解析就行了,于是我们就涉及到了区域的转发功能,

明确定义一个区域不让它去找根,我们明确的告诉它去找我们指定的DNS服务器。  


配置区域转发:转发域      

#解析某本机不负责的区域内的名称时不转发给根,而是转给指定的主机;
zone "ZONE NAME" IN {
      type forward;
      forwarders { DNS_SERVER; };
      forward only|first;#only:
};

配置转发的方式:          

#转发非本机负责解析的所有区域:
options {
    forward only|first;
    forwarders { IP; };
};
#转发某特定区域:
zone "特定区域" IN {
    type forward;
    forwarders { IP; }
    forward only|first;
};

允许使用转发的前提:本机要在对方的允许的递归主机列表中


   紧接着上面的那个实验,我配置转发:

#在子域中定义
[root@ziyu named]# vim /etc/named.rfc1912.zones
zone "gumaoqiu.com" IN {
        type forward; #指定类型
        forwarders { 172.16.43.43; 172.16.43.45; }; #指定转发的DNS的服务器我们上面实验中的那两台
};

  经过我的修改,现在子域也能够解析父域.


常用的选项:

安全控制选项:
       allow-transfer {  };
           通常都需要启用;
       allow-query {  };
           此项通常仅用于服务器是缓存名称服务器时,只开放查询功能给本地客户端;
       allow-recursion {  };
           定义递归白名单;
       allow-update { none; };
           定义允许动态更新区域数据文件的主机白名单


ACL: BIND支持使用访问控制列表
       acl ACL_NAME {
           172.16.0.0/16;
           192.168.0.0/24
           127.0.0.0/8;
       };
访问控制列表只有定义后才能使用;通常acl要定义在named.conf的最上方;

BIND有四个内置的acl:
   any: 任何主机
   none: 无一主机  

   local: 本机
   localnet: 本机的所在的网络;



▲泛域名解析

   经常上网的人可能会遇到这样的情况,我在输入某个网址时,不小心输错了一个字符,但依然有结果返回,比如:我不小心想输入baidu的网址,结果写成wwww.baidu.com,但我依然可以打开百度首页,这是为什么呢?这里我们引入另一个概念,那就是泛域名解析

要实现泛域名解析,只需要在区域文件中添加一行信息即可实现泛域名解析。比如,当用户输入的信息错误时,我统统指向我的www服务器。则可在区域文件guomaoqiu.com.zone中添加如下一行信息:

[root@fuyu named]# vim guomaoqiu.com.zone
$TTL 86400
@   IN SOA  ns1.guomaoqiu.com. admin.guomaoqiu.com.  (
                2014031503  ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
    IN  NS  ns1
    IN  NS  ns2
    IN  MX 10   mail
ns1 IN  A   172.16.43.43
ns2 IN  A   172.16.43.45
www IN  A   172.16.43.41
mail    IN  A   172.16.43.42
ftp IN  CNAME   www
movie   IN  A   172.16.43.46
tech    IN  NS  dns.tech.guomaoqiu.com.
dns.tech IN     A   172.16.43.50
*.guomaoqiu.com. IN A   172.16.43.41  #添加此行内容,就可以实现泛域名解析了
[root@fuyu named]#

   修改完成之后我们检测语法,最后测试:  

[root@fuyu named]# dig -t A aabbcc.guomaoqiu.com @172.16.43.43
#区域文件中没有aabbcc,使用本主机查询看能否实现泛域名解析

   通过测试执行结果,能够实现泛域名解析.  




注:以上实验中未涉及到rndc和压力测试的一些应用,有兴趣的请自行上网查看.