1,DNS介绍

  DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。

监听的协议端口:UDP/TCP 53

软件实现:bind

2,DNS数状结构:

如下图:

Linux环境下DNS服务器原理及主服务器简单配置_第1张图片

根域:.         

一级域如下:

组织域:.com, .org, .net, .mil, .edu, .gov, .info, .cc, .me, .tv

国家域:.cn, .us, .uk, .jp, .tw, .hk, .iq, .ir

反向域:.in-addr.arpa

上图中这里以"."开头的表示域名;www/mail/dns表示主机。

FQDN:(Fully Qualified Domain Name)完全合格域名/全称域名,是指主机名加上全路径。自下而上,所以.conan下的主机www的FQDN为:www.conan.org.  (注意最后的 “.”一般会省略)

在上图中假设pc需要访问www.google.com ,pc指向的dns是dns.conan.org,解析流程如下:

1,dns.conan.org 发现用户请求不在自己解析域内的,直接向根DNS服务器请求查询;

2,根DNS负责向下递归,找到.com域内DNS;

3,.com找到.google域内DNS即dns.google.com;

4,dns.google.com解析出www.google.com的ip地址返回给dns.conan.org;

5,dns.conan.org返回IP地址信息给pc客户端。

注意点:

       以上介绍的域是个逻辑的概念,每个域内有自己的DNS服务器,比如如果".com"域下有“.google”这个域,并假设“.google”这个域内的DNS为dns.google.com,那么“.com”域自己的DNS则记录需要到dns.google.com服务器上查询“.google”这个域内的主机。而“.google”域内dns.google.com服务器则需要向".com"域内DNS服务器申请注册。

3,DNS查询方式:

1,递归:请求被DNS服务器接受后,如果请求域名不属于此DNS管辖范围就请求上级DNS服务器依次传递请求,最后将返回的结果发给请求的主机。

此处引用网络图片示意(http://www.178linux.com/archives/2872):

Linux环境下DNS服务器原理及主服务器简单配置_第2张图片

2,迭代:请求被DNS服务器接受后,如果请求域名不属于此DNS管辖范围就返回并通知客户端再去请求上级DNS服务器,依次传递,直至查询到了最后域名所在的DNS服务器。

此处引用网络图片示意(http://www.178linux.com/archives/2872):

Linux环境下DNS服务器原理及主服务器简单配置_第3张图片

注意点:

1,客户端所指向的DNS服务器必须能给本机做递归查询的DNS服务器。

2,全球13组根域,且根不负责具体主机解析,负责向下传递。

3,DNS服务器在接受到不在自己解析域内的请求会直接交给根处理。

4,DNS资源记录:

        资源记录用于标明资源的功能,如每个域所包含的与之相关的资源。例如,每个RR都包括这个域的所属(RR是从哪个域名中得到的),类型(什么样的资源存在于这个RR中),TTL(time to live,存活时间)等等。

SOA:Start Of Authority, 起始授权,

NS:Name Server, 域名服务器

MX:Mail eXchanger: 邮件交换器

A:Address, FQDN-->IP:FQDN解析为IP地址

PTR: PoiTeR, IP --> FQDN:IP地址反向解析为FQDN

AAAA: Address, FQDN --> IPv6

CNAME: Canonical Name,别名记录

5,DNS配置:

       一般情况下,资源记录一般放DNS的数据库文件(区域数据文件,区域自身有名字);数据库文件一般为文本文件,只能包含资源记录或宏定义,且每行一个资源记录 。

资源记录的格式:

name     [ttl](缓存时间)   IN (关键字)   RRtype(资源记录类型)    Value(地址)

实验环境及软件:

CentOS release 6.4 (Final)

bind.x86_64(rpm包)

DNS服务器:192.168.1.105

www服务器:192.168.1.110

mail服务器:192.168.1.115


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

区域数据文件:/var/named/下

1) /etc/named.conf 一些参数解释:

options{  } ;  //定义了全局选项

zone{  };        //定义区域 (每个区域应该有区域文件)

logging{  };     //定义了日志系统

listen-on port 53 { 127.0.0.1; };   //定义了监听的端口和地址,此项若不给,则默认监听eth,lo网卡上的地址和53号端口

directory       "/var/named";    //定义了区域数据文件目录

allow-query     { localhost; };    //定义了允许那些地址访问

recursion yes;   //定义是否允许递归

dnssec-enable yes; #设定BIND是否支持DNSSEC,该技术并不对数据进行加密,它只是验证您所访问的站点地址是否有效。是一种端到端的安全协议

include    //定义了包含此文件下的配置

zone{        下定义的参数意义如下:

type        //  {hint 根|master 主|slave 辅助|fotward 转发}

file          // 定义了区域文件

allow-transfer { 127.0.0.1; }; // 定义区域传送安全控制

};


这里定义了简单配置文件如下( 这里假设域名为conan.com. ):

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";

};


# Use with the following in named.conf, adjusting the allow list as needed:

key "rndc-key" {

algorithm hmac-md5;

secret "Fgdd+n+243u3zj/dSAa5uA==";

};


controls {

inet 127.0.0.1 port 953

allow { 127.0.0.1; } keys { "rndc-key"; };

};

# End of named.conf

logging {

        channel default_debug {

                file "data/named.run";

                severity dynamic;

        };

};


zone "." IN {

type hint;

file "named.ca";

};


//zone "loalhost." IN {

//   type master;

//   file "named.localhost";

//};


//zone "1.0.0.127.in-addr.arpa." IN {

//   type master;

//   file "named.loopback";

//};


zone "conan.com." IN {     

   type master;

   file "conan.com.zone";   

   allow-transfer { 127.0.0.1; };

};

include "/etc/named.rfc1912.zones";

include "/etc/named.root.key";


2) 定义/var/named/conan.com.zone:

1,soa记录    注意:SOA必须是区域数据库文件第一条记录

@      IN       SOA      dns.conan.com.  admin.conan.com.(

                                 20150413     //序列号,十进制数字,不能超过10位,通常使用日期

                                 2H                //刷新时间,即每隔多久到主服务器检查一次

                                 10M              //重试时间,应该小于refresh time

                                 7D                //过期时间

                                 10 )               //否定答案的ttl

@        IN     NS           dns                        //可以有多条,name为区域名,可以简写@,value为FQDN,可以使用相对名称

@        IN     MX 10      mail                       //可以有多条,name用于标示smtp服务器,value包含优先级和FQDN,越低优先级越高

dns      IN     A             192.168.1.105         //name为FQDN,name为IP地址

mail     IN     A             192.168.1.110

www      IN     A            192.168.1.115

ftp      IN     CNAME     www                     //name和value都为FQDN

pop      IN     CNAME     mail

 

注意:区域名称在主配置文件下定义,需要修改新建的区域文件的属组和权限,并用“service named configtest”命令测试成功后,启动named服务。


查看监听端口:

[root@Conan_ ~]# netstat -tuln | grep 53

tcp        0      0 192.168.1.105:53            0.0.0.0:*                LISTEN      

tcp        0      0 127.0.0.1:53                0.0.0.0:*                   LISTEN      

tcp        0      0 127.0.0.1:953               0.0.0.0:*                   LISTEN      

udp        0      0 192.168.1.105:53            0.0.0.0:*                               

udp        0      0 127.0.0.1:53                0.0.0.0:*                               


用测试工具dig测试:

[root@Conan_ ~]# dig -t A www.conan.com @192.168.1.105    (解析A记录,主机名为www.conan.com,通过192.168.1.105服务器)

Linux环境下DNS服务器原理及主服务器简单配置_第4张图片

[root@Conan_ ~]# dig -t MX conan.com @192.168.1.105  (解析MX记录,区域名为conan.com,通过192.168.1.105服务器)

Linux环境下DNS服务器原理及主服务器简单配置_第5张图片

[root@Conan_ ~]# dig -t A ftp.conan.com @192.168.1.105 (解析A记录,主机名为ftp.conan.com,通过192.168.1.105服务器)

明确说明了 ftp.conan.com 是别名,真正的服务器应该是www.conan.com,对应的ip地址为192.168.1.115

Linux环境下DNS服务器原理及主服务器简单配置_第6张图片


6,DNS反向解析配置:

1) /etc/named.conf 下新增zone:


zone "1.168.192.in-addr.arpa" IN {

     type master;

     file "arpa.conan.zone";

};

2)新建 "arpa.conan.zone"文件

需要注意的是:

1,反向解析区域数据库文件:区域名称以逆向的网络地址,并以.in-addr.arpa为后缀;

2,第一条必须SOA;

3,应该具有NS记录,不能出现MX和A记录;

4,较常见的为PTR记录 :name为逆向的主机地址,FQDN必须要写全。

示列:

$TTL 600

@      IN       SOA       dns.conan.com.  admin.conan.com.(

                                 20150413

                                 2H

                                 10M

                                 7D

                                 10

                                 )

@        IN     NS         dns.conan.com.      #注意value的FQDN必须写全

105      IN     PTR        dns.conan.com.

110      IN     PTR        mail.conan.com.

115      IN     PTR        www.conan.com.


重启后测试:

[root@Conan_ ~]# dig -x 192.168.1.110 @192.168.1.105

Linux环境下DNS服务器原理及主服务器简单配置_第7张图片测试成功。


补充测试工具nslookup用法:

nslookup>

    server DNS_SERVER_IP

    set q=TYPE

    {name}


示意图例:

[root@Conan_ ~]# nslookup 

> server 192.168.1.105                             //设置解析dns地址

Default server: 192.168.1.105

Address: 192.168.1.105#53

> set q=A                                                 //设置解析资源类型

> www.conan.com                                      //解析的主机名

Server: 192.168.1.105

Address: 192.168.1.105#53


Name: www.conan.com

Address: 192.168.1.115                             //解析的IP结果


[root@Conan_ ~]# nslookup 

> server 192.168.1.105

Default server: 192.168.1.105

Address: 192.168.1.105#53

> set q=NS

> conan.com                                                         //解析的区域名

Server: 192.168.1.105

Address: 192.168.1.105#53

 

conan.com nameserver = dns.conan.com             //解析的区域DNS结果