一、 DNS简介:

DNS(Domain Name System),是互联网的一种很重要的基础服务,DNS服务作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。当在DNS区域传送机制运行在TCP协议,使用端口号53。


二、 DNS查询方式:


DNS共有两种查询方法:


  1. 递归查询


wKioL1WZNTfBh4pYAACeasmvBxo318.jpg


由局部DNS服务器自己负责向其他DNS服务器进行查询,一般是先向该域的根域服务器进行查询,再由根域名服务器一级级向下查询。最后,将得到的查询结果返回结局部DNS服务器,再由局部DNS服务器返回给客户端。


2.迭代查询


wKiom1WZM4Wxd6kqAAC5lMDNk0s041.jpg

当局部DNS服务器自己不能回答客户机的DNS查询请求时,也可以通过迭代查询的方式进行域名解析,如图2所示。局部DNS服务器不是自己向其他DNS服务器进行查询,而是把能解析该域名的其他DNS服务器的IP地址返回给客户端DNS程序,客户端DNS程序再继续向这些DNS服务器发出查询请求,直到得到查询结果为止。



三、常用DNS资源记录类型及示例:


任何解析库文件的第一个记录类型必须是SOA


RRType结构:

Name[ttl] INRRTypevalue



1. SOA记录: 

Start Of Authority

Name: 区域名称, 通常可以简写成@

[ttl]: time to live, 此值可以省略

IN: 是固定的,表示Internet

RRType: 就是Record Resource Type, 可以使A,AAAA,SOA,NS,CNAME等等

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


例如: @INSOAns.magedu.com.admin.magedu.com.(

serial number;解析库的版本号,例如20150703

refresh time;周期性同步时间间隔

retry time;重试的时间间隔

expire time;过期时长, 从服务器放弃解析的时间间隔

nagative answer ttl; 否定答案的统一缓存时长

)


#最后面的. 不能省略,管理员的邮箱地址不能使用@,因为这里@有特殊意义,通常用.来代替

记录如果很长,可以使用()来表示 括号内都是一行的内容

serial number,需要给定一个起始值,以后每一次更改,就会自动增加,window dns会自动生成,linux需要自己指定


2. NS记录:

name server 表明域名解析服务器的记录

name: 区域名称

value: DNS服务器的FQDN


例如: @IN    NS   ns.magedu.com.    


注意:

如果有多台NS服务器,每一个都必须有对应的NS记录,否则不会被识别成dns服务器,RR有变化,也不会notify

对于正向解析来讲,每个NS的FQDN都应该有一个A记录



3. MX记录: 

Mail eXchanger 邮件服务记录

name: 区域名称

value: 邮件服务器的FQDN


例如:

@IN   MX  10mail.magedu.com.

@IN   MX  20mail.magedu.com.


注意:

如果有多台MX服务器,每一个都必须有对应的MX记录,单各MX记录还有优先级属性

对于正向解析文件来讲,每一个邮件服务器的FQDN都应该有一个A记录



4. A记录: 

IPv4 Address

name: FQDN

value: IP


例如:

www.magedu.com.INA 1.1.1.1

www.magedu.com.IN  A 1.1.1.2


pop3.magedu.com.IN  A   1.1.1.3

imap.magedu.com. INA   1.1.1.3


5. AAAA记录: 

IPv6 Address 类似A记录,不详述


6. CNAME记录: 

Canonical Name 别名记录

name:FQDN

value:FQDN


例如:

www.magedu.com. INA    1.1.1.4

web.magedu.com.IN  CNAME www.magedu.com.


7. PTR记录: 

pointer 反向解析记录

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


例如: 172.16.100.7/16, 网络地址是172.16,主机地址,100.7,其name为7.100.in-addr.arpa.


value: FQDN


例如:

7.100.in-addr-arpa.IN  PTR www.magedu.com.


常用的DNS资源记录也就这几种,下面来介绍如何在CentOS6下使用bind软件来实现DNS服务器搭建及配置。



四、CentOS6下DNS服务器搭建及简单配置


在Linux系统中,最常用的DNS服务器软件是bind(Bekerley Internet Name Domain),是由isc.org维护更新的,可以通过rpm -ql bind来查看bind的配置文件及二进制命令。


注意: 这次实验是在内网搭建DNS服务器,并不能对外网提供解析服务,如果需要对外提供DNS服务,还需要到域名注册商去注册域名

绑定我们的DNS服务器才能实现对外DNS服务。


1. bind安装

#yum install -y bind.x86_64


2. 修改bind主配置文件 /etc/named.conf

#vim /etc/named.conf

定义区域:


#此配置文件中,可以用//来标示注释

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相关的内容先不解释,和安全相关
        //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";  //13个根节点都在这个文件中
};
include "/etc/named.rfc1912.zones";  //定义区域内各种记录的zone配置文件
//include "/etc/named.root.key";  //和dnssec相关,先注释掉,下篇博客解释高级应用时候在做详细解释


3. 修改区域定义文件/etc/named.rfc1912.zones

#vim /etc/named.rfc1912.zones

在此文件中,bind默认创建了5个zone,分别是:

zone "localhost.localdomain" 
zone "localhost" IN 
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"
zone "1.0.0.127.in-addr.arpa" 
zone "0.in-addr.arpa"

本地解释,IPv6的本地解析及其反向本地解析区域,我们保持默认即可,在文件最下方继续追加我们需要创建的区域(zone)

追加内容:

zone "mageedu.com" IN {
        type master;
        file "mageedu.com.zone";
};


4. 修改区域解析库文件 /etc/named/mageedu.com.zone

$TTL 3600
@       IN      SOA     ns.mageedu.com. admin.mageedu.com. (
        20150705
        2H
        10M
        7D
        1D)
        IN      NS      ns.mageedu.com.
        IN      MX 10   mail.mageedu.com.
ns.mageedu.com. IN      A       172.16.100.7
mail.mageedu.com.       IN      A       172.16.100.8
www.mageedu.com.        IN      A       172.16.100.9
pop.mageedu.com.        IN      CNAME   mail.mageedu.com.


5. 修改区域解析库文件的权限及属性

#chgrp named /var/named/mageedu.com.zone
#chmod 640 /var/named/mageedu.com.zone


6. 检查配置文件的语法


CentOS6下可以使用:

#service named configtest


由于CentOS7,不在使用Service启动,所以可以使用以下两个命令单独查看:

#named-checkconf 查看主配置文件/etc/named.conf的语法错误 
#named-checkzone 查看区域定义文件/etc/named.rfc1912.zones的语法错误


7. DNS服务器启动

#service named reload #只要是没有改变监听端口,都可以使用reload命令来重新载入配置信息
#rndc reload



至此,一个区域为"mageedu.com"的正向解析就创建好了,可以提供解析服务了。

但是要注意,需要将客户端的/etc/resolv.conf的DNS服务器地址修改成我们提供DNS服务器的IP

#vim /etc/resolv.conf



五、DNS客户端测试工具


bind-utils包提供了三款DNS客户端测试工具:

#rpm -ql bind-utils


/usr/bin/dig

/usr/bin/host

/usr/bin/nslookup


接下来,按个介绍下:


a. 正向解析测试:



1). host -t RRType NAME [SERVER]


host -t A www.mageedu.com 使用本机/etc/resolve.conf的name erver来解析

host -t A www.mageedu.com 172.16.100.7 使用指定的dns服务器来解析

注意: 指定记录,需要特定记录的格式,例如 NS记录,就需要指定一个区域的名字:

host -t NS mageedu.com 172.16.100.7


2). nslookup

nslookup>

server IP:

set type={A|SOA|NS|MX...}

name: 一定要和type对应的名称


3). dig

dig -t TYPE name @server

类型可使用: AXFR

例如:dig -t AXFR mageedu.com @172.16.100.7


测试反向解析不使用-t PTR,而使用-x选项


dig: 查询选项

+trace


+recurese

+norecurese



可以用dig -t NS @a.root-servers.net.来生成 name.ca文件,确保获取到的都是最新的根dns



b. 反向区域测试:


区域名称为逆向网络地址加 .in-addr-arpa.

例如:

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

type master;

file "172.16.100.zone";

};



反向区域解析库文件: /var/named/172.16.100.zone


$TTL 600  #每一个dns条目的缓存秒数

@IN SOA ns.magedu.com. admin.magedu.com.  (

20140801  ; 分好后可以写注释

2H ;

10M

7D

1D)


IN NS ns.mageedu.com.  #这里name没有填写,表示和上一条的name一致


//反向解析无MX记录

7 IN PTR ns.mageedu.com.

8 IN PTR www.mageedu.com.

9 IN PTR mail.mageedu.com.



然后可以使用如下几种方法测试反向解析:

#host -t x 172.16.100.9 172.16.100.7
#dig -t x 172.16.100.7 @172.16.100.7


测试区域

#dig -t AXFR 100.16.172.in-addr.arpa @172.16.100.7


#172.16.100.in-addr.arpa 是反向区域的名字




说明: 

1. 正向解析和反向解析文件中的名称可以仅适用于相对名称,他们均相对当前区域而言


@ IN NS ns

ns IN A 172.16.100.7

mail IN A 172.16.100.8

www IN A 172.16.100.9

pop IN CNAME mail


或者在zone文件里增加变量$ORIGIN指明简写后的部分

 例如:  $ORIGIN mageedu.com


2. 绝对后缀可以使用$ORIGIN来定义

正向

$ORIGIN mageedu.com

反向

$ORIGIN 172.16.100.in-addr-arpa.


下篇博客会介绍bind的高级应用,例如便已安装,区域传送及压力测试等。