DNS(Domain Name Server),中文名称为域名服务或者域名解析系统。DNS主要功能是把域名解析为IP地址。 DNS是一个比较复杂的系统。在LINUX下面架设DNS服务器,必须要掌握DNS的原理和有关知识,包括域名结构、解析过程、资源记录等。
13.1 DNS服务概述
13.1.1 域名空间与DNS工作原理
网络中为了区别各个主机,必须为每台主机分配一个惟一的地址,即IP地址。为了帮助记忆,人们采用了域名的方式来代替这些难记的IP地址,这种利用域名代表IP地址的解决方案就是DNS域名解析系统。比如140.115.83.240 就是一个IP 地址,但是这一长串的 IP 并不好记,因此操作者可以用类似bbs.mgt.ncu.edu.tw这样比较好记的名字来代替IP 地址,它的含义就是台湾 (tw) 的中央大学 (ncu) 管理学院 (mgt) 所属的电子布告栏服务器 (bbs)。DNS是一个分布式数据库,命名系统采用层次的逻辑结构,如同一棵倒置的树,这个逻辑的树形结构称为域名空间,由于DNS划分了域名空间,所以各机构可以使用自己的域名空间创建DNS信息,如图 13-1 DNS域名空间所示:
13.1.1 域名空间与DNS工作原理
DNS域名空间是有层次的,域是其层次结构的基本单位,任何一个域最多属于一个上级域,但可以有多个或没有下级域。在同一个域中不能有相同的下级域或主机名,但在不同的域中则可以有相同的下级域名或主机名。
图 13?1 DNS域名空间
13.1.1 域名空间与DNS工作原理
1. 根域(Root Domain):根域只有一个,根域是默认的,一般不需要表示出来。DNS命名空间是由位于美国的INTERNIC负责管理并进行授权管理的。在根域服务器中并没有保存全世界的所有的DNS名称,它只保存着顶级域的DNS服务器名称与IP地址的对应关系。每一层的DNS服务器只负责管理其下一层域的DNS服务器名称与IP地址的对应关系。 2. 顶级域(Top-Level Domain:TLD):在根域之下的第一级域便是顶级域。顶级域位于完全合格域名(FQDN)最右边。顶级域有三类:机构域、地理域及新顶级域。机构域也就是人们常说的国际域名,如.com、.net等;地理域一般也叫国内域名,共243个,如.cn、.uk等;新顶级域即个性化域名,如.ibm、.hp、.qq、.baidu等等,一个形像的比喻就是这些域名结尾的所有者在某种意义上就是一个域名注册局,所以从某种意义上来说,以后将会有无穷多的“国际域名”。新顶级域方案虽然已经被通过,但现在尚未正式启用。常见的国际顶级域名及描述如下:
13.1.1 域名空间与DNS工作原理
.com: 表示商业机构 .net: 表示网络服务机构 .org: 表示非营利性组织 .gov :表示政府机构 .edu: 表示教育机构 .mil: 表示军事机构 .name: 表示个人网站 .info: 表示提供信息服务的机构 3. 子域:除了根域和顶级域之外,其它域均称为子域。一个域可以有多个子域。通常人们把顶级域的下级称为二级域。
13.1.1 域名空间与DNS工作原理
4. 主机名(Host Name):FQDN最左侧的便是主机名。 在Internet中,存在着多种类型的DNS服务器,它们所起的作用是不同的。根据功能和类型来划分DNS服务器,一般可分为四类,分别是: 1) 主DNS(Master/Primary)服务器:在Internet上,一个域下的计算机名称要由一台DNS服务器提供权威性的域名解析。如在.gnu.org域下有www、ftp、smtp等主机,这些主机的全名就分别是: www.gnu.org. ftp.gnu.org. smtp.gnu.org. 这些域名与其对应的IP地址关系都以文件的形式存放在负责.gnu.org.的DNS服务器上,当其他计算机来查询时,这些信息都可以提被供出去。这个服务器就是本域的主DNS服务器。这里的权威性指的是其管理的域中所有的主机名称记录是由这台服务器唯一决定的。在Internet上,其他DNS服务器上都可能保存有该域名的记录,但那些记录是从这台主DNS服务器上查询的结果,被保存在服务器的缓存中。一旦主DNS服务器中的记录产生变化,以后的查询结果就都不一样了。
13.1.1 域名空间与DNS工作原理
2) 辅助(Slave/Secondary)域名服务器:辅助域名服务器可以从主域名服务器中获取一整套的域信息。所有的信息都是从主域名服务器中得到的,这些数据都会拷贝到本地的磁盘文件中。辅助域名服务器将在主服务器不能正常工作的情况下起到备份的作用,从而提高了整个系统的可靠性。它将会定期地对备份的数据进行更新,从而保持与主域名服务器的一致性。在辅助域名服务器上,由于保持了域的完整信息,因此也可以权威地回答DNS的查询请求。 3) 惟高速(Caching only)缓存域名服务器:惟高速缓存服务器总是从其他域名服务器中取得查询结果,然后将这些结果保存到本地的缓存文件中,以后当需要查询相同信息的时候,就可以从缓存中直接获得结果。查询结果保存在缓存中的时间将由数据附带的TTL来指定,当时间超过时,系统会自动删除这条结果。也就是说,一条DNS记录在惟高速缓存服务器中的生存时间是由管理(发布)这个记录的主域名服务器决定的。惟高速缓存服务器大大提高了DNS服务的响应速度,在真正
13.1.1 域名空间与DNS工作原理
需要去Internet上查询之前,DNS服务器都会先检查本地的缓存,看看是否有所需的记录。 4) 转发(Forward)服务器:转发DNS服务器可以将其它DNS转发解析请求,当DNS服务器收到客户端的解析请求后。它首先会尝试从其本地数据库中查找,若没有找到,则需要向其它指定的DNS服务器转发解析请求;其它DNS服务器完成解析后会返回解析结果,转发DNS服务器将解析结果缓存在自己的DNS缓存中,并向客户端返回解析结果。在缓存期内,如果客户端请求解析相同的名称,则转发DNS服务器会立即回应客户端;否则将会再次发生转发解析的过程。
13.1.2 DNS查询与解析
当DNS客户端向DNS服务器查询地址时,其查询模式有两种: 1. 递归查询:当DNS客户端向DNS服务端发出查询请求后,服务器端必须有一个准确的查询结果回复客户端,如果DNS服务器内没有所需的数据,则DNS服务器会替客户端向其他的DNS服务器查询。一般由DNS客户端所提出的查询请求属于递归查询。 2. 迭代查询:DNS服务器会向客户机提供其他能够解析查询请求的DNS服务器地址,当客户机发送查询请求时,DNS服务器并不直接回复查询结果,而是告诉客户机另一台DNS服务器地址,客户机再向这台DNS服务器提交请求,依次循环直到返回查询的结果为止。如果最后一台DNS服务器也没有查询到数据,则通知DNS客户端查询失败。一般在DNS服务器之间的查询属于迭代查询。此时第一台DNS服务器承担着DNS客户端的角色。
13.1.2 DNS查询与解析
在图 13-2中读者可以清晰的看到客户端查询ex.china.com.的流程,DNS客户端与服务器之间的查询为递归查询,发生在服务器之间的查询为迭代查询。当DNS客户端访问ex.china.cn时,其解析过程一般如下: 1. 客户端向DNS服务端提出访问请求,比如ex.china.cn。
图 13?2 DNS查询过程
13.1.2 DNS查询与解析
2. 当DNS服务端收到请求后,就先查询本地的缓存。如果查询到DNS信息记录,则直接返回查询的结果。如果没有该记录,DNS服务端就把请求发给根域名服务器。 3. 根域名服务器再返回给DNS服务端一个所查询域的顶级“.cn”域名服务器的地址。 4. DNS服务端再向“.cn”域名服务器发送请求。 5. “.cn”服务器接收到查询请求后,查询其缓存,如果有相关信息则返回查询结果,否则返回下级的“.china.cn”域名服务器的地址。 6. DNS服务端再向“.china.cn”域名服务器发送请求。 7. 如果查到到正确数据,则返回DNS服务端查询结果。如果该域名服务器不包含查询的DNS信息,则返回解析失败的信息。 8. DNS服务端把返回的结果保存到缓存,并将结果返回到DNS客户端。
DNS服务器之所以能够解析名称,是因为在其数据库中包含有要解析的名称的相关数据和记录,称为资源记录。Linux下配置DNS服务器,可以看作是对数据库文件内容的更改和设定。
13.2 DNS服务器配置
13.2.1 DNS服务器配置基础
RHEL 5中实现DNS服务功能由BIND软件来实现,它的含义是Berkeley Internet Name Domain。BIND最初是为BSD操作系统开发的一套网络域名服务系统,由伯克利大学开发并主持,目前为ISC(Internet Systems Consortium)组织负责维护。当前世界上约大多数的DNS服务器均用BIND来架设。
1. DNS的软件包: 默认情况下,RHEL 5并没有安装DNS服务。RHEL 5下的DNS服务器,一般包括以下软件包,用户可根据自己要搭建的不同类型的DNS服务器来选择安装相应的软件包即可。
13.2.1 DNS服务器配置基础
2. DNS的启动与停止: DNS的运行相关命令是:
3. DNS服务相关文件: 在DNS服务中,需要大量的文件来支持,这些文件各自的含义不同,需要牢牢掌握。 主要配置文件有: DNS主配置文件:/var/named/chroot/etc/named.conf。 惟高速缓存服务器的主配置文件:/var/named/chroot/etc/named.caching-nameserver.conf。
13.2.1 DNS服务器配置基础
区域文件:/var/named/chroot/var/named/named.rfc1912.zones。 其它辅助文件和程序有: /etc/hosts:主机名表,用于简单的域名解析。 /usr/sbin/named-bootconf:域名服务器的启动配置脚本。 /usr/sbin/named:域名服务器的守护进程。 /usr/sbin/named-checkconf:域名服务器的配置语法检验程序。 /usr/sbin/named-checkzone:域名服务器的区域配置文件检验程序。 /usr/sbin/dns-keygen:DNS加密密钥生成程序。 /usr/sbin/dnssec-keygen:动态密钥生成程序,对 DNS 进行的服务可执行数据源验证和完整性检查。
13.2.1 DNS服务器配置基础
/usr/sbin/dnssec-signzone: 生成带有签名的区域文件。 /usr/sbin/rndc:域名服务器的控制程序,可以使用/etc/rndc.conf文件加载相关配置。 /usr/sbin/lwresd:轻量级的解析服务器,可以作为缓冲域名服务器。 在BIND9中,采用了chroot技术来保护DNS的安全。chroot可以改变程序运行时所参考的根目录位置,即将某个指定的子目录作为程序的虚拟根目录,并且对程序运行时可以使用的系统资源及用户权限和所在目录进行严格控制,程序只在这个虚拟的根目录中具有权限,一旦跳出该目录就无任何权限。例如在RHEL5中,/var/name/实际上是根目录(/)的虚拟目录。chroot功能的优点是:如果骇客通过BIND侵入系统,也只能被限定在chroot目录及其子目录中,其破坏力也仅局限在该虚拟目录中,不会威胁到整个服务器的安全。
13.2.1 DNS服务器配置基础
对于DNS主配置文件,即/var/named/chroot/etc/named.conf,BIND9中也有特殊的约定:系统在安装时并未建立此文件,用户可以通过以下任意一种方法建立: 安装缓存域名服务器caching-nameserver-9.3.4-6.P1.el5.i386.rpm软件包,并根据所生成的文件/var/named/chroot/etc/named.caching-nameserver.conf作为参考来建立主配置文件。 安装完bind-9.3.4-6.P1.el5.i386.rpm后,参考/usr/share/doc/bind-9.3.4/sample/etc/named.conf文件,建立生成主配置文件。 安装图形化配置工具软件包,即system-config-bind-4.0.3-2.el5.noarch.rpm,复制/usr/share/system-config-bind/profiles/default/named.conf为/var/named/chroot/etc/named.conf。
13.2.1 DNS服务器配置基础
在启动DNS服务时,为了与以前的版本相兼容,系统默认读取的配置文件是/etc/named.conf,此文件应连接至/var/named/chroot/etc/named.conf,如果此文件不存在,那么系统尝试读取:/var/named/chroot/etc/named.conf以及/var/named/chroot/etc/named.caching-nameserver.conf这两个文件。
13.2.2 DNS的配置
1. 惟高速缓存域名服务器的配置: 所谓惟高速缓存域名服务器,是指服务器上只运行服务器软件,并不建立数据库文件。当客户机通过此服务器查询数据时,该服务器从其它域名服务器获得结果,将返回结果告知客户的同时把停息保存到高速缓存中。以后有客户要查询同样的内容时,直接将结果返回给客户。网络上大部分DNS服务器均为惟高速缓存域名服务器,客户端从惟高速缓存域名服务器获得的数据并非权威数据。 要配置缓存域名服务器,必须要安装caching-nameserver-9.3.4-6.P1.el5.i386.rpm,然后启动DNS服务即可。此时缓存数据保存在/etc/named/chroot/var/named/data/cache_dump.db中。 2. 主DNS服务器的配置: 主DNS服务器的配置,步骤较复杂,内容较多,操作者必须要掌握DNS的配置文件的格式及其含义。配置过程如下:
定义反向解析区域
(4)新建区域文件test.com.zone: 区域文件格式较复杂,格式要求严格,用户可以通过原来存在的类似文件来创建此文件。
一个配置好的test.com.zone内容如下:
该区域文件详解如下: $ttl 86400:定义允许客户端缓存来自查询的数据的默认时间,单位是秒,通常应将它放在文件的第1行。如果数据不是经常变动的,可以考虑把它的值设为几天,否则设置得太小(如几个小时)会引起不必要的DNS查询流量。区域文件的时间数字都默认以秒为单位,为了方便理解,也可以用H(小时)、D(天)和W(星期)来作单位,86400和24H的表示方式是一样的。
@:默认代表本区域,即test.com.。 IN:代表类型属于Internet类,这个格式是固定不可改变的。 SOA:Start of Authority(起始授权机构)的缩写,它是主要名称服务器区域文件中必须要设定的资源记录,它表示创建它的DNS服务器是主要名称服务器。SOA资源记录定义了域名数据的基本信息和其他属性(更新或过期间隔)。通常应将SOA资源记录放在区域文件的第1行或紧跟在$ttl选项之后。 ns.test.com.:定义了负责该区域的名称解析的授权主机名,这样DNS服务器才会知道谁控制这个区域。授权主机名称必须在区域文件中有一个A资源记录。在例子中的 “ns”主机号(末尾没有句点号)资源记录使用了相对名称,Bind会自动在其后面添加“.test.com”。此规则对区域文件中所有语句都适用。
13.2.2 DNS的配置
注意:在配置文件中,完整的主机地址末尾要加上一个点,以表示这是一个完整的主机名,这是因为任何末尾没加“.”的名称都会被视为本区域内的相对域名,如“www.test.com”(末尾没有点)会被当成“www.test.com.test.com.”解析。此规则对区域文件中的所有语句都适用。 master.test.com.:设置管理员的邮箱地址。如“master.test.com.”定义了负责该区域的管理员邮箱地址。由于已经在前面使用了符号“@”代表本区域的名称,因此管理员邮箱使用“.”代替“@”。 ; serial :序列号,一般格式为“日期 当日修改的次数”,如“2009070213”,但不能超过十位数。序列号用于标识该区域的数据是否有更新,当辅助DNS服务器与主DNS服务器联系并进行数据更新时,就会比较这个数值。如果发现在这里的数值比它最后一次更新时的数值大,就进行区域复制操作,否则放弃区域复制操作,所以每次修改完主区域文件后都应增加序列号的值。
13.2.2 DNS的配置
3H ; refresh:定义更新间隔,即规定辅助域名服务器多长时间查询一个主服务器,从主服务器获得最新数据,以保证辅助服务器的数据是最新的。 15M ; retry:定义了重试间隔的值。重试间隔用于定义辅助名称服务器在更新间隔到期后,仍然无法与主名称服务器取得联系时,重试区域复制的间隔。通常该间隔应小于更新间隔。 1W ; expiry:定义过期时间的值。过期时间用于定义辅助名称服务器在该时间内一直不能与主要名称服务器取得联系时,则放弃重试并丢这个区域的数据(因为这些数据有可能失效或错误)。 1D ) ; minimum:定义了最小默认TTL的值。最小默认TTL定义允许辅助名称服务器缓存查询数据的默认时间。如果文件开头没有“$ttl”选项,则以此值为准。
13.2.2 DNS的配置
IN NS ns.test.com. :定义名称服务器NS资源记录。名称服务器NS(Name Server)资源记录定义了该域名由哪个DNS服务器负责解析,NS资源记录定义的服务器称为区域权威名称服务器。权威名称服务器负责维护和管理所管辖区域中的数据,它被其他服务器或客户端当作权威的来源,为DNS客户端提供数据查询,并且能肯定应答区域内所含名称的查询。 IN MX 5 mail.test.com. :定义邮件服务器。即发往@域,也就是test.com.域的邮件全部由mail.test.com.来处理。MX后面的数值越小越优先。当邮件传送给优先级高的邮件服务器失败时,可以把它传送给优先级低的邮件服务器。 ns IN A 10.2.2.1:定义主机地址A资源记录,主机地址A(Address)资源记录是最常用的记录,它定义了DNS域名对应IP地址的信息。在上面的例子中,Bind会自动在名称的后面加上后缀“.test.com.”,所以相当于完全规范域名的“ns.test.com.”。即
13.2.2 DNS的配置
“ns.test.com.”的IP地址为10.2.2.1。 ftp IN CNAME www.test.com. :CNAME为指定别名。别名CNAME(Canonical Name)资源记录也被称为规范名字资源记录。CNAME资源记录允许将多个名称映射到同一台计算机上,使得某些任务更容易执行。本例中ftp.test.com.的地址等同www.test.com.地址。 (5)检查无误后,使用以下任何一种方法使DNS生效:
(6)如要继续添加其它域的解析,只要在/etc/named.conf中添加上区域定义,并在/var/named/chroot/var/named中添加指定的区域文件即可。
13.2.3 DNS的其它应用
1. 实现简单负载均衡: 当前网络规模越来越大,服务器的负担也变得越来越重,一台服务器要同时应答上百万上千万用户发起的请求,必然会导致服务器运行效率变低,响应时间过长。DNS负载均衡的优点是经济简单易行,它在DNS服务器中为同一个域名配置多个IP地址,在应答DNS查询时,DNS服务器对每个查询会以DNS文件中主机记录的IP地址随机返回不同的解析结果,使得不同的客户端访问不同的服务器,从而达到负载均衡的目的。 比如一个企业的www主机因客户访问量较大,同时需要5台内容相同的服务器为客户提供服务,那么只需要在区域文件里加上资源记录即可,如下:
13.2.3 DNS的其它应用
这样当有不同客户来访问www主机时,DNS解析系统以指定顺序来响应用户的解析请求,实现了将客户机的访问分担到每个www主机上的负载均衡功能。 2. 泛域名的解析: 泛域名是指一个域名下的所有主机和子域名都被解析到同一个IP地址上,这对增加一个网站的访问量是大有好处的。比如当一个客户访问“abcdefg.test.com”或者“123aafasww.test.com”,均可解析到指定的某一个IP,实现方法如下:
1. Windows客户端的设置: Windows客户端的配置十分简单,可参看图 12-3 Windows客户端设置,选中【使用下面的DNS地址】,在DNS处填写内容即可。比如首选DNS填写10.2.2.1(用于内网解析),备用DNS填写202.106.0.20(用于公网解析),单击【确定】后即完成Windows客户端的设置。
13.3 DNS客户端配置
2. Linux中DNS客户端的设置: 在Linux中配置DNS客户端只要编辑文件/etc/resolv.conf文件即可,使用nameserver选项来指定DNS服务器的IP地址,比如:
13.3 DNS客户端配置
完成主要名称服务器的配置后,应该对其进行测试,以保证其正确性。
13.4 DNS的检测
13.4.1 使用nslookup与dig进行检测
DNS配置完毕后,必须要进行测试,测试结果正确无误后才可公布服务,对DNS的测试与检测通常使用系统自带的nslookup与dig来完成。 1. 启动DNS服务器:
2. 配置客户机DNS服务器地址:编辑客户机/etc/resolv.conf文件如下:
/etc/resolv.conf文件编辑完毕后即生效,不必重新启动。
13.4.1 使用nslookup与dig进行检测
(1)非交互式通常用于返回单块数据的情况,其格式为:nslookup [-选项] 需查询的域名 [DNS服务器地址]如果没有指明nslookup要使用DNS服务器地址,则nsookup使用/etc/resolv.conf文件定义的DNS服务进行查询。非交互式nslookup程序运行完后,就会返回Shell提示符下,如果要查询另外一条记录,则需要重新执行该程序。
3. 在客户机使用nslookup程序测试: nslookup程序是DNS服务的主要诊断工具之一,它的功能主要是执行DNS服务查询、测试及显示详细信息。nslookup有两种运行模式:非交互式和交互式。
(2)交互式通常用于返回多块数据的情况,其命令格式为: nslookup [- DNS服务器地址] 运行交互式nslookup程序,在提示符“>”后可输入nslookup的各种命令、需查询的域名。查询完一条记录后可接着在“>”后输入新的查询,使用exit命令可退出nslookup程序。
4. 使用dig命令进行测试: dig 是 UNIX/BSD 系统自带的 DNS 诊断工具,使用十分灵活,功能强大,被许多 DNS 管理员用来做 DNS 诊断的工具。 dig的格式为: dig [@服务器] 域 [查询-类型] [查询-类] [ 查询-选项] [-dig-选项] [%注释] dig 是完全命令行的工具,使用者需要记得各个选项的用法。如果忘记可以使用