原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://linuxu.blog.51cto.com/9471357/1596965                                  

    我们通过浏览器访问互联网需要输入网址,而这个网址是我们比较容易记忆的,互联网上的服务器却并不能识别这一串有意义的地址,互联网之间的通信是靠ip地址来实现的,ip地址是数字组成的,对于我们日常访问都需要输入一串数字,这是一件很痛苦的事情,所以才有了上面说的有意义的网址,那么网址是如何转换成IP地址的呢?这就是DNS服务器的作用了。

DNS全称是Domain Name System域名系统,那么域名又是什么呢?域名就是我们容易记忆的的一串字符,如果想拥有自己的域名则需要向域名代理商进行注册,代理商会收取一定的费用,一般代理商都有免费的DNS服务器,我们只需要将申请到的域名解析到我们服务器的外网IP上,那么DNS就是能够将我们易于记忆的域名解析为计算机识别的IP地址,别人访问我们的域名就能够从服务器读取网页了,。

域的分类:

    .:根域,所有的域名均属于根域,而域名解析也是从根域服务器开始的,全球共有13台根域服务器。

    顶级域:最初全球一共有7大顶级域名.com.gov.org.mil.edu.netint,随着互联网的发展,现在顶级域也很多了,像.cn等国家域,.hk城市域等

    二级域:个人或者组织可以注册使用,我们注册的就是二级域,像stu30.com

    FQDN:全称是Full QualifiedDomain Name,完全授权域名,像www.stu30.com,这才是我们访问互联网需要的输入的网址。

DNS解析过程:

    (1)客户机发出请求解析域名www.stu30.com的报文。

    (2)本地的域名服务器收到请求后,查询本地缓存,假设没有该纪录,则本地域名服务器ns.stu30.com则向根域名服务器NS.INTER.NET发出请求解析域名www.stu30.com

    (3)根域名服务器NS.INTER.NET收到请求后查询本地记录得到如下结果stu30.com NS ns.stu30.com(表示stu30.com域中的域名服务器为:ns.stu30.com),同时给出ns.stu30.com的地址,并将结果返回给域名服务器ns.stu30.com

    (4)域名服务器ns.stu30.com收到回应后,再发出请求解析域名www.stu30.com的报文。

    (5)域名服务器ns.stu30.com收到请求后,开始查询本地的记录,找到如下一条记录www.stu30.com  A  172.16.30.1(表示stu30.com域中域名服务器ns.stu30.comIP地址为:172.16.30.1),并将结果返回给客户本地域名服务器dns.stu30.com

    (6)客户本地域名服务器将返回的结果保存到本地缓存,同时将结果返回给客户机。这样就完成了一次域名解析过程。

上面介绍了DNS解析域名的过程,其中包含了两种查询方式,递归查询和迭代查询。

递归查询:仅发出一次请求,要求对方回复最终结果,像上面的第5步,我们需要www.stu30.com的解析结果,得到的就是我们所需要的结果

迭代查询:对方响应的可能是个参考答案,像第3步,我们需要www.stu30.com的解析结果但是返回给我们的确实负责这个域的dns服务器的IP只是告诉我们,在那台服务器上有我们所需要的结果,并不是最终的结果。

上面的解析过程出现了NS这个字串,这是DNS解析的资源类型中的一种,下面就来介绍下DNS解析的资源类型。

标准的资源记录具有其基本格式:

  [name]   [ttl]   IN  type  rdata

  name:名称字段,此字段是资源记录引用的域对象名,可以是一台单独的主机也可以是整个域。字段值:"."是根域,@是默认域,即当前域,

  ttl:生存时间字段,它以秒为单位定义该资源记录中的信息存放在DNS缓存中的时间长度。通常此字段值为空,表示采用SOA记录中的最小TTL值(即1小时),可是在最前面提前赋值,后面就可以省略。

  IN:此字段用于将当前湖泊记录标识为一个INTERNET的DNS资源记录。

  TYPE:类型字段,用于标识当前资源记录的类型。

资源记录类型:

SOA:用于一个区域的开始,SOA记录后的所有信息均是用于控制这个区域的,每个区域数据库文件都必须包谷一个SOA记录,并且必须是其中的第一个资源记录,用以标识DNS服务器管理的起始位置,SOA说明能解析这个区域的dns服务器中哪个是主服务器。

NS :NS记录,用于标识区域的DNS服务器,即是说负责此DNS区域的权威名称服务器,用哪一台DNS服务器来解析该区域。一个区域有可能有多条ns记录,例如ns.stu30.com有可能有一个主服务器和多个辅助服务器。

MX (mail exchange):邮件交换器记录,用于告知邮件服务器进程将邮件发送到指定的另一台邮件服务器(该服务器知道如何将邮件传送到最终目的地)。

 A:(host),即是A记录,也称为主机记录,是DNS名称到IP地址的映射,用于正向解析。

  CNAME:CNAME记录,也是别名记录,用于定义A记录的别名。

  PTR:是IP地址到DNS名称的映射,用于反向解析。

  radata: 数据字段用于指定与当前资源记录有关的数据,数据字段的内容取决于类型字段。

  资源记录类型

  一句话

  起始授权结构(SOA)

  指出当前区域内谁是   主DNS服务器

  主机(A)

  将域名FQND映射到IP  正向解析

  别名(CNAME)

  将A记录指向的域名 指向 另外一个域名

  邮件交换器(MX)

  指出当前区域内 SMTP邮件服务器IP

  名称服务器(NS)

  指出当前区域内有几个DNS服务器在提供服务

  反向解析(PRT)

  将IP解析为域名FQND

正向解析资源记录

CentOS6.6下bind搭建DNS服务器 _dns

反向解析资源记录

CentOS6.6下bind搭建DNS服务器 _centos_02Linux平台下搭建DNS服务器需要用到Bind这个程序,直接yuminstall –y bind 就可以安装了;

         配置文件:

                   主配置文件/etc/named.conf

                   区域配置文件:/etc/named.rfc1912.zones

                   区域文件:/var/named/ZONE_NAME.zone

DNS主服务器服务器搭建:

1,  主配置文件修改://为注释

options {
listen-on
port 53 { 127.0.0.1; 172.16.30.1; };    //DNS服务监听的IP以及端口
                     
        listen-on-v6 port 53 { ::1; };    //是否开启IPV6支持
                     
        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     { any; };    //允许谁发起请求any表示允许所有人,可以是IP地址,以 ; 分隔,且与大括号之间有空格
                     
        recursion yes;        //是否允许递归查询
        dnssec-enable no;
        dnssec-validation no;
        dnssec-lookaside no;
        /* Path to ISC DLV key
        bindkeys-file
"/etc/named.iscdlv.key";
        managed-keys-directory
"/var/named/dynamic";*/
};

区域配置文件修改:

zone "stu30.com" IN {
                   
       type master;     //master表示这是stu30.com这个域的主DNS服务器,slave表示从服务器
                    
       file "stu30.com.zone";    //区域文件位置,默认为/var/named/目录下
};
zone
"30.16.172.in-addr.arpa" IN {
       type master;
       file "172.16.30.zone";
};

区域文件生成

正向解析区域文件:

$TTL 600
$ORIGIN
stu30.com.
@               IN      SOA    
ns.stu30.com. admin.stu30.com. (
                                2014122201
                                3H
                                5M
                                3D
                                2H )
                IN      NS     
ns.stu30.com.
                IN      MX 10  
mail.stu30.com.
ns              IN      A      
172.16.30.1
mail            IN      A      
172.16.30.1
www1            IN      A      
172.16.30.1
pop3            IN      CNAME  
mail

反向解析区域文件:

$TTL 600
$ORIGIN
30.16.172.in-addr.arpa.
@               IN      SOA    
ns.stu30.com. admin.stu30.com. (
                                2014122201
                                3H
                                5M
                                3D
                                2H )
                IN      NS     
ns.stu30.com.
                IN      MX 10  
mail.stu30.com.
1                                   IN              PTR           ns.su30.com.
1               IN      PTR    
mail.stu30.com.
1               IN      PTR    
www.stu30.com.
pop3.stu30.com.
IN      CNAME   mail.stu30.com.

开启DNS服务

Service named start

         现在一个简单的DNS服务器已经搭建好了,下面开始测试,使用dig命令

用法:dig [-ttype] [-x IP] name @SERVER [queryoptions]

[-t type]:资源记录类型

query options:

              +[no]trace:是否追踪查询

              +[no]recurse:是否递归查询

我们可以使用dig –t axfrstu30.com @172.16.30.1 来查询所有的DNS记录,先来个正向解析的

[root@www ~]#
dig -t axfr stu30.com @172.16.30.1
  
;
<<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.1 <<>> -t
axfr stu30.com @172.16.30.1
;; global
options: +cmd
stu30.com.                600  IN     SOA  ns.stu30.com. admin.stu30.com. 2014122203
10800 300 259200 7200
stu30.com.                600  IN     NS    ns.stu30.com.
stu30.com.                600  IN     NS    ns1.stu30.com.
stu30.com.                600  IN     MX   10 mail.stu30.com.
mail.stu30.com.                600  IN     A       172.16.30.1
ns.stu30.com.          600  IN     A       172.16.30.1
ns1.stu30.com.                 600  IN     A       172.16.30.2
pop3.stu30.com.               600  IN     CNAME    mail.stu30.com.
www1.stu30.com.            600  IN     A       172.16.30.1
stu30.com.                600  IN     SOA  ns.stu30.com. admin.stu30.com. 2014122203
10800 300 259200 7200
;; Query time: 4
msec
;; SERVER:
172.16.30.1#53(172.16.30.1)
;; WHEN: Wed Dec
24 15:53:57 2014
;; XFR size: 10
records (messages 1, bytes 249)

再来个反向解析

[root@www
~]# dig -x 172.16.30.1 @172.16.30.1
  
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.1
<<>> -x 172.16.30.1 @172.16.30.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY,
status: NOERROR, id: 26830
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3,
AUTHORITY: 2, ADDITIONAL: 2
  
;; QUESTION SECTION:
;1.30.16.172.in-addr.arpa.      IN     PTR
  
;; ANSWER SECTION:
1.30.16.172.in-addr.arpa. 600         IN     PTR  mail.stu30.com.
1.30.16.172.in-addr.arpa. 600         IN     PTR  ns.stu30.com.
1.30.16.172.in-addr.arpa. 600         IN     PTR  www1.stu30.com.
  
;; AUTHORITY SECTION:
30.16.172.in-addr.arpa.  600  IN     NS    ns1.stu30.com.
30.16.172.in-addr.arpa.  600  IN     NS    ns.stu30.com.
  
;; ADDITIONAL SECTION:
ns.stu30.com.          600  IN     A       172.16.30.1
ns1.stu30.com.                 600  IN     A       172.16.30.2
  
;; Query time: 2 msec
;; SERVER: 172.16.30.1#53(172.16.30.1)
;; WHEN: Wed Dec 24 15:54:32 2014
;; MSG SIZE 
rcvd: 170

DNS服务器搭建:

   DNS服务器只需要配置好主配置文件和区域配置文件就可以了,主配置文件和主DNS服务器的配置一样,区域配置文件稍微有些区别,不用生成区域资源文件,因为主服务器序列号发生变化后,会发送通知给从服务器,从服务器会主动域主服务器进行同步区域资源文件。

从服务器区域配置文件修改:        

zone
"stu30.com" IN {
       type slave;        //定义为从服务器   
         masters { 172.16.30.1; };  //区域资源文件目录      
         file "slaves/stu30.com.zone";        //区域资源文件目录
};
zone "30.16.172.in-addr.arpa" IN {       
         type slave;    
         masters { 172.14.30.1; };     
         file "slaves/172.16.30.zone";
};

需要在DNS服务器的正向区域资源文件中将加上从服务器的NSA记录以及反向区域资源文件中加上NSPTR记录。

配置好之后之后我们只要修改主服务器的区域资源文件的序列号,并执行service named reload就能将文件同步到从服务器上了; 

日志中显示已经发送同步通知了,再去从服务器的/var/named/slaves/目录下就会多出两个区域资源文件,序列号正是我们修改的。       

Dec 24 15:56:28 www named[16101]: reloading configuration succeeded
Dec 24 15:56:28 www named[16101]: reloading zones succeeded
Dec 24 15:56:28 www named[16101]: 172.16.30.zone:16: ignoring
out-of-zone data (pop3.stu30.com)
Dec 24 15:56:28 www named[16101]: zone 30.16.172.in-addr.arpa/IN:
loaded serial 2014122207
Dec 24 15:56:28 www named[16101]: zone 30.16.172.in-addr.arpa/IN:
sending notifies (serial 2014122207)
Dec 24 15:56:28 www named[16101]: zone stu30.com/IN: loaded serial
2014122207
Dec 24 15:56:28 www named[16101]: zone stu30.com/IN: sending
notifies (serial 2014122207)
Dec 24 15:56:28 www named[16101]: client 172.16.30.2#47422: transfer
of '30.16.172.in-addr.arpa/IN': AXFR-style IXFR started
Dec 24 15:56:28 www named[16101]: client 172.16.30.2#47422: transfer
of '30.16.172.in-addr.arpa/IN': AXFR-style IXFR ended
Dec 24 15:56:29 www named[16101]: client 172.16.30.2#47789: transfer
of 'stu30.com/IN': AXFR-style IXFR started
Dec 24 15:56:29 www named[16101]: client 172.16.30.2#47789: transfer
of 'stu30.com/IN': AXFR-style IXFR ended

查询测试:

[root@www slaves]# dig -t axfr stu30.com @172.16.30.2
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6
<<>> -t axfr stu30.com @172.16.30.2
;; global options: +cmd
stu30.com.                600  IN     SOA  ns.stu30.com. admin.stu30.com. 2014122203
10800 300 259200 7200
stu30.com.                600  IN     NS    ns.stu30.com.
stu30.com.                600  IN     NS    ns1.stu30.com.
stu30.com.                600  IN     MX   10 mail.stu30.com.
mail.stu30.com.                600  IN     A       172.16.30.1
ns.stu30.com.          600  IN     A       172.16.30.1
ns1.stu30.com.                 600  IN     A       172.16.30.2
pop3.stu30.com.               600  IN     CNAME    mail.stu30.com.
www1.stu30.com.            600  IN     A       172.16.30.1
stu30.com.                600  IN     SOA  ns.stu30.com. admin.stu30.com. 2014122203
10800 300 259200 7200
;; Query time: 5 msec
;; SERVER: 172.16.30.2#53(172.16.30.2)
;; WHEN: Wed Dec 24 07:40:42 2014
;; XFR size: 10 records (messages 1, bytes 249)

子域授权:

         子域授权就是在原有域下声明子域DNS

         在主DNS服务器中添加子域的dns服务器NSA记录,这样通过父域可以解析到子域,通过子域自己也可以解析到,但是通过子域是无法解析到父域的。

        

$TTL
600
$ORIGIN stu30.com.
@              
                                   IN      SOA     ns.stu30.com. admin.stu30.com. (
                                2014122203
                                3H
                                5M
                                3D
                                2H )
                
                                   IN      NS      ns.stu30.com.
                
                                   IN      NS      ns1.stu30.com.
ops                                IN              NS              ns.ops.stu30.com.  //子域服务器NS记录
                
                                   IN      MX 10   mail.stu30.com.
ns             
                                   IN      A       172.16.30.1
ns1            
                                   IN      A       172.16.30.2
ops                                IN              A                172.16.30.3     //子域服务器A记录
mail           
                                   IN      A        172.16.30.1
www1                               IN     
A       172.16.30.1
pop3                               IN      CNAME  
mail

DNS转发:

         DNS转发可以定义对某一区域的请求执行转发,需要在区域资源配置文件中实现;也可以对凡是不是本服务器所负责的域均执行转发,在主配置文件/etc/named.conf文件中实现。转发方式分为firstonlyfirst:先转发,如果没有响应,则去找根进行迭代查询;only,只转发,若没有响应则一直等待。  

指定区域转发:
zone "stu.com" IN {      
        type forward ;      
        forwarders { 172.16.0.1; };
};
全局转发:
options {
        forward first ;
        forwarders { 172.16.0.1; };
};

DNS视图

   为了使不同地域(联通和电信)的用户都能够获得比较好的用户体验,需要将不同的运营商的IP地址解析到响应的运营商IP上,DNS视图便可实现这个功能。

这里我们以内网和外网为例:

         需要配置区域资源配置文件/etc/named.rfc.1912.zones

acl int {
       172.16.0.0/16;             //定义内网
};
acl out {
       192.168.0.0/24;            //定义外网
};
view INT {
match-clients { int ;};
recursion yes;
zone "." IN {
    type hint;
    file "named.ca";
};
        
zone "stu30.com" IN {
    type master;
    file "stu30.com.int.zone";          //内网区域资源文件
};
};
view OUT {
match-clients { out ;};      
recursion yes;      
zone "." IN {               
    type hint;              
    file "named.ca";
};     
zone "stu30.com" IN {
    type master ;
    file stu30.com.out.zone;   //外网区域资源文件
};
};

测试解析:内网会被解析到172.16.30.2,外网会被解析到172.16.30.5

         客户端172.16.30.1

CentOS6.6下bind搭建DNS服务器 _dns_03

问题总结:

1,  在搭建从服务器时,如何在主服务器的反向资源文件中配置从服务器

2,  开启DNS视图需要将所有的zone文件加到view中,包括根域

本文出自 “LINUXU” 博客,请务必保留此出处http://linuxu.blog.51cto.com/9471357/1596965