1 DNS原理
1.1 DNS简介
DNS(Domain Name System)域名系统,在TCP/IP网络中有非常重要的地位,能够提供域名与IP地址的解析服务。
1.2 域名空间
DNS是一个分布式数据库,命名系统采用层次的逻辑结构,如同一棵倒置的树,这个逻辑的树形结构称为域名空间,由于DNS划分了域名空间,所以各机构可以使用自己的域名空间创建DNS信息。
注:DNS域名空间中,树的最大深度不得超过127层,树中每个节点最长可以存储63个字符。
1)域和域名
DNS树的每个节点代表一个域,通过这些节点,对整个域名空间进行划分,成为一个层次结构。域名空间的每个域的名字,通过域名进行表示。域名通常由一个完全正式域名(FQDN)标识。FQDN能准确表示出其相对于DNS域树根的位置,也就是节点到DNS树根的完整表述方式,从节点到树根采用反向书写,并将每个节点用“.”分隔,对于DNS域google来说,其完全正式域名(FQDN)为google.com。
一个DNS域可以包括主机和其他域(子域),每个机构都拥有名称空间的某一部分的授权,负责该部分名称空间的管理和划分,并用它来命名DNS域和计算机。例如,google为com域的子域,其表示方法为google.com,而www为google域中的Web,可以使用www.google.com表示。
image
注意:通常,FQDN有严格的命名限制,长度不能超过256字节,只允许使用字符a-z,0-9,A-Z和减号(-)。点号(.)只允许在域名标志之间(例如“google.com”)或者FQDN的结尾使用。域名不区分大小。
2.Internet域名空间
Internet域名空间结构为一棵倒置的树,并进行层次划分。由树根到树枝,也就是从DNS根到下面的节点,按照不同的层次,进行了统一的命名。域名空间最顶层,DNS根称为根域(root)。根域的下一层为顶级域,又称为一级域。其下层为二级域,再下层为二级域的子域,按照需要进行规划,可以为多级。所以对域名空间整体进行划分,由最顶层到下层,可以分成:根域、顶级域、二级域、子域。并且域中能够包含主机和子域。主机www的FQDN从最下层到最顶层根域进行反写,表示为www.europe.example.com
image
Internet域名空间的最顶层是根域(root),其记录着Internet的重要DNS信息,由Internet域名注册授权机构管理,该机构把域名空间各部分的管理责任分配给连接到Internet的各个组织。
DNS根域下面是顶级域,也由Internet域名注册授权机构管理。共有3种类型的顶级域。
组织域:采用3个字符的代号,表示DNS域中所包含的组织的主要功能或活动。比如com为商业机构组织,edu为教育机构组织,gov为政府机构组织,mil为军事机构组织,net为网络机构组织,org为非营利机构组织,int为国际机构组织。
地址域:采用两个字符的国家或地区代号。如cn为中国,kr为韩国,us为美国。
反向域:这是个特殊域,名字为in-addr.arpa,用于将IP地址映射到名字(反向查询)。
对于顶级域的下级域,Internet域名注册授权机构授权给Internet的各种组织。当一个组织获得了对域名空间某一部分的授权后,该组织就负责命名所分配的域及其子域,包括域中的计算机和其他设备,并管理分配的域中主机名与IP地址的映射信息。 
1.3 区(Zone)
区是DNS名称空间的一个连续部分,其包含了一组存储在DNS服务器上的资源记录。每个区都位于一个特殊的域节点,但区并不是域。DNS域是名称空间的一个分支,而区一般是存储在文件中的DNS名称空间的某一部分,可以包括多个域。一个域可以再分成几部分,每个部分或区可以由一台DNS服务器控制。使用区的概念,DNS服务器回答关于自己区中主机的查询,它是哪个区的授权服务器。
1.4 主域名服务器与辅助域名服务器
DNS服务器可以不存储任何区的信息或者存储一个或多个区的信息。当DNS服务器接收到DNS查询时,它检索它的本地区以定位所请求的信息。如果因为服务器不是所DNS域的授权服务器,从而没有所请求域的数据而使用检索失败,服务器就检查它的高速缓存并与其他DNS服务器通信以解析该请求,或者把客户机提交给另一个可能知道答案的DNS服务器。
DNS服务器可以管理主区和辅助区。用户可以把服务器配置成管理多个不同的主区和辅助区,以尽量接近实际情况,这意味着服务器可能管理一个区的主拷贝和另一个区的辅助拷贝,或只管理一个区的主拷贝和辅助拷贝。对每个区,管理其主区的计算机是该区的主服务器,管理其辅助区的服务器是该区的辅助服务器。
主区是本地更新的,在区数据改变时,例如把该区的某个部分授权给另一台DNS服务器,或在区中添加资源记录,这些改动必须在该区的主DNS服务器上进行,以便新信息能加进本地区。
相反,辅助区是从其他服务器复制的。在辅助服务器上定义区时,区配置有服务器的IP,辅助区就是从该地址复制信息。复制区文件的服务器可以是该区的主服务器或辅助服务器,有时称为辅助区的主控服务器。
当区的辅助服务器启动时,它与该区的主控服务器进行连接并启动一次区传输,区辅助服务器定期与区主控服务器通信,查看区数据是否改变。如果改变了,它就启动一次区传输。
每个区必须有主服务器,另外每个区至少要有一台辅助服务器,否则如果该区的主服务器崩溃了,就无法解析该区的名称。
辅助服务器的优点:
1)容错能力
配置辅助服务器后,在该区主服务器崩溃的情况下,客户机仍能解析该区的名称。一般把区的主服务器和区的辅助服务器安装在不同子网上,这样如果到一个子网的连接中断,DNS客户机还能直接查询另一个子网上的名称服务器。
2)减少广域链路的通信量
如果某个区在远程有大量客户机,用户就可以在远程添加该区的辅助服务器,并把远程的客户机配置成先查询这些服务器,这样就能防止远程客户机通过慢速链路通信来进行DNS查询。
3)减轻主服务器的负载
辅助服务器能回答该区的查询,从而减少该区主服务器必须回答的查询数。
1.6 DNS查询原理及流程
1)DNS相关概念
(1)DNS服务器
运行DNS服务器程序的计算机,储存DNS数据库信息。DNS服务器会尝试解析客户机的查询请求。在解答查询时,如果DNS服务器能提供所请求的信息,就直接回应解析结果,如果该DNS服务器没有相应的域名信息,则为客户机提供另一个能帮助解析查询的服务器地址,如果以上两种方法均失败,则回应客户机没有所请求的信息或请求的信息不存在。
(2)DNS缓存
DNS服务器在解析客户机请求时,如果本地没有该DNS信息,则可以会询问其他DNS服务器,当其他域名服务器返回查询结果时,该DNS服务器会将结果记录在本地的缓存中,成为DNS缓存。当下一次客户机提交相同请求时,DNS服务器能够直接使用缓存中的DNS信息进行解析。
(3)资源记录
DNS服务器的信息数据,按照分类进行存储,能够解析客户端的DNS请求。
(4)区文件
包含区资源记录的文件,选择DNS服务器为授权服务器,管理该区域。在大部分DNS实现中,用文本文件实现区。
2)递归查询和迭代查询
(1)递归查询
递归查询是一种DNS服务器的查询模式,在该模式下DNS服务器接收到客户机请求,必须使用一个准确的查询结果回复客户机。如果DNS服务器本地没有存储查询DNS信息,那么该服务器会询问其他服务器,并将返回的查询结果提交给客户机。
(2)迭代查询
DNS服务器另外一种查询方式为迭代查询,DNS服务器会向客户机提供其他能够解析查询请求的DNS服务器地址,当客户机发送查询请求时,DNS服务器并不直接回复查询结果,而是告诉客户机另一台DNS服务器地址,客户机再向这台DNS服务器提交请求,依次循环直到返回查询的结果为止。
3)DNS查询流程
(1)DNS域名解析工作原理
image
<1> 客户机提交域名解析请求,并将该请求发送给本地的域名服务器。
<2> 当本地的域名服务器收到请求后,就先查询本地的缓存。如果有查询的DNS信息记录,则直接返回查询的结果。如果没有该记录,本地域名服务器就把请求发给根域名服务器。
<3> 根域名服务器再返回给本地域名服务器一个所查询域的顶级域名服务器的地址。
<4> 本地服务器再向返回的域名服务器发送请求。
<5> 接收到该查询请求的域名服务器查询其缓存和记录,如果有相关信息则返回客户机查询结果,否则通知客户机下级的域名服务器的地址。
<6> 本地域名服务器将查询请求发送给返回的DNS服务器。
<7> 域名服务器返回本地服务器查询结果(如果该域名服务器不包含查询的DNS信息,查询过程将重复<6>、<7>步骤,直到返回解析信息或解析失败的回应)。
<8> 本地域名服务器将返回的结果保存到缓存,并且将结果返回给客户机。
(2)域名解析实例
假设客户机使用电信ADSL接入Internet,电信为其分配的DNS服务器地址为219.141.140.10,域名解析过程如下哈~
image
<1> 客户机向本地的域名服务器219.141.140.10发送解析www.google.com请求。
<2> 当本地的域名服务器收到请求后,就先查询本地的缓存。如果有查询的DNS信息记录,则直接返回查询的结果。如果没有该记录,本地域名服务器就把解析www.google.com请求发给根域名服务器。
<3> 根域名服务器收到请求后,根据完全正式域名FQDN,判断该域名属于com域,查询所有的com域DNS服务器的信息,并返回给本地域名服务器。
<4> 本地域名服务器219.141.140.10收到回应后,先保存返回的结果,再选择一台com域的域名服务器,向其提交解析域名www.google.com的请求。
<5> com域名服务器接收到该查询请求后,判断该域名属于google.com域,通过查询本地的记录,列出管理google域的域名服务器信息,然后将查询结果返回给本地的域名服务器219.141.140.10。
<6> 本地域名服务器219.141.140.10收到回应后,先缓存返回的结果,再向google.com域的服务器发出请求解析域名www.google.com的数据包。
<7> 域名服务器google.com收到请求后,查询DNS记录中的www主机的信息,并将结果返回给本地服务器219.141.140.10。
<8> 本地域名服务器将返回的查询结果保存到缓存,并且将结果返回给客户机。
1.7 正向解析与反向解析
1)正向解析
正向解析是指域名到IP地址的解析过程。
2)反向解析
反向解析是从IP地址到域名的解析过程。反向解析的作用为服务器的身份验证。
1.8 资源记录
为了将名字解析为IP地址,服务器查询它们的区(又叫DNS数据库文件或简单数据库文件)。区中包含组成相关DNS域资源信息的资源记录(RR)。例如,某些资源记录把友好名字映射成IP地址,另一些则把IP地址映射到友好名字。
某些资源记录不仅包括DNS域中服务器的信息,还可以用于定义域,即指定每台服务器授权了哪些域,这些资源记录就是SOA和NS资源记录。
1)SOA资源记录
每个区在区的开始处都包含了一个起始授权记录(Start of Authority Record),简称SOA记录。SOA定义了域的全局参数,进行整个域的管理设置。一个区域文件只允许存在唯一的SOA记录。
2)NS资源记录
名称服务器(NS)资源记录表示该区的授权服务器,它们表示SOA资源记录中指定的该区的主和辅助服务器,也表示了任何授权区的服务器。每个区在区根处至少包含一个NS记录。
3)A资源记录
地址(A)资源记录把FQDN映射到IP地址,因而解析器能查询FQDN对应的IP地址。
4)PTR资源记录
相对于A资源记录,指针(PTR)记录把IP地址映射到FQDN。
5)CNAME资源记录
规范名字(CNAME)资源记录创建特定FQDN的别名。用户可以使用CNAME记录来隐藏用户网络的实现细节,使连接的客户机无法知道。
6)MX资源记录
邮件交换(MX)资源记录为DNS域名指定邮件交换服务器。邮件交换服务器是为DNS域名处理或转发邮件的主机。处理邮件指把邮件投递到目的地或转交另一不同类型的邮件传送者。转发邮件指把邮件发送到最终目的服务器,用简单邮件传输协议SMTP把邮件发送给离最终目的地最近的邮件交换服务器,或使邮件经过一定时间的排队。
DNS理论和概念了解得差不多了,下面我们开始DNS安装和配置哈~~~
2 安装DNS服务
2.1 BIND简介
BIND全称为Berkeley Internet Name Domain(伯克利因特网名称域系统)。BIND主要有三个版本:BIND4、BIND8、BIND9。
BIND8融合了许多提高效率、稳定性和安全性的技术,而BIND9增加了一些超前的理念:IPv6支持、公开密钥加密、多处理器支持、线程安全操作、增量区传送等等。
2.2 DNS所需软件
bind-9.3.3-10.el5.i386.rpm:该包为DNS服务的主程序包。服务器端必须安装该软件包,后面的数字为版本号。
bind-utils-9.3.3-10.el5.i386.rpm:该包为客户端工具,默认安装,用于搜索域名指令。
2.3 DNS的安装
首先我们来看下RHEL5预装了哪些包哈,rpm -qa | grep bind
image
下面我们使用rpm命令安装bind主程序包
image
查看下效果
image
3 DNS常规服务器配置
一个比较简单的DNS服务器设置流程主要分为以下三步哈:
1)建立主配置文件named.conf,该文件的最主要目的是设置DNS服务器能够管理哪些区域(Zone)以及这些区域所对应的区域文件名和存放路径。
2)建立区域文件,按照named.conf文件中指定的路径建立区域文件,该文件主要记录该区域内的资源记录。例如:www.51cto.com对应的IP地址为211.103.156.229。
3)重新加载配置文件或重新启动named服务使用配置生效。
下面我们来看一个具体实例哈~~~
image
1)客户端需要获得www.michael.com这台主机所对应的IP地址,将查询请求发送给DNS服务器。
2)服务器接收到请求后,查询主配置文件named.conf,检查是否能够管理michael.com区域。而named.conf中记录着能够解析michael.com区域,并提供michael.com区域文件所在路径及文件名。
3)服务器则根据named.conf文件中提供的路径和文件名找到michael.com区域所对应的配置文件,并从中找到www.michael.com主机所对应的IP地址。
4)将查询结果反馈给客户端,完成整个查询过程。
3.1 主配置文件named.conf
named.conf是BIND的核心配置文件,它包含了BIND的基本配置,但其并不包括区域数据。named.conf文件定义了DNS服务器的工作目录所在位置,所有的区域数据文件都存放在该目录中,该文件还定义了DNS服务器能够管理哪些区域,如果DNS服务器可以管理某个区域,它将完成该区域内的域名解析工作。
如果没有安装caching-nameserver-9.3.3-10.el5.i386.rpm包,则我们需要手动建立named.conf文件,为了便于管理,通常把该文件建立在/etc目录下哈~
image
当手动建立好named.conf文件后,此文件是空白滴,和其他配置文件差不多,named.conf配置文件分为整体和局部两个部分。
image 
区域名为服务器要管理区域的名称,如果添加了一个区域,并且该区域存在相应资源记录,那么DNS服务器就可以解析该区域的DNS信息。
type字段指定区域的类型,对于区域的管理至关重要,一共分为六种:
Master:主DNS服务器:拥有区域数据文件,并对此区域提供管理数据
Slave:辅助DNS服务器:拥有主DNS服务器的区域数据文件的副本,辅助DNS服务器会从主DNS服务器同步所有区域数据。
Stub:stub区域和slave类似,但其只复制主DNS服务器上的NS记录而不像辅助DNS服务器会复制所有区域数据。
Forward:一个forward zone是每个域的配置转发的主要部分。一个zone语句中的type forward可以包括一个forward和/或forwarders子句,它会在区域名称给定的域中查询。如果没有forwarders语句或者forwarders是空表,那么这个域就不会有转发,消除了options语句中有关转发的配置。
Hint:根域名服务器的初始化组指定使用线索区域hint zone,当服务器启动时,它使用根线索来查找根域名服务器,并找到最近的根域名服务器列表。如果没有指定class IN的线索区域,服务器使用编译时默认的根服务器线索。不是IN的类别没有内置的默认线索服务器。
Delegation-only:用于强制区域的delegation .ly状态。
3.2 配置正向解析区域
授权DNS服务器管理michael.com区域,并把该区域的区域文件命名为michael.com
1)建立主配置文件named.conf
vim /etc/named.conf
image
directory  路径名:用于定义服务器的工作目录,该目录存放区域数据文件。配置文件中所有相对路径的路径名都基于此目录。如果没有指定,默认的是BIND启动的目录。
2)建立michael.com区域文件
vim /var/named/michael.com
image     
3.3 配置反向解析区域
1)添加反向解析区域
vim /etc/named.conf
image
2)建立反向区域文件
vim /var/named/named.0.168.192
image
3)测试
image
3.4 区域文件与资源记录
区域文件实际上就是DNS的数据库,而资源记录就是数据库中的数据。这些数据其中包括多种记录类型,比如SOA、NS、A记录等等,这些记录统称为资源记录。如果没有资源记录那么DNS服务器将无法为客户端提供域名解析服务。
3.5 SOA资源记录
SOA资源记录为起始授权机构记录,是最重要、最常用的一种资源记录。区域以服务器授权机构的概念为基础。当DNS服务器配置成加载区域时,其使用SOA和NS两种资源记录来确定区域的授权属性。
SOA和NS资源记录在区域配置中具有特殊作用,它们是任何区域都需要的记录并且一般是文件中列出的第一个资源记录。
起始授权机构SOA资源记录总是处于任何标准区域中的第一位。它表示最初创建它的DNS服务器或现在是该区域的主服务器的DNS服务器。它还用于存储会影响区域更新或过期的其他属性,比如版本信息和计时。这些属性会影响在该区域的域名服务器之间进行同步数据的频繁程度。
SOA资源记录语法格式:
区域名(当前) 记录类型 SOA 主域名服务器(FQDN) 管理员邮件地址 (序列号 刷新间隔 重试间隔 过期间隔 TTL)
image
SOA资源记录字段:
主域名服务器:区域的主DNS服务器的FQDN
管理员:管理区域的负责人的电子邮件。在该电子邮件名称中使用英文句号“.”代替at符号“@”。
序列号:该区域文件的修订版本号。每次区域中的资源记录改变时,这个数字便会增加,每次区域改变时增加这个值非常重要,它使部分区域改动或完全修改的区域都可以在后续传输中复制到其他辅助DNS服务器上。
刷新间隔:以秒计算的时间,辅助DNS服务器请求与源服务器同步的等待时间。当刷新间隔到期时,辅助DNS服务器请求源服务器的SOA记录副本,然后辅助DNS服务器将源服务器的SOA记录的序列号与其本地SOA记录的序列号相比较,如果二者不同,则辅助DNS服务器从主DNS服务器请求区域传输。这个域的默认时间是900秒(15分钟)。
重试间隔:以秒计算时间,辅助DNS服务器在请求区域传输失败后,等待多长时间再次请求区域传输时间。通常,这个时间短于刷新间隔。默认值为600秒(10分钟)。
过期间隔:以秒计算时间,当这个时间到期时,如果辅助DNS服务器还无法与源服务器进行区域传输,则辅助DNS服务器会把它的本地数据当作不可靠数据。默认值为86400秒(24小时)。
最小(默认)TTL:区域的默认生存时间(TTL)和缓存否定应答名称查询的最大间隔。默认值为3600秒(1小时)。
3.6 NS记录
用于指定一个区域的权威DNS服务器,通过在NS资源记录中列出服务器的名字,其他主机就认为它是该区域的权威服务器。这意味着在NS资源记录中指定的任何服务器都被其他服务器当作权威的来源并且能应答区域内所含名称的查询。
NS资源记录语法格式:
区域名 IN NS 完整主机名(FQDN)
image
3.7 A资源记录
A资源记录是使用最为频繁的一种,通常用于将指定的主机名称解析为它们对应的IP地址。
A资源记录语法格式:
完整主机名(FQDN) IN A IP地址
 image
3.8 DNS应用案例I
技术部所在域为“tech.org”,部门内有三台主机,主机名分别是client1.tech.org,client2.tech.org,client3.tech.org。现要求DNS服务器dns.tech.org可以解析3台主机名和IP地址的对应关系。
分析:此案例是DNS搭建的最基本配置。在搭建之前整理好设定流程。首先在服务器上建立主配置文件,设置设置可以解析“tech.org”区域。然后建立“tech.org”的区域文件,并在区域文件中设置SOA、NS以及A资源记录。最后配置客户端。
1)建立主配置文件named.conf
touch /etc/named.conf
image 
2)设置named.conf文件并添加“tech.org”区域
image
3)建立“tech.org”的区域文件
touch /var/named/tech.org
image
4)配置“tech.org”区域文件并添加资源记录
image
(1)定义@变量的值,通常定义为本区域。
(2)定义资源记录在缓存的存放时间
(3)设置SOA记录,注意root表示管理员的邮件地址,本应该表示为“root@tech.org.”,但是这是不能使用“@”符号,因为“@”在这里表示区域哈~~所以需要用“.”来代替它。表示“root.tech.org.”,可以简写成“root”。
(4)设置NS记录。
(5)设置A记录。
5)测试
[root@rhel5 ~]# service named restart
停止 named:                                               [确定]
启动 named:                                               [确定]
[root@rhel5 ~]# nslookup dns.tech.org
Server:         192.168.0.188
Address:        192.168.0.188#53
Name:   dns.tech.org
Address: 192.168.0.188
[root@rhel5 ~]# nslookup client1.tech.org
Server:         192.168.0.188
Address:        192.168.0.188#53
Name:   client1.tech.org
Address: 192.168.0.101
[root@rhel5 ~]# nslookup client2.tech.org
Server:         192.168.0.188
Address:        192.168.0.188#53
Name:   client2.tech.org
Address: 192.168.0.102
[root@rhel5 ~]# nslookup client3.tech.org
Server:         192.168.0.188
Address:        192.168.0.188#53
Name:   client3.tech.org
Address: 192.168.0.103
[root@rhel5 ~]#
3.9 其他常用资源记录
1)CNAME资源记录
别名(CNAME)资源记录用于为某个主机指定一个别名。例如管理员告知公司的首页为www.abc.com,而实际在访问时访问的是www1.abc.com主机。
该资源记录经常用于在同一区域的A资源记录中的主机需要重命名时或者为多台主机(例如一组WWW服务器)提供相同的别名。
CNAME资源记录语法格式:
别名 IN CNAME 主机名
image
2)MX资源记录
MX(邮件交换器)资源记录提供邮件传递信息。该记录会指定区域内的邮件服务器名称。
MX资源记录语法格式:
区域名      IN      MX      优先级(数字)      邮件服务器名称(FQDN)
image
3)PTR资源记录
指针(PTR)资源记录。该记录与A记录相反,用于查询IP地址与主机名的对应关系。
PTR资源记录语法格式:
IP地址      IN      PTR      主机名(FQDN)
image
3.10 根区域设置及对应区域文件
根区域是一个较为特殊的区域,记录列出了全球根域名服务器的信息,域名通常用“.”表示,类型为hint。
image
因为域名服务器接收到查询请求后,如果该服务器没有相应的DNS信息,则会询问根区域中的根域名服务器,进行迭代查询,直到返回结果,所以根区域作用非常重要,不建议手写根区域文件。
安装BIND主程序软件包时会自动建立根区域文件的范本。使用rpm -ql命令可以追踪所有安装后文件的路径。其中有一个名为named.root的文件就是根区域文件的范本。
 image
image
查看此文件则显示一份标准的根区域文件设置
[root@rhel5 ~]# more /usr/share/doc/bind-9.3.3/sample/var/named/named.root
;       This file holds the information . root name servers needed to
;       initialize cache of Internet domain name servers
;       (e.g. reference this file in the "cache  .  <file>"
;       configuration file of BIND domain name servers).
;
;       This file is made available by InterNIC
;       under anonymous FTP as
;           file                /domain/named.cache
;           . server           FTP.INTERNIC.NET
;       -OR-                    RS.INTERNIC.NET
;
;       last update:    Jan 29, 2004
;       related version of root zone:   2004012900
;
;
; formerly NS.INTERNIC.NET
;
.                        3600000  IN  NS    A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4
;
; formerly NS1.ISI.EDU
;
.                        3600000      NS    B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET.      3600000      A     192.228.79.201
;
; formerly C.PSI.NET
;
.                        3600000      NS    C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET.      3600000      A     192.33.4.12
;
; formerly TERP.UMD.EDU
;
.                        3600000      NS    D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET.      3600000      A     128.8.10.90
;
; formerly NS.NASA.GOV
;
.                        3600000      NS    E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10
;
; formerly NS.ISC.ORG
;
.                        3600000      NS    F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241
;
; formerly NS.NIC.DDN.MIL
;
.                        3600000      NS    G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET.      3600000      A     192.112.36.4
;
; formerly AOS.ARL.ARMY.MIL
;
.                        3600000      NS    H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET.      3600000      A     128.63.2.53
;
; formerly NIC.NORDU.NET
;
.                        3600000      NS    I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET.      3600000      A     192.36.148.17
;
; operated by VeriSign, Inc.
;
.                        3600000      NS    J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET.      3600000      A     192.58.128.30
;
; operated by RIPE NCC
;
.                        3600000      NS    K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129
;
; operated by ICANN
;
.                        3600000      NS    L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET.      3600000      A     198.32.64.12
;
; operated by WIDE
;
.                        3600000      NS    M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33
; End of File
[root@rhel5 ~]#
named.root记录了全球13台根域名服务器地址,将该文件复制到DNS的工作目录(/var/named/)下即可,这样它就可以正常工作工作了。采用这种方法不但节省时间而且可以避免手动输入出错哈~
3.11 DNS的启动与停止
1)DNS服务器启动
service named start
2)DNS服务器停止
service named stop
3)DNS服务器重新启动
service named restart
4)自动加载DNS服务
(1)chkconfig
自动加载
chkconfig --level 3 named .
不自动加载
chkconfig --level 3 named off
(2)ntsysv
image
3.12 host命令测试DNS
host是常用测试DNS命令中较为简单的一个,功能也相对nslookup、dig等命令简单,通常用于测试DNS服务器能否正常工作,如测试DNS服务器能否解析主机名与IP地址对应关系。
host命令格式:
host    主机名
host    IP地址
image
3.13 rndc
通常操作系统通过中断信号来控制named进程,如使用-HUP来使named重新读入配置文件的信息等。而rndc是BIND软件引进的远程控制通道,代替操作系统信号来控制named进程。
1)修改named.conf
为了使DNS服务器支持rndc,首先是需要在named.conf添加用于控制DNS服务器的controls字段
controls { inet 127.0.0.1 allow { localhost; } keys { <key-name>; }; };
因为/etc/named.conf主配置文件是默认通用的, 我们最好用设置key关键字一个单独的文件只能由root读取,同时使用include关键字指定此文件位置,比如:
include "/etc/rndc.key";
image
(1)设置服务器地址以及可以管理的主机名,如果DNS服务器本地管理,地址填写127.0.0.1,主机名为localhost
(2)配置管理该域名服务器使用的密钥名称,客户端只有与之匹配才可以利用rndc进行相关管理。
(3)为了保证密钥信息的安全,将密钥数据存储在/etc/rndc.key文件中。
2)建立rndc.key
named.conf中添加了密钥test,现在可以通过dnssec-keygen生成密钥信息,并建立rndc.key文件。
dnssec-keygen -a hmac-md5 -b <bit-length> -n HOST <key-file-name>
image
image
keys关键字告诉named监听环回地址127.0.0.1的缺省TCP953端口,如果提交匹配的key密钥名称则允许本机执行rndc命令。
key "<key-name>" { algorithm hmac-md5; secret "<key-value>"; }; 修改/etc/rndc.key image
3)客户机建立rndc.conf
服务器端配置完毕后,客户端还需要将密钥信息复制到本地并将该信息添加到/etc/rndc.conf才可以执行rndc进行日常的管理。
image
(4)测试
[root@rhel5 ~]# rndc
Usage: rndc [-c config] [-s server] [-p port]
        [-k key-file ] [-y key] [-V] command
command is .e of the following:
  reload        Reload configuration file and zones.
  reload zone [class [view]]
                Reload a single zone.
  refresh zone [class [view]]
                Schedule immediate maintenance for a zone.
  retransfer zone [class [view]]
                Retransfer a single zone without checking serial number.
  freeze zone [class [view]]
                Suspend updates to a dynamic zone.
  thaw zone [class [view]]
                Enable updates to a frozen dynamic zone and reload it.
  reconfig      Reload configuration file and new zones .ly.
  stats         Write server statistics to the statistics file.
  querylog      Toggle query logging.
  dumpdb [-all|-cache|-zones] [view ...]
                Dump cache(s) to the dump file (named_dump.db).
  stop          Save pending updates to master files and stop the server.
  stop -p       Save pending updates to master files and stop the server
                reporting process id.
  halt          Stop the server without saving pending updates.
  halt -p       Stop the server without saving pending updates reporting  process id.
  trace         Increment debugging level by .e.
  trace level   Change the debugging level.
  notrace       Set debugging level to 0.
  flush         Flushes all of the server's caches.
  flush [view]  Flushes the server's cache for a view.
  flushname name [view]
                Flush the given name from the server's cache(s)
  status        Display status of the server.
  recursing     Dump the queries that are currently recursing (named.recursing)
  *restart      Restart the server.
* == not yet implemented
Version: 9.3.3rc2
[root@rhel5 ~]#
image
3.14 DNS应用案例II
企业采用多个区域管理各部门网络,技术部属于“tech.redking”域,市场部属于“mart.redking”域,其他人员属于“freedom.redking”域。技术部门共有200人,采用的IP地址为192.168.1.1-192.168.1.200。市场部门共有100人,采用IP地址为192.168.2.1-192.168.2.100。其他人员只有50人,采用IP地址为192.168.3.1-192.168.3.50。现采用一台RHEL5主机搭建DNS服务器,其IP地址为192.168.1.254,要求这台DNS服务器可以完成内网所有区域的正/反向解析,并且所有员工均可以访问外网地址。
1)建立主配置文件named.conf
image
2)设置named.conf文件并添加需要解析的区域
image
3)建立七个区域所对应的区域文件
image
4)配置区域文件并添加相应的资源记录
(1)配置“tech.redking”正向解析区域
image
(2)配置“tech.redking”反向解析区域
image
(3)配置“mart.redking”正向解析区域
image
(4)配置“mart.redking”反向解析区域
image
(5)配置“freedom.redking”正向解析区域
image
(6)配置“freedom.redking”反向解析区域
image
(7)DNS测试
image 
4 DNS高级服务器配置
4.1 辅助DNS服务器及区域数据同步
1)辅助域名服务器
DNS划分若干区域进行管理,每个区域由一个或多个域名服务器负责解析。如果采用单独的DNS服务器而该服务器没有响应,那么该区域的域名解析就会失败。因此每个区域建议使用多个DNS服务器,可以提供域名解析容错功能。对于存在多个域名服务器的区域,必须选择一台主域名服务器(master),保存并管理整个区域的信息,其他服务器称为辅助域名服务器(slave)。
管理区域时,使用辅助域名服务器的好处:
(1)辅助DNS服务器提供区域冗余,能够在该区域的主服务器停止响应时为客户端解析该区域的DNS名称。
(2)创建辅助DNS服务器可以减少DNS网络通信量。采用分布式结构,在低速广域网链路中添加DNS服务器能有效地管理和减少网络通信量。
(3)辅助服务器可以用于减少区域的主服务器的负载。
2)区域传输
为了保证DNS数据相同,所有服务器必须进行数据同步,辅助域名服务器从主域名服务器获得区域副本,这个过程称为区域传输。区域传输存在两种方式:完全区域传输(AXFR)和增量区域传输(IXFR)。当新的DNS服务器添加到区域中,并且配置为新的辅助服务器时,它会执行完全区域传输(AXFR),从主服务器获取一份完整的资源记录副本。主服务器上区域文件再次变动后,辅助服务器则会执行增量区域传输(IXFR),完整资源记录的更新,始终保持DNS数据同步。
满足发生区域传输的条件时,辅助域名服务器向主服务器发送查询请求,更新其区域文件。
image
(1)区域传输初始阶段,辅助服务器向主DNS服务器发送完全区域传输(AXFR)请求。
(2)主服务器做出响应,并将此区域完全传输到辅助服务器。
该区域传输时会一并发送SOA资源记录。SOA中“序列号”(serial)字段标示区域数据的版本,“刷新时间”(refresh)指出辅助服务器下一次发送查询请求的时间间隔。
(3)刷新间隔到期时,辅助服务器使用SOA查询来请求从主服务器续订此区域。
(4)主域名服务器应答其SOA记录的查询。
该响应包括主服务器中该区域的当前序列号版本。
(5)辅助服务器检查响应中的SOA记录的序列号,并确定续订该区域的方法,如果辅助服务器确认区域文件已经更改,则它会把IXFR查询发送到主服务器。
若SOA响应中的序列号等于其当前的本地序列号,那么两个服务器区域数据都相同,并且不需要区域传输。然后,辅助服务器根据主服务器SOA响应中的该字段值重新设置其刷新时间,续订该区域。如果SOA响应中的序列号值比其当前本地序列号要高,则可以确定此区域己更新并需要传输。
(6)主服务器通过区域的增量传输或完全传输做出响应。
如果主服务器可以保存修改的资源记录的历史记录,则它可以通过增量区域传输(IXFR)做出应答。如果主服务器不支持增量传输或没有区域变化的历史记录,则它可以通过完全区域传输(AXFR)做出应答。
3)配置辅助域名服务器
(1)配置主域名服务器
修改主配置文件named.conf添加michael.com区域
image
创建正向解析区域文件michael.com.zone
image
创建反向解析区域文件1.168.192.in-addr.arpa.zone
image
(2)配置辅助域名服务器
修改主配置文件named.conf,添加michael.com区域
image
image
(3)数据同步测试
重启辅助服务器named服务,使其与主域名服务器数据同步,然后我们在主域名服务器上执行tail命令查看系统日志,辅助域名服务器通过完整无缺区域复制(AXFR)获取michael.com区域数据。
image
辅助域名服务器系统日志,通过ls命令查看辅助域名服务器/var/named/slaves目录,区域文件michael.com.zone复制完毕。
image
建议配置区域复制时关闭Selinux功能,否则区域数据可能无法复制哈~~~
4.2 子域与区域委派
域名空间由多个域构成,DNS提供了将域名空间划分为一个或多个区域的方法,这样使得管理更加方便。而对于域来说,随着域的规模和功能不断扩展,为了保证DNS管理维护以及查询速度,可以为一个域添加附加域,上级域为父域,下级域为子域。父域为michael.com,子域为mis.michael.com。
image
1)子域应用环境
当要为一个域附加子域时,请检查是否属于以下三种情况:
(1)域中增加了新的分支或站点,需要添加子域扩展域名空间。
(2)域中规模不断扩大,记录条目不断增多,该域的DNS数据库变得过于庞大,用户检索DNS信息时间增加。
(3)需要将DNS域名空间的部分管理工作分散到其他部门或地理位置。
2)管理子域
如果根据需要,决定添加子域,可以有两种方法进行子域的管理。
(1)区域委派
父域建立子域并将子域的解析工作委派到额外的域名服务器,并在父域的权威DNS服务器中登记相应的委派记录,建立这个操作的过程称为区域委派。任何情况下,创建子域都可以进行区域委派。
(2)虚拟子域
建立子域时,子域管理工作并不委派给其他服务器,而是与父域信息一起,存放在相同的域名服务器的区域文件中。如果只是为域添加分支或子站,不考虑到分散管理,选择虚拟子域的方式,可以降低硬件成本。
注意:
执行区域委派时,仅仅创建子域是无法使子域信息得到正常的解析。在父域的权威域名服务器的区域文件中,务必添加子域域名服务器的记录,建立子域与父域的关联,否则,子域域名解析无法完成
3)配置区域委派
案例:公司提供虚拟主机服务,所有主机后缀域名为michael.com。随着虚拟主机注册量大幅增加,DNS查询速度明显变慢,并且域名的管理维护工作非常困难。
分析:对于DNS的一系列问题,查询速度过慢,管理维护工作繁重,均是域名服务器中记录条目过多造成的。管理员可以为michael.com新建子域a.michael.com并配置区域委派,将子域的维护工作交付其他的DNS服务器,新的虚拟主机注册域名为a.michael.com,减少michael.com域名服务器负荷,提高查询速度。
(1)父域设置区域委派
<1>设置父域名服务器named.conf文件
编辑/etc/named.conf并添加michael.com区域记录
image
<2>添加michael.com区域文件
父域的区域文件中,务必要添加子域的委派记录及管理子域的权威服务器的IP地址。
image
[1]指定委派区域,a.michael.com管理工作由域名服务器ns1.a.michael.com负责。
[2]添加ns1.a.michael.com的A记录信息,定位子域a.michael.com的权威服务器。
<3>添加michael.com反向区域文件
image
(2)子域设置
<1>编辑/etc/named.conf并添加a.michael.com区域记录
image
<2>子域域名服务器中,添加a.michael.com域的正向解析区域文件
image
<3>子域域名服务器中,添加a.michael.com域的反向解析区域文件
image
(3)测试
配置客户端
image
 image
4)配置虚拟子域
如果域中需要增加新的分支或部门,而该域区域文件中资源记录数较少,为了节约成本,在不添加额外服务器的情况下,可以配置虚拟子域,将子域信息添加到父域区域文件。
image
修改主配置文件named.conf
image
编辑父域正向区域文件michael.com.zone
image
编辑父域反向区域文件1.168.192.in-addr.arpa.zone
image
编辑子域正向区域文件cn.michael.com.zoneimage
编辑子域反向区域文件cn.1.168.192.in-addr.arpa.zone
image
重启named服务使用配置生效
image
客户端测试:
客户端设置DNS为父域地址
image
image
客户端设置DNS为子域地址
image
image
4.3 转发服务器
转发服务器(forwarding server)接收查询请求,但不直接提供DNS解析,而是将所有查询请求发送到另外的DNS服务器,查询结果返回后保存到缓存。如果没有指定转发服务器,则DNS服务器会使用根区域记录,向根服务器发送查询,这样许多非常重要的DNS信息会暴露在Internet上。除了该安全和隐私问题,直接解析会导致大量外部通信,对于慢速接入Internet的网络或Internet服务成本很高的公司,提高通信效率来说非常不利,而转发服务器可以存储DNS缓存,内部的客户端能够直接从缓存中获取信息,不必向外部DNS服务器发送请求。这样可以减少网络流量并加速查询速度。
按照转发类型的区别,转发服务器可以分为以下两种类型
1)完全转发服务器
DNS服务器配置为完全转发会将所有区域的DNS查询请求发送到其他DNS服务器。可以通过设置named.conf文件的options字段实现该功能。
image
2)条件转发服务器
该服务器类型只能转发指定域的DNS查询请求,需要修改named.conf文件并添加转发区域的设置
image
注意:
<1>转发服务器的查询模式必须允许递归查询,否则无法正确完成转发。
<2>转发服务器列表如果为多个DNS服务器则会依次为尝试,直到获得查询信息为止。
<3>配置区域委派时如果使用权转发服务器,有可能会产生区域引用的错误。
搭建转发服务器的过程并不复杂,为了更有效发挥转发效率,需要掌握以下操作台技巧:
<1>转发列表配置精简
对于配置有转发器的DNS服务器,可将查询发送到多个不同的位置,如果配置转发服务器配置过多,则会增加查询的时间。就根据需要使用转发器,例如将本地无法解析的DNS信息转发到其他DNS服务器。
<2>避免链接转发器
如果配置了DNS服务器server1将查询请求转发给DNS服务器server2,则不要再为server2配置其他转发服务器,将server1的请求再次进行转发,这样会降低解析的效率。如果其他转发服务器进行了错误配置,将查询转发给server1,那么可能会导致错误。
<3>减少转发器负荷
如果DNS服务器向转发器发送查询请求,那么转发器会通过递归查询解析该DNS信息,需要大量时间来应答。如果大量DNS服务器使用这些转发器进行域名信息查询,则会增加转发器的工作量,降低解析的效率,所以建议使用一个以上的转发器实现负载。
<4>避免转发器配置错误
如果配置多个转发器,那么DNS服务器将尝试按照配置文件设置的顺序来转发域名。如果国内的域名服务器错误地将第一个转发器配置为美国的DNS服务器地址,则所有本地无法解析的查询,均会发送到指定的美国DNS服务器,这会降低网络上的名称解析效率。
4.4 缓存服务器(Caching-only Name Server)
对于所有的DNS服务器都会完成指定的查询工作,然后存储已经解析的结果。缓存服务器是一种特殊的域名服务器类型,其本地区并不设置DNS信息。仅执行查询和缓存操作。客户端发送查询请求,缓存服务器如果保存有该查询信息则直接返回结果,提高了DNS的解析速度。
如果你的网络与外部网络连接带宽较低,则可以使用缓存服务器,一旦建立了缓存,通信量便会减少。另外缓存服务器不执行区域传输,这样可以减少网络通信流量。
注意:缓存服务器第一次启动时,没有缓存任何信息。通过执行客户端的查询请求才可以构建缓存数据库,达到减少网络流量及提速的作用。
案例:公司网络中为了提高客户端访问外部WEB站点的速度并减少网络流量需要在内部建立缓存服务器。
分析:因为公司内部没有其他WEB站点,所以不需要DNS服务器建立专门的区域,只需要能够接受用户的请求,然后发送到根服务器,通过迭代查询,获得相应的DNS信息,然后将查询结果保存到缓存,保存的信息TTL值过期后将会清空。
缓存服务器不需要建立独立的区域,可以直接对named.conf文件进行设置,实现缓存的功能。
image
5 DNS客户端配置
5.1 RHEL5客户端配置
RHEL5中设置DNS客户端比较简单,直接编辑/etc/resolv.conf文件,然后使用nameserver参数来指定DNS服务器的IP地址。
image
5.2 Windows客户端配置
WINDOWS下设置应该大家都没问题
image
6 DNS企业实战与应用
6.1 企业环境
公司现有多台WEB服务器,分别采用电信和网通线路向外部发布公司的产品信息。
WEB服务器域名:www.redking.com
网通WEB服务器IP地址:60.30.10.3 子网掩码:255.255.0.0
电信WEB服务器IP地址:59.50.23.1 子网掩码:255.255.0.0
随着业务发展,网站访问量大幅增加,很多客户反应登录公司网站时速度较慢,查询信息等待时间过长。为了更好地提高WEB服务器的访问速度,增加客户满意度,现需要对网络访问进行优化。
6.2 需求分析
企业WEB服务器采用两条线路发布信息,电信接入用户浏览网站时可能会访问网通服务器,从而降低网络通信速度,网通用户也会遇到同样问题。如果能够使不同ISP接入用户输入域名www.redking.com后能够直接访问对应的WEB服务器,则可以解决网页访问延迟的问题。
6.3 解决方案
通过DNS服务器的设置,在接收域名解析请求时,域名服务器能够按照客户端的网段为其响应不同的解析信息,从而达到网络优化的目的。
image
1)基本配置
配置named.conf主配置文件
image
配置localhost.zone区域文件
image
配置0.0.127.in-addr.arpa反向区域文件
image  
修改named用户对/var/named/目录可以写并重启named服务使配置生效并测试服务是否正常。
image
2)配置TSIG
使用TSIG技术,执行dnssec-keygen function产生密钥,一个为public key文件,另一个为private key文件。生成两对key用于电信和网通网段的设置。
image
image
下面修改named.conf文件,加入private key到named.conf文件中,同时删除zone "." IN、zone "localhost" IN以及zone "0.0.127.in-addr.arpa" IN配置文件。
image
3)配置acl.conf
acl "dns-ip-list" {
        192.168.0.188;          #主DNS服务器IP
};
acl CNC {
        58.16.0.0/16;
        58.17.0.0/17;
        ...(省略)
        222.163.0.0/19;
        222.163.32.0/19;
};
acl TELECOM {
        58.32.0.0/13;
        58.42.0.0/15;
        ...(省略)
        222.220.0.0/15;
        222.240.36.0/13;
};
view "CNC" {
        match-clients { dns-ip-list; CNC; };
        recursion yes;
zone "redking.com" {
        type master;
        file "redking.com.cnc.zone";    #redking.com网通解析文件
        allow-query { any; };
        allow-update { none; };
};
zone "." IN {
        type hint;
        file "named.root";
};
zone "localhost" IN {
        type master;
        file "localhost.zone";
        allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "0.0.127.in-addr.arpa.zone";
        allow-update { none; };
};
};
view "TELECOM" IN {
        match-clients { dns-ip-list; TELECOM; };
        server 192.168.5.20;            #同步到辅助域名服务器
        recursion yes;
zone "redking.com" {
        type master;
        file "redking.com.telecom.zone";        #redking.com电信解析文件
        allow-query { any; };
        allow-update { none; };
};
zone "." IN {
        type hint;
        file "named.root";
};
zone "localhost" IN {
        type master;
        file "localhost.zone";
        allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "0.0.127.in-addr.arpa.zone";
        allow-update { none; };
};
};
4)编辑区域文件
redking.com.cnc.zone网通用户区域文件
image
redking.com.telecom.zone电信用户区域文件
image
7 DNS排错
7.1 rndc reload
使用rhdc reload命令重新加载配置文件,如果加载失败,说明配置文件出现错误,这些错误经常是缺少符号“;”或者“}”,当然如果出现“server reload successfull”这样的提示并不代表配置文件没有错误,它自带的检测机制只能检测语法有没错误,对于域或IP地址书写错误或规划时的逻辑错误无法检测。 
7.2 查看启动信息
service named restart,如果named服务无法正常启动,可以查看下提示信息。
7.3 查看端口
如果服务正常工作,则会开启TCP和UDP的53端口,可以使用netstat -an命令检测53端口是否正常工作。
netstat -an | grep 53
7.4 权限问题
为了提高安全性,经常使用chroot来改变BIND的根目录,但这时需要注意权限问题,当根目录发生改变时,该目录的权限可能为700,属主是root而不是named。这时当启动named时会遇到权限拒绝的提示。所以在使用chroot的时候需要注意权限不足所带来的问题。
############################################
PS:为了加快本专题更新速度,从下季开始将只更新各服务案例实战配置,相关原理将不涉及哈(有关原理网上都可以google和baidu,并且偶打字太慢了)。
############################################