1.DNS 概述

   DNS是一个层次化的分布式数据库,其全称为域名系统(Domain Name System),它存储用于互联网主机名与IP地址相互映射的信息,及其它互联网所用到的数据。DNS系统是由柏克大学发展的BIND软件(Berkeley Internet Name Domain)所提供。现目前的BIND的为9.x,现网上大多数都简称叫BIND9;BIND9 软件分发包括了一个名字服务器,named,和量和解析库,liblwres和libbind。如果想了解更多或下载更高的版本,可到此站点去查询与下载:http://www.isc.org/software/bind

BIND与DNS区别:DNS是一种因特网的通信协议名称,BIND这是提供这个DNS服务的软件;在TCP/IP网络中有非常重要的地位,能够提供域名与IP地址的解析服务。


2. DNS工作原理

域名系统DNS是类似于一个树状数据结构,树中的每个节点实质都是负责某

个特定区域的一台服务器,通过这些节点,对整个域名空间进行划分,成为一个层次结构,这种结构类似与UNIX文件系统的层次结构,根的名字“.”来表示,并称之为根域名(root domain)根域的下一级是顶级域名,顶级域名又分为两种划分方法,地理域和通用域,地理域则是为了世界上每个国家或地区等设置的,如中国是cn,日本jp,美国us,台湾tw。等等。通用域则是通过不同的机构类别设置的顶级域名,如org、edu 等等。如下图:


wKioL1LXFuCBPsc_AAFqbhdsCRo021.jpg


2.2 域名服务的解析原理和过程


2.2.1域名服务解析的过程

  1. 用户提出域名请求,并将请求发送给本地域名服务器

  2. 当本地域名服务器收到请求后,先查询本地的缓存,如果有该记录信息,则本地的域名服务器就直接把查询的结果返回给用户端

  3. 如果本地的缓存中没有该记录,则本地域名服务器就直接把请求发给根域名服务器,然后让根域名服务器返回给本地域名服务器一个所查询域(根的子域,如cn)的主域名服务器的地址

  4. 本地服务器再向上一步骤中所返回的域名服务器发送请求,然后收到该请求的域名服务器查询其缓存,返回与此请求所对应的记录或相关的夏季的域名股武器的地址,本地域名服务器将返回的结果保存到缓存

  5. 重复第4步,直到找到正确的记录

  6. 本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回客户端



2.2.2 DNS解析实例

wKiom1LXF8zxhAOYAAC50xtZK0c872.jpg



  1. Step-1:客户端请求解析www.sina.com.cn的报文

  2. Step-2:本地的域名服务器收到请求后,查看本地缓存是否有该www.sian.com.cn的解析记录,若有则反馈给客户端,若没有,就像上图一样,从根域名服务器进行查询

  3. Step-3:“.” 根域名服务器收到请求后,判断此域名属于.cn域,查询到NS记录及相应的A记录告

  4. Step-4:本地DNS服务器收到相关信息后,先缓存起来,再向其.cn的域名之一的DNS服务器发送请求解析域名www.sina.com.cn的报文

  5. Step-5:.cn域名服务器收到请求后,判断该域名属于.com.cn域,开始查询本地的记录,找到6条NS记录及相应的A记录后,将其结果反馈给本地DNS服务器

  6. Step-6:本地DNS服务器收到反馈信息后,先缓存起来,再向其.com.cn域名服务器进行查询,请求解析域名www.sina.com.cn的报文

  7. Step-7:.com.cn域名服务器收到请求后,判断该域属于.sina.com.cn域,开始查询本地的记录找到NS记录及对应的A记录,然后将查询的结果返回给本地DNS服务器

  8. Step-8:本地DNS服务器收到请求后,先缓存以上查询结果,再次向.sina.com.cn域名服务器进行查询,请求解析域名www.sina.com.cn的报文

  9. Step-9:域名服务器ns1.sina.com.cn收到请求后,开始查询本地缓存,同时其解析的结果反馈给本地DNS服务器

  10. Step-10:本地DNS服务器收到www.sina.com.cn的解析后,先本地缓存一份,同时将其结果返回给客户机,这样就完成一次域名解析过程



3. DNS 类型及特点

3.1 DNS 类型

DNS服务器:负责区域域名解析,提供权威特定与所有信息的权威性,主DNS保存了指定的区域文件;维护有原始区数据的权威服务器被称为主服务器,典型情况下,它从某个本地文件装载区数据,这个本地文件是有手工编辑,或这由某个手工编辑的其他本地文件所生成,叫区文件.

辅助DNS服务器:不进行特定域的权威设置,区域文件从主DNS复制过来而已。辅服务器(slave,也称为secondary)通过一个名叫区传送(zone transfer)的复制过程从其他服务器中取得区的内容;典型情况下,数据直接从主服务器传送,但是也可能从其他辅助服务器传送。换句话来说则是,一个辅助DNS服务器也可以充当一个二级辅服务器的主DNS服务器。

缓存域名服务器:或称惟高速缓存服务器(存根解析器),主要功能是提纲域名解析的缓

存(默认是不对任何区域解析,客户端访问,缓存域名服务器直接找根来解析, 用缓存来工作)

转发域名服务器:类似于缓存域名服务器,不同的地方是转发域名服务器,有转发器,

转发给特定的ip地址进行解析

智能域名服务器:此域名服务器是在其配置上增加一些智能查询配置,以及采用TSIG

的加密解析安全机制



3.2 DNS服务的相关记录概述

NS:域名服务器记录成为NS记录

A :地址记录用于设置主机名对应ip地址关系

CNAME:别名记录

MX记录:设置当前域中提供邮件服务器名称


3.3 DNS 查询特点

DNS 递归查询:  

  • 大多数客户机向DNS服务器解析域名的方式

  • 只告知查询结果


DNS 迭代查询:

  • 大多数DNS服务器向其他DNS服务器解析域名的方式

  • 逐步一层层返回查询结果,其特点是越来越准确。


4. DNS服务器配置


4.1 构建缓存DNS服务器实例

查看系统是否安装DNS相关软件包(bind、caching-nameserver),由于RHEL6系统已经将caching-nameserver 套件功能集成到bind 软件包中, 所以在RHEL6的平台只需安装bind相关套件即可.


设置网卡信息

wKioL1LXGPLyaYJpAAFsGIpICcg516.jpg

修改系统dns文件,reslov.conf

从下图可以看到系统的dns文件指向了自己,且能够与外网进行连接


wKioL1LXGVWS2-RCAAD2BB6MbxY376.jpg


到这里DNS的缓存服务就设置完成啦。


4.2 基于ACL 的缓存服务器实例


下面的配置主要是适用一个只缓存名字服务器,用于一个公司的内部客户端;通过使用allow-query选项,所有外来客户端的请求都被拒绝。另外一个选择是,使用合适的防火墙规则也可以取得同样的结果。


wKiom1LXGZfxp7z9AAGYxURSiM8872.jpg


4.3 DNS 默认配置文件详解

Options 全局设置
listen-on port 53 {127.0.0.1;};  #将使服务器监听在IP地址127.0.0.1 的53端口。
listen-on-v6 port 53 {::1};      #制定服务器用来监听IPv6发来的请求所用的接口和端口;可以设置any,none不监听在任何
directory                        #服务器的工作目录。
dump-file                        #制定服务器在收到rndc dumpdb 命令时,列印出数据库的文件路径。如果未设定缺省为named_dump.db
statistics-file                  #指定服务器在收到rndc stats 命令,最佳统计数据的文件路径。缺省,named.stats文件
memstatistics-file               #服务器退出时,将内存统计写道的文件路径。在退出时将会把统计信息写入到这个文件
query-source                     #选项中所指定的地址是同时用于UDP和TCP请求,但是端口只用于UDP请求。(请求所使用的地址和端口)
allow-query                      #指定允许哪些主机可以进行普通的DNS查询。此参数也可在zone文件中指定,但会覆盖options的设置
allow-query-cache                #指定允许哪些主机可以从缓存中获取答案。
allow-recursion                  #指定允许那些主机可以通过本服务器进行递归查询。




4.4构建主DNS服务器实例


4.4.1 修改named.conf 的配置文件


在RHEL5系统默认在/etc目录下将建立的是named.caching-nameserver.conf 文件,而不是named.conf 配置文件,这时我们可以通过拷贝指令即可,而RHEL6系统安装bind 相关套件后,/etc/目录下默认就有named.conf.


wKioL1LXGqOi65W1AAG2yUULXHM724.jpg


4.4.2建立zone文件


下图则是新增解析域名的zone文件

wKiom1LXGuLTlCOeAADnY-b4v_k599.jpg


建立相应的zone文件解析的记录,路径为/var/named


wKioL1LXGwviBvcrAAGMHpPlYrs826.jpg

wKiom1LXG0qDI-C_AACo3VPpi00744.jpg

wKioL1LXGz2StxWTAACZib8fRWg000.jpg



区域文件zone的参数说明:

参数代表含义及作用
TTL
生命周期,默认24小时,保存缓存时间
@代表区域,如这里代表jun.com域的区域
root.jun.com代表管理员邮箱
42序列号,(更新区域文件,增大序列号,为了是让辅助DNS能及时对区域文件的更新)
3H
刷新,告知辅助DNS多久来更新区域文件
15m
主DNS服务器没有应答,则每15分钟重新找寻主DNS
1w
针对15m参数;若15分钟重新找寻主DNS,持续一周,则丢弃
1D
表示一天,代表缓存保留时间


验证主DNS服务


wKiom1LXG7XgmwAAAAFSufgx2eY890.jpg



5.构建辅助DNS服务


辅助DNS服务器需安装BING相关套件,与主DNS区别在于建立的zone文件


wKioL1LXHCSxU5KaAADhub6lNOg624.jpg


启动下服务看下是否将主DNS的zone文件拷贝到slaves中


wKiom1LXHHuyUuzeAACX95MHuWA243.jpg


备注:辅助DNS这台服务器依然可以其他域名的主DNS,(部分区域用来辅助DNS,部分区域用来主DNS来解析,共存)如辅助DNS这台服务器也想解析其他的域名的相关记录,该怎么办呢?我们可以直接在它的配置文件里修改一下,定义相关域名的zone文件,这里添加了一个dan.com 域名


wKioL1LXHO-T3rT4AAFo05_4Avo312.jpg


建立dan.com域名的zone文件


wKiom1LXHT2BAEffAADJWWmd9mc772.jpg


重新启动服务测试下(DNS指向自己)


wKioL1LXHYfSrrRyAADMDveogDI094.jpg

wKioL1LXHbCxMQh5AACTaz9g_cc998.jpg


测试OK,此台辅助DNS可以解析新的域名记录。若想是解析dan.com的反向解析怎么办呢?是不是还是在named.rfc1912.zones 添加呢?这里是不行的,在同一网段是不能同时存在两个反向解析记录,那么样才能使解析dan.com的反向解析呢?通过修改主服务器的jun.com.rev文件,在此文件中新增dan.com

的反向解析即可,由于主从DNS之间的学习存在一定时差,测试时等待即可


wKiom1LXHeTRw_L-AADH1iu5fuY870.jpg


可以从jun.com.rev文件看到新增了三个方向解析记录。好了我们先保存下看是能在主DNS中解析到相关记录。


wKioL1LXHimi22OWAAEaykXA97w495.jpg


可以看到在主DNS中解析没有问题,那么看下辅助DNS能够解析否?

为了验证效果可以把原来从主DNS中同步过来的记录下信息删掉或者拷贝另处,重新启动服务即可验证了。


wKiom1LXHlaTE2lFAADFwS8HRlc551.jpg


6.建立转发DNS服务器


转发DNS服务器这是特定指定一个地址进行区域解析,如现在我想解析jun.com此域的解析记录信息


wKiom1LXHn_Acl1QAAERq5H_E-s031.jpg


从上图可以看到我将jun.com域的解析地址转发给192.168.0.82地址进行解析,同时将192.168.0段的方向解析也让其192.168.0.82 进行解析


wKioL1LXH82x-VD3AAIitSk5zQU795.jpg


测试成功,由于这里是通过转发的方式进行解析的,所以会提示这是非权威的回答,若在jun.com的服务器上构建解析,给予的回答就不是非权威的了。


wKioL1LXH_PgcNuCAADX1c9z-3A555.jpg

测试成功,转发服务器的测试告一段落!


7.委派DNS(子域)


这里我们构建域的委派,这样我们大致步骤可分为;(1)先在辅助DNS中新建一个bj.jun.com (2)建立bj.jun.com.zone文件 (3)主DNS服务器的委派,『不需要修改主配置文件,只需要修改下记录信息即可』


wKiom1LXIGXj-2X7AAD3KCCyWTE929.jpg


建立bj.jun.com.zone文件,如下:


wKioL1LXIInzRR0oAADWxHTUCi0968.jpg


在原测试的辅助环境(此环境删除了辅助DNS设置信息)中能够解析出bj.dan.com域名信息记录,验证下主DNS是否能够解析


wKiom1LXIQPj0ecoAACayWRlrmg776.jpg


解析失败,不能解析,原因是我还没有开始建立子域的委派

在主DNS(主区域文件)建立相关记录,如下:


wKioL1LXITrTPG-DAAFeFFi_iFc118.jpg

保存退出,启动named服务器,进行测试!

wKiom1LXIWqyctPRAAD5VL77lSg966.jpg


附常用的DNS 调试工具

dig,host和nslookup命令是用于DNS调式工具,在使用方法及格式略有不同而已,以下简短列出了几个常用的方式以供参考在输入风格及格式上不相同.


dig

常用的格式

dig @server domain query-type query-class

dig用法参数列表,也可以通过man dig 或者 dig –h | more 查看其命令相应的帮助信息~ 参数可接IP address或domain name来获得name server所提供的相关讯息,提供不同资料记录型态,例如A、MX…等,通过此指令可以挖掘很多可用的信息。

dig @dns域名或ip区域记录类型
如:dig @192.168.0.82jun.comNS/A/MX


nslookup

有两种模式:交互是和非交互式;交互模式允许使用者向名字服务器发出对各种主机和域名信息的查询请求,或者打印出一个域下面的主机列表.非交互模式只能用于打印所查询的某个主机或域的名字和请求信息.

[root@jun ~]#nslookup   or nslookup ip/domain
> server192.168.0.82
Default server:192.168.0.82
Address:192.168.0.82#53

host

默认情况下,只是简单使用host+欲查询域名得到只是简单一些A记录或MX记录等,想了解全部信息需加上 -a 参数查看 ,host指令查看类似于以下图示

wKioL1LXIxbjsbiyAAFpth2fcAU416.jpg

通过本篇文章可以非常容易的掌握DNS的工作原理及DNS的常见的几种DNS服务的构建方法。