第12章DNS服务器域名系统简介DNS服务器的安装与配置DNS服务器的配置实例教学提示:DNS服务器是把域名解析成IP地址的域名解析系统,Linux下的域名服务器软件包是BIND。本章涉及的内容主要有域名解析系统原理,DNS服务器安装与运行控制,各种DNS服务器配置。教学要求:学习完本章后,将了解域名解析系统原理,能够在UbuntuLinux系统安装与运行BIND软件,针对实际情况配置各种类型DNS服务器。域名系统简介在Internet中,对主机进行标识的方式是使用IP地址,源主机只有知道目的主机的IP地址才有可能进行通信。但是Internet当中的IP地址的数量非常大,我们记住所有要访问的主机的IP地址是很困难的,那么如何解决这个问题呢?我们可以给计算机起个“名字”,这就好比是记一个人的名字要比记住他的身份证号码要容易得多,如果名字还遵循一定的规律那就更好记了。Internet中对主机名有一套进行统一命名的方式,称为“域名”系统计算机域名和它的IP地址之间建立一定的映射关系,让这个映射的解析过程由计算机系统自动完成。我们把在Internet中对计算机进行标识的“名字”称为计算机“域名”,负责解析计算机域名的系统称为“域名系统DNS”(domainnamesystem)。它的工作原理可用图来简单表示。域名如:地址如:219.159.68.40Internet域名层次结构由于Internet当中主机数量巨大,全世界采用一台域名服务器进行解析是不现实的。因此,Internet中的域名系统采用一种层次结构,域名就是“唯一的层次结构的名字”。这里所说的“域”,是指层次化名字空间中的一个可被管理的区域,例如,“Ubuntu中文”的域名就是。这里的“cn”表示的是“中国内地地区”,“com”表示的是商业机构,“ubuntu”是Ubuntu官方自己注册的域名,“”则是这个域当中的一台主机。全球的域名系统组成一颗倒立的树型结构,如图所示。“sh”“cu”“com”“ubuntu”“.”根域名服务器“com”“yahoo”“cn”“edu”“net”用域名服务器进行域名解析任何一台主机,要想获得Internet的域名服务,必须为自己指定一个域名服务器的IP地址。然后,当该主机想解析域名时,就把域名解析的请求发送给该服务器,由该服务器完成解析过程。当域名服务器收到查询请求时,首先检查该名字是否在自己的管理域内,如果在,根据本地数据库中的对应关系将结果发回给源主机。如果查询的内容不在自己的管理域内,一般说来,有两种解析方法。1.迭代查询(interactiveresolution)该域名服务器不能提供解析的最终结果,它产生的回答指明了客户机应当联系的另外一台域名服务器的地址。一般另外的服务器就是该域的上级域名服务器地址(当然也可以是其他的服务器),这需要由管理员在该服务器中通过配置完成。用域名服务器进行域名解析2.递归查询(recursiveresolution)该域名服务器和能够解析该名字的服务器联系,直到解析完成,然后将最终解析的结果返回给客户机。任何一台域名服务器必须知道根域名服务器的地址,这样就能保证在递归查询中一定可以找到另外的域名服务器。用域名服务器进行域名解析例:域名解析过程。假设客户机要访问“Ubuntu英文”站点:,图13.2是域名解析过程示意图,过程如下:客户机向本地DNS服务器发出请求解析域名的报文;本地的DNS服务器收到请求后,查询本地缓存,假设没有该纪录,则本地DNS服务器则向根域名服务器发出请求解析域名;根域名服务器收到请求后查询根服务器记录,得到cn域的DNS服务器地址并把结果返回给本地DNS服务器;本地DNS服务器收到回应后,接着向cn域的DNS服务器发出请求解析域名的报文;cn域的DNS服务器收到请求后查询自身服务器记录,得到com.cn域的DNS服务器地址并把结果返回给本地服务器;依次类推,本地DNS服务器从ubuntu.com.cn域名服务器得到地址。本地DNS服务器将返回的结果保存到本地缓存,同时将结果返回给客户机。这样就完成了一次域名解析过程。DNS区域(Zone)为了便于根据实际情况来分散域名管理工作的负荷,将DNS域名空间划分为区域来进行管理。区域是DNS服务器的管辖范围,是由单个域或由具有上下隶属关系的紧密相邻的多个子域组成的一个管理单位。DNS服务器便是以区域为单位来管理域名空间的,而不是以域为单位。一台DNS服务器可以管理一个或多个区域,而一个区域也可以有多台DNS服务器来管理。DNS允许DNS名域空间分成几个区域(Zone),它存储着有关一个或多个DNS域的名称信息。在DNS服务器中必须先建立区域,再在区域中建立子域,以及在区域或子域中添加主机等各种记录。DNS区域有两种,正向区域与反向区域。反向地址解析我们除了需要将域名翻译成IP地址之外,有时候还需要将IP地址解析成对应的域名,这就是所说的反向地址解析。这样做往往是因为特殊的需要,例如,我们需要限制来自某些主机对我们的访问,但是不知道这些主机的具体地址范围,只知道他们的域名后缀,这个时候就可以直接使用域名了。当一台主机到来的时候,我们的主机依据其携带的主机地址信息通过反向地址解析查看其域名是否是在我们应该限制的范围,从而做出判断。当然,随着时间的推移,这方面的应用越来越少,在很多系统中已经不再建立反向地址解析记录。域名服务器分类常见的域名服务器主要有:主服务器、辅助服务器、高速缓存系统和转发域名服务器。另外,依据授权性质分为两大类:1.权威性服务器权威性服务器是一个区域的正式代表。主域名服务器(PrimaryNameServer)是区域数据的最根本的来源,是从本地硬盘文件中读取域的数据的,它是所有辅域名服务器进行域传输的源。主服务器对域中的域名有最高授权,并因为它们是域区间传送域区数据的唯一来源,就具有向任何一个甚至全部需要其数据的服务器发布域的信息的功能,因此也叫“管理服务器”。通常每个区都至少有一个主域名服务器,主域名服务器在DNS服务器配置文件/etc/bind/named.conf中由“znoe”语句中的“typemaster”变量来定义。辅域名服务器(SecondaryNameServer)通过“区域传输(zonetransfer)”从主服务器复制区数据,辅域名服务器可以提供必需的冗余服务。所有的辅域名服务器都应该写在这个域的NS记录中。残根域名服务器(StubNameServer)与辅域名服务器类似,但只复制NS记录而不复制主机数据。秘密域名服务器(StealthNameServer)并没有列在这个域的NS记录里,仅对于知道其IP地址的人可见。域名服务器分类2.非权威性服务器非权威性服务器用本地缓存数据应答查询请求,不知数据是否仍然有效。惟高速缓存服务器(Caching-onlyServer)可以将它收到的信息存储下来,并再将其提供给其它的用户进行查询,直到这些信息过期。它的配置中没有任何本地的授权域的配置信息。其实惟高速缓存服务器从下面将解析的“根数据文件”加载一些根服务器的地址,并缓存这些由根服务器解析的结果并不断累计。转发服务器(ForwardingServer)代替众多客户执行查询并创建一个大的缓存。与缓存服务器区别是缓存服务器本身不能进行完全的递归查询,而转发服务器能从缓存向其它的缓存服务器转发一部分或是所有不能满足的查询。安装DNS服务器BIND的全称是BerkeleyInternetNameDomain,是美国加利福尼亚大学伯克利分校开发的一个域名服务器软件包,这是目前最为流行的DNS协议实现。Ubuntu提供了当前最新的BIND9,使用如下命令安装BIND及其相关工具:student@Ubuntu:~$sudoapt-getinstallbind9bind9-docbind9-hostdnsutils其中bind9是主要的软件包,bind9-doc是帮助文档,bind9-host与dnsutils是DNS测试工具。DNS配置文件1.BIND主要配置文件Ubuntu中BIND9的配置文件存放在/etc/bind目录下。root@Ubuntu:/etc/bind#lsdb.0db.255db.localnamed.confnamed.conf.optionszones.rfc1918db.127db.emptydb.rootnamed.conf.localrndc.key2.DNS服务器相关配置文件要保证DNS服务器正常运行,除了配置BIND相关配置文件外,还要保证本机的各项TCP/IP参数的设置正确,否则即使BIND配置成功,DNS服务器也可能无法正常工作。首先在保证网络参数配置成功,其它相关配置文件如下。(1)/etc/resolv.conf文件。文件/etc/resolv.conf列出了主机应该查询的DNS服务器。root@Ubuntu:#cat/etc/resolv.confnameserver192.168.0.5nameserver202.103.224.68domainubuntu.netsearchstudy.ubuntu.netubuntu.net(2)/etc/host.conf文件文件/etc/host.conf是用来控制本地DNS解析器的设置文件。该文件告诉本地DNS解析器使用哪些服务以及按照什么顺序进行查询。root@Ubuntu:#cat/etc/host.conforderbindhostsmultioffUbuntuDNS默认配置1./etc/bind/named.conf文件(1)named.conf是bind的主配置文件。root@Ubuntu:/etc/bind#catnamed.conf┆//Ifyouarejustaddingzones,pleasedothatin/etc/bind/named.conf.local//包含选项配置文件/etc/bind/named.conf.optionsinclude/etc/bind/named.conf.options;//根区域声明zone.{typehint;file/etc/bind/db.root;//指定根服务器数据文件};UbuntuDNS默认配置1./etc/bind/named.conf文件(1)named.conf是bind的主配置文件。//localhost正向区域声明zonelocalhost{typemaster;file/etc/bind/db.local;};//localhost反向区域声明zone0.127.in-addr.arpa{//IP网段反向排序加上in-addr.arpa是反向区域声明固定用法typemaster;file/etc/bind/db.127.0;};┆//包含本机解析的权威区声明文件,初始配置此文件为空include/etc/bind/named.conf.local;(2)zone语句zone区域声明是主配置文件中最重要的部分。zone语句的格式为:zone“zone-name”IN{type“类型”;file“文件”;其他语句;};2./etc/bind/named.conf.options文件Ubuntu将named.conf的部分语句(主要为options语句)从主配置文件中分离放置于named.conf.options。配置named的全局参数时,可以修改此文件。root@Ubuntu:/etc/bind#cat/etc/bind/named.conf.options//options语句设立可以被整个BIND使用的全局选项。若没有options语句,则每个选项使用缺省值。o