前言:随着网站增多,DNS也变成必不可少的一种服务。当然,平时上网页的时候并不会发现DNS的运行,但若出了问题,无法上网页就会成为很烦躁的问题。这次就来介绍一下最基本的bind服务,通过了解bind服务相关文件信息,也能更容易理解域名解析的过程吧。


一、DNS服务器分类

   虽然都是DNS服务器,但有各种的功能实现,导致DNS也分为多种功能服务器。如下分类:


   主DNS服务器:负责域名解析,本身有一套解析库处理本地客户端的DNS解析请求。并且该服务器属于该域中的①权威服务器。

   从DNS服务器:负责域名解析,也存在一套解析库,但解析库中的内容无法自己设定,只能向主DNS服务器申请同步解析库数据

   缓存DNS服务器:本身不负责域名解析,而是从其他域名服务器迭代查询到解析结果,然后发送给请求用户。并将解析结果缓存到本地,以便其他用户请求时,无需再次迭代。

   转发DNS服务器:本身不负责域名解析,而是从其他域名服务器迭代查询到解析结果,然后发送给请求用户。只做转发功能,本身不会将结果缓存到本地。

 

  ①权威服务器:对用户解析请求做权威应答的服务器

      权威应答:查询的域名在本地解析库中,直接从本地解析库取得的结果做出的应答。

      非权威应答:查询的域名不在本解析库中,通过向其他迭代查询或从本地缓存数据取得的解析       结果做出的应答。


  ①同步解析库:从服务器每隔一个周期时间,向主服务器请求解析库同步,通常是查看序列号,辨别是否已更改。

   完全区域同步:AXFR,第一次同步,将全部的解析库信息同步至从服务器。

   增量区域同步:IXFR,以后的同步,仅将修改过的信息进行同步。


     同步模式:主服务器对从服务器的同步机制

        1)等待从服务器周期性的发出同步请求,并作出回应,从而进行同步。

        2)当从服务器一个周期结束后,等待下一时间周期时,主服务器发生变更,则立刻发送一         个通知给从服务器,让从服务器立即进行同步。


从服务器的意义:若主服务器故障,从服务器发出同步请求,但得不到主服务器发回的响应,则会等待一段时间,重新发送同步请求,这段时间会比周期时间要短。直到达到超时时间,从服务器也会停止工作。从而达到冗余的效果,在管理员发现主服务器坏掉之前能尽量保证有一段维护时间。


二、安装主要文件介绍

wKioL1XdgDaSvmDCAAEfSFtiHq4592.jpg

通过命令:rpm -ql bind| less 查询bind安装文件路径


主配置文件:/etc/named.conf,/etc/named.rfc1912.zones两个文件共同组合成了主配置文件。
区域解析库文件:/var/named/zone_name.zone

服务脚本:/etc/rc.d/init.d/named


四、先从/etc/named.conf开始介绍

wKiom1XefceAsCv6AAHiSlcLiKw544.jpg

wKioL1XegITgIL2LAADH5rwZ4yI915.jpg这整段是Bind服务的主要配置信息,定义主从、子域、解析库路径,还有访问控制等功能,非常重要。


options  {
     全局配置段:options只能出现一次,既可定义全局的公共配置,又可定义bind的工作特性。
            }; 

其中——》

·//listen-on port 53 { 127.0.0.1; };       监听在某个地址上,此处为本地回环地址,若要启用,需指定一个能上网的IP,//等同于#的注释功能,此处是注释掉了,表示所有IP都能访问。
·//listen-on-v6 port 53 { ::1;};           IPv6的字段,不用的话可注释掉。
·directory          "/var/named"          标明工作目录,zone中的文件都是在该目录下工作的。
·dump-file        "/var/named/data/cache_dump.db";       然并软的条目,无需了解
·statistics-file      "/var/named/data/named_stats.txt"; 然并软的条目,无需了解            ·memstatiscs-file  "/var/named/data/named_mem_stats.txt";  然并软的条目,无需了解          ·//allow-query      { localhost; };  允许谁来查询,此处是一个访问控制法则,若不用,可注释掉
·recursion yes;   是否允许递归查询,作用于用户请求DNS服务器的,这段一定要有,不然用户无法正常查询。
·//dnssec-enable  yes;这条及以下的条目都是做完整性验证的安全机制,但配置麻烦,若不用,都可注释掉。


 logging {

    日志配置段:定义日志文件所在路径,该段无需修改,就不介绍了。只需要知道/var/named/data/named.run是日志路径即可。以后是查错的一个重要手段。

          };


zone   "ZONE_NAME"  IN  {        

     区域配置段:可出现多次,ZONE_NAME是定义本机可解析的的区域

              };

其中——》

·type  master; 定义该主机区域的类型,如master(主服务器),slave(从服务器),hint(根提示域,所有非本机所负责的区域,用户请求时,发送给根),forward(转发域) ;

·file "zone_name.zone";   定义对应解析库文件存放路径,此处为相对路径,相对的是options中定义的/var/named,也可设置为绝对路径


④include "/etc/named.rfc1912.zones";  named.rfc1912.zones同样是定义区域的。include:将该文件包含进来,/etc/named.rfc1912.zones中的内容等于是和named.conf中的接在一起的。

  //include "/etc/named.root.key";     named.root.key是和dnnssec-enable相关的文件,因为用不到,也注释掉了。


注:在named.conf中,每个条目结尾都必须有;分号,不然会报错,新手特别容易踩坑,踩过几次就记住了。


五、解析库资源记录类型介绍

    wKioL1Xe0XnBPRz_AAEffRhW4Xk993.jpg

               如上图,就是一个完整的资源记录类型,从上往下介绍


这整段是Bind服务非常重要的一环,所有的解析记录都在此文件中标记,用户解析请求都会从中查询。


资源记录类型:

格式:name(区域名称)    [ttl](缓存时长,可省略)    IN(固定字符)     RPType(类型)          value(值) 


第一行、TTL:Time to Live缓存时长

 $TTL为设置解析库中全局的缓存时长,后面数字单位为36000(秒)


第二行、$ORIGIN:起点

$ORIGIN为名称简写功能,可将FQDN简写,只填写主机名,后面会自动补全。

例:$ORIGIN pixiu.com.

    ns.pixiu.com.就可简写为ns ,简写之后尾部不能加.点号


第三行、SOA:Start Of Authority起始授权记录

SOA:任何解析库文件中SOA只能有一个,并且第一个记录的类型必须是SOA,其作用是标明主服务器。


·name:区域名称,在解析库文件中定义了@为当前区域的区域名称,所以可使用@代替,@还可用于简写功能,若没有定义@ORIGIN,@会自动读取name.conf配置的zone名称,然后对下面的FQDN自动补全区域名称。

·ttl:若不想使用全局的缓存时长,可设置该条记录为另一个时长,不用的话可省略

·IN:资源记录的固定字符,不可变化

·RPType:资源类型,如SOA、NS、MX、A

·value:主DNS服务器的FQDN,也可以是当前的区域名称


SOA比其他资源记录还有其他参数:

·区域管理邮箱地址:如pixiu.163.com.,此处实际上是pixiu@163.com.,但由于@表示的是区域名称,                     所有只能写成.号

·各种选项:

(             

2015081903      :不超过10位数字的序列号。作用是若解析库文件有变更,修改此序列号,便可告                     知从服务器,记录已修改,需要进行同步

2H                :从服务器到主服务器请求同步的间隔时间周期,H时,M分,D天。

30M               :从服务器接收不到主服务响应,重新发送请求的时间间隔

7D                :从服务器一直接收不到主服务器同步,而停止工作的超时时长

1D)              :否定答案的缓存时长。否定答案就是无法查询到的的域名解析。防止多次访问无                     法访问的域名,占用解析速度


第四行、NS:name server名称服务器

NS:用来标明当前区域的名称服务器

·name:区域名称。若区域名称和上一条一样,可省略不写。
·value:DNS服务器的FQDN
      
第五行、MX:Mail eXchange邮件交换器

MX:用来标明当前区域的邮件服务器

·name:区域名称。若区域名称和上一条一样,可省略不写。
·value:DNS服务器的FQDN

注:MX记录还有优先级属性,低优先级MX会在高优先级MX处于繁忙或故障的情况下启用。
        

第六行、A:Address地址

A:用来标明FQDN与IP地址的对应关系,NS、MX服务器也必须要有A记录。

·name:FQDN
·value:IP

注:①一个FQDN可以对应多个IP,为了达到负载均衡,实现轮询。

    ②一个IP可以对应多个FQDN,为了实现一台主机响应来自多个端口的访问请求。


第七行、CNAME:Canonical NAME正式名称。

CNAME:相当于设置别名记录

·name:FQDN
·value:FQDN

例:X.pixiu.com.   IN     CNAME   file.pixiu.com.

通过访问X.pixiu.com就会被解析为file.pixiu.com,即file.pixiu.com的别名为X.pixiu.com.


第八行、泛域名解析

·name:*,表示通配符,将主机名称匹配
·value:IP

例:上图中添加  *      IN      A     192.168.50.129  记录

用户请求的FQDN无法解析,但区域名称能够匹配到当前区域,则自动解析为指向的IP地址。如:请求423.pixiu.com,就会解析为192.168.50.129


未写入内容:

PTR:PoinTeR指针,即反向解析记录。

·name:逆向的主机IP地址(不包含网络地址)加后缀in-addr.arpa
·value:FQDN

例:129.in-addr.arpa    IN     PTR     ns.pixiu.com.



总结:域名服务BIND的主要文件基本上就是这些,以上都是基本配置的功能,若要完整的使用BIND服务,最好这些内容进行理解。当然本人也是Linux新手,如有描述错误的,麻烦指正,避免带着错误的基础继续往下走。