故障分析-在NT上安装和设置DNS服务器 [1]

在NT上安装和设置DNS服务器

WINS服务器主要用于NetBIOS名字解析,它处理的是NetBIOS计算机名(Computer Name)与IP地址的对应关系。本文将要介绍的DNS(Domain Name System)服务器则主要用于域名解析,它处理的是域名与IP地址的对应关系。“DNS服务器”也叫做“域名服务器”、“名称服务器”等,在NT的DHCP、WINS、DNS三种服务中,DNS是较为复杂的。DNS服务器是在Internet上的一台机器,也可以是本地的。

一. 理解层次化的DNS域名空间

1. DNS域名空间的结构
这里的DNS域名空间就是指全世界Internet网中的名字空间,它包括全世界的所有Internet网址(全域名)。NetBIOS名是一种非层次的名字空间,与此相反,DNS域名空间则是一种层次化的名字空间,其结构是一种阶层式的树状结构。

2. Internet域(Internet Domain)
在Internet网的DNS域名空间中,域是其层次结构的基本单位,任何一个域最多只能有一个上级域,但可以有多个或没有下级域。在同一个域下不能有相同的域名或主机名,但在不同的域中则可以有相同的域名或主机名,这便克服了非层次的NetBIOS名字空间的不足。需要注意的是,这里的域和NT网中的“NT域”是不同的,“NT域”是集中管理NT网中的计算机和用户资源的一个逻辑单元。在本文中,所有NT网中的域都称为“NT域”,而单独的“域”或“DNS域”都是指Internet域。

3. 根域(Root Domain)
在DNS域名空间中,根域只有一个,它没有上级域,以原点“.”来表示。在Internet网址中,根域是默认的,一般都不需要表示出来。全世界的IP地址和DNS域名空间都是由位于美国的InterNIC(Internet Network Information Center,因特网信息管理中心)管理的。根域也位于美国,由InterNIC管理。在根域中有许多台服务器,称为根域(名称)服务器(root domain name server)。根域中的服务器现在至少有13台,此后可能更多。
在根域服务器中并没有保存全世界的所有Internet网址,其中只保存着顶级域的“DNS服务器-IP地址”的对应数据。在域名空间的各个层次中都是这样,每一层的DNS服务器只负责管理其下一层的“DNS服务器-IP地址”的对应数据,全世界的DNS便是这样一个巨大的分布式数据库。这一点很重要,它可以使一台DNS服务器不至于管理过多的主机名,从而达到均衡网络负荷、方便查询和加快查询速度的目的。

4. 顶级域(top-level domain,TLD)
在根域之下的第一级域便是顶级域,它以根域为上级域,其数目有限且不能轻易变动。顶级域是由InterNIC统一管理的,有些顶级域有自己的DNS服务器,其它的顶级域则是由根域中的DNS服务器管理的。在Internet网址(全域名)中,各级域之间都以原点“.”分开,顶级域位于最后面。在Internet网中,现有的顶级域大致分为两类:各种组织的顶级域和各个国家地区的顶级域。如“.net”、“.com”等是各种组织的顶级域、“.cn”、“.us”等是各个国家地区的顶级域。

5. 各级子域(Subdomain)
在DNS域名空间中,除了根域和顶级域之外,其它域都称为子域,子域是有上级域的域,一个域可以有许多层子域。在已经申请成功的域名下,一般都可以按自己的需要来设置一层或多层子域。在Internet网址中,除了最右边的顶级域外其余的域都是子域。另外,子域也是相对而言的。如http://www.microsoft.com/中的“.com.cn”是顶级域“.cn”的子域、而“.hardware.com.cn”又是“.com.cn”的子域。

6. 域主机名(Host Name)
在DNS域名空间中,位于最下面的一层便是域主机名,我们平时简称为主机名,它没有下级子域,也称为叶子。在Internet网址中,位于最前面的便是域主机名。在已经申请成功的域名中,域主机名一般都可以按自己的需要来设置。如,NT服务器的域主机名是SERVER1,域名是heyuan.gd.cninfo.net,则Internet网址(全域名)便是server1.heyuan.cninfo.net,www和mails又是该域下面的两台服务器。
我们可以在NT的MS-DOS方式下使用hostname.exe命令来查看域主机名。不过人们一般都是使用完整的域名FQDN(Fully Qualitied Domain Name) 来表示一台主机,所以主机名有时是指全域名(域主机名.域名)。

7. 区域(Zone)
为了便于根据实际情况来分散域名管理工作的负荷,人们将DNS域名空间划分为区域来进行管理。区域是由同级或不同级的多个子域组成的一个管理单位。DNS服务器便是以区域为单位来管理域名空间的,而不是以域为单位。一台DNS服务器可以管理一个或多个区域,而一个区域也可以有多台DNS服务器来管理。

8. 关于域名的申请
一般说来,Internet网中的域名和IP地址都必须事先向有关部门申请批准后才能投入使用,并且不能申请顶级域,只能申请顶级域之下的子域。我们平时所谓的“申请顶级域名”,其实并不是指能够申请真正的顶级域,而是申请到顶级域下面的第一级子域名,如xxx.163.net、www.yourname.com等,而多数的还只是虚拟域名,如网易提供的yourname.126.com等。在申请成功的域下建立的子域不用申请。如果你不想让人们从Internet上访问你的网络的话,你就用不着申请而可以使用任意的域名和IP地址,此时本地网络也可以访问Internet。

二. 有关DNS服务器的几个概念

1. 有关名称服务器的概念

“授权名称服务器”(authoritative name server):一台DNS服务器可以管辖一个或多个区域,我们称这台DNS服务器是这些区域的“授权名称服务器”,也称为“授权DNS服务器”。“授权名称服务器”负责管理和维护所管辖区域中的有关数据,并将这些数据提供给查询数据的工作站。
“主名称服务器”(Primary name server)和“辅名称服务器”(Secondary name server):
在网络中采用多台DNS服务器,可以提供容错能力和均衡网络负荷。在这些DNS服务器中,“主名称服务器”保存着自主生成的区域数据,当区域中的数据更改时(如添加或删除主机),这些变动都会保存到“主名称服务器”的数据中。“辅名称服务器”中的数据则是从其他服务器(可以是“主”或“辅名称服务器”)上复制过来的,这个复制动作称为“区域传输”(Zone transfer)。当“辅名称服务器”启动时便会自动执行“区域传输”操作,此后还会定期执行“区域传输”操作。
“前向名称服务器”(Forwarder name server)和“从属名称服务器”(Slave name server):当DNS服务器收到工作站的查询请求后,它会尝试从其数据库中查找,若未找到,便需要向其它DNS服务器查询。这时便涉及到DNS服务器是否可以直接向外界的DNS服务器查询数据的问题。只有“前向名称服务器”才可以直接向外界的DNS服务器查询数据,其它的DNS服务器必须被设置成利用此“前向名称服务器”传送数据,才可以通过“前向名称服务器”向外界查询数据;“从属名称服务器”则不能直接从外界查询数据,而只能依靠“前向名称服务器”从外界查询数据。这些,可以在“DNS管理器”中进行设置。
“缓存名称服务器”(Cache-Only name server):“缓存名称服务器”不负责管理任何区域,它只是响应DNS工作站的查询请求并将查到的数据保存一份到高速缓存里,以便下次能够快速查询相同的数据。
2. 有关查询模式的概念

当DNS工作站向DNS服务器查询数据时,或者DNS服务器(DNS服务器也可以作为DNS工作站)向另外的DNS服务器查询数据时,总共有三种不同的查询模式:

递归查询(Recursive Query):当收到DNS工作站的查询请求后,DNS服务器只会向DNS工作站返回两种信息:要么是在该DNS服务器上查到的结果、要么是查询失败。该DNS服务器不会主动地告诉DNS工作站另外的DNS服务器的地址,而需要DNS工作站自行向该DNS服务器询问。“递归”的意思就是有来有往,并且来、往的次数是一致的。一般由DNS工作站提出的查询请求便属于递归查询。
转寄查询(Iterative Query):当收到DNS工作站的查询请求后,如果在DNS服务器中没有查到所需数据,该DNS服务器便会告诉DNS工作站另外一台DNS服务器的IP地址,然后,再由DNS工作站自行向此DNS服务器查询,依次类推一直到查到所需数据为止。如果到最后一台DNS服务器都没有查到所需数据,则通知DNS工作站查询失败。“转寄”的意思就是,若在某地查不到,该地就会告诉你其它地方的地址,让你转到其它地方去查。一般在DNS服务器之间的查询请求便属于转寄查询(DNS服务器也可以充当DNS工作站的角色)。
反向查询(Reverse Query):从名字查询IP地址一般称为正查,而反向查询则是从IP地址来查询名字。
3. 高速缓存与TTL时间

● 什么是TTL(Time-to-Live)时间
当DNS服务器查获数据后,它除了将此数据提供给DNS工作站外,还会将此数据保存一份到高速缓存(Cache)中,以便下次能够快速查询相同的数据。但该数据只能在高速缓存中保存一段时间,这段时间便称为TTL时间(生存时间),它的长短是由DNS管理员所设定的。只要一份数据往高速缓存里保存后,TTL时间就开始递减,当TTL时间递减为0时,DNS服务器便将此数据从高速缓存里清除掉。

● TTL时间的继承
如果DNS工作站所查询的数据是由DNS服务器从高速缓存中提供的,当DNS工作站收到此数据后,也会将此数据往高速缓存里保存一份,不过其TTL时间将会继承在DNS服务器中的TTL时间。比如,在DNS服务器中的此数据的TTL时间还剩下1分钟,当此数据被保存到DNS工作站的高速缓存中后,此数据的TTL时间也只剩下1分钟。

三. DNS数据库文件

在DNS数据库文件中,包含着“域名-IP地址”的对应数据以及其它有关数据,这些数据称为资源记录(Resource Record)。这些数据文件一般都存放在\WINNT\System32\DNS目录中,它们包括以下几类。

1. 区域文件(Zone File)
区域文件中保存着DNS服务器所管辖区域内的有关资源记录。在后面,当你利用“DNS管理器”新建区域时,区域文件便会自动生成,默认的文件名是“区域名.dns”。

2. 缓存文件(Cache File)
注意,缓存文件和缓存是不同的两回事,高速缓存中保存的是已查到的数据,以便下次能够快速查询相同的数据。而在缓存文件中保存的是根域中DNS服务器的“域名-IP地址”的对应数据。在网络中,每台DNS服务器中的缓存文件都应该是一样的,它是DNS服务器查询外界Internet主机的IP地址时用的。
当你安装了微软的DNS服务器时,根域(Root Domain)中的缓存文件将会自动复制到\WINNT\System32\DNS目录中,文件名是Cache.dns。如果你想得到目前最新的缓存文件,可以到以下网站上查得:ftp://rs.internic.net/domain/named.cache或http://www.internic.net/cgi-bin/whoiswhois_nic=cache.dns。在文件Cache.dns中,以分号“;”开始的是注释行,每台根域服务器都包含一条NS记录和一条A记录,从中也可以看到根域服务器的台数是A~M,共13台。
如果你并不想将本地网络连入Internet,你就应该删除该缓存文件。然后在你的私有网络中重新建立一个缓存文件,新的缓存文件中应该包含你的私有网络中最上层(Root)的DNS服务器的“域名-IP地址”的对应数据。

3. 反向查询文件(Reverse Lookup File)
进行名字解析时,一般是用名字来查询IP地址,若需要用IP地址来查询名字,就称为反向查询。这需要事先建立一个特殊的反向查询区域和相应的反向查询文件。

4. 引导文件(Boot File)
引导文件是一个文本文件,它使用文本格式的命令和说明来设置一台DNS服务器。引导文件只用在美国加州大学柏克来分校所研制出来的BIND DNS服务器上,只有在你需要将BIND DNS服务器移植到微软DNS服务器时,才有必要使用该文件。BIND是Berkeley Internet Name Daemon的缩写,可翻译为“柏克来域名服务程序”。在微软DNS服务器上则不需要使用该文件。

四. 关于Host文件

1. HOSTS文件的内容和位置
严格地说,HOSTS文件并不属于DNS的数据库文件,所以在这里单独列出来。该文件的文件名是HOSTS(没有扩展名),它是UNIX格式的纯文本文件,其中的名字要区分大小写,其中包含的是域名(Host Name)与IP地址的对照表,可参见HOSTS文件中的注释(以“#”号开始的行)。
在NT中HOSTS文件位于\WINNT\system32\drivers\etc目录下;在Windows 9x中位于安装的Windows目录下。使用时,如果存放地只存在HOSTS.SAM文件,便需要将其更名为不带扩展名的HOSTS。

2. 使用Hosts文件的利弊
在工作站上安装了TCP/IP协议之后,不管是否指定了可用的DNS服务器,在名字解析时都会首先去查询本地HOSTS文件,指定DNS服务器后,也是在先查询本地HOSTS文件再查询DNS服务器。此方式也可以跨越路由器访问其他子网中的计算机。注意,在名字解析时只会查询本地HOSTS文件,不会去查询其它机器上的HOSTS文件。
HOSTS文件查询方式只是互联网中最初使用的一种查询方式,现在已很少使用,它只适用于小型网络,因为必须由人工输入、删除、修改所有域名与IP地址的对应数据,并保持网络里所有主机中的HOSTS文件的一致性,在大型网络中这将是一项沉重的负担。启用HOSTS文件之后,如果有时不能连接某些网站的话,也有可能是HOSTS文件出了问题。所以,我们推荐少用或者不用HOSTS文件,不用的话可将该文件更名或删除。

3. HOSTS文件的替代方法
作为HOSTS文件的一种替代方法,你可以用“PING <网址>”来查获经常浏览的站点的IP地址,然后将书签(Favorites)的超级链接(URL)直接改为它的IP。这样,以后再访问这些站点时,电脑就会直接使用IP地址进行连接,省去了域名解析的过程,从而加快浏览速度。而且当一些虚拟域名(如网易提供的yourname.yeah.net)的服务器死机时,你也可以顺利地访问它所指向的站点。

五. 在NT上安装DNS服务器

1. 安装DNS服务器所需要的条件
安装DNS服务器必须具备两个条件:第一,确定你的DNS服务器的域名和IP地址已经申请登记成功,如果不想将本地网络连入Internet则不用申请,可以随意使用任意域名和IP地址;第二,Windows NT 服务器必须已经安装好TCP/IP协议,并采用固定的IP地址和子网掩码连入网络之中(即不应该是DHCP客户机)。如果NT服务器装有多块网卡,则每块网卡都要有一个固定的IP地址并保持原有的绑定顺序。

2. 填写DNS服务器的域主机名和域名
以管理者身份登录NT服务器,打开“控制面板”=>“网络”=>“协议”=>“TCP/IP通讯协议”=>“属性”=>“DNS”窗口,在“域”中填入你已经登记成功的域名(如zhaofang.com.cn,注意不是NT域名),在“主机名”中填入你的DNS服务器的域主机名(如server1)。域主机名默认是NT服务器的计算机名。

3. 添加“Microsoft DNS服务器”
打开“控制面板”=>“网络”=>“服务”=>“添加”窗口;在“选定网络服务”对话框中,选中“Microsoft DNS服务器”,单击“确定”按钮;在出现的“Windows NT安装程序”对话框中,输入NT Server安装程序所在的源路径,单击“继续”按钮; 当回到“网络”对话框后,单击“关闭”按钮。安装程序在进行了网络绑定之后,便会弹出一个“更改网络设置”对话框,选择“是”重新启动计算机。

六. 设置和管理DNS服务器

DNS服务器中的各种记录、各种数据都是静态的,必须手工添加和维护。进行设置之后,要象将所作修改保存到服务器数据库文件中,可以执行“DNS”=>“更新服务器数据文件”子菜单。若所作修改未能在窗口中立即反映出来,便可以利用“查看”=>“刷新”子菜单来进行更新。

1. 管理DNS服务器的启动设置
DNS服务器启动时,要读取本地的启动文件(bootfile),以知道它管理了哪些区域以及这些区域的配置文件的存放位置。DNS服务器获取这些信息的方式有两种:从BIND格式的Boot文件中读取和从注册表中读取。当DNS服务器第一次启动时会从\system32\dns\boot文件中读取有关信息,但只要启动了DNS管理器,则以后将改从注册表中读取有关信息,并将Boot文件的名称由Boot改为Boot.bak。因此,如果你是从BIND格式的DNS服务器移植到NT的DNS服务器,则必须在第一次启动DNS管理器之前,修改好Boot文件并将其复制到\WINNT\System32\DNS目录中。不过,此后也有办法让NT的DNS服务器继续使用Boot文件,这需要在NT的注册表中找到以下主键:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNS\Parameters,然后在该主键下建立一个双字节键值“EnableRegistryBoot”,并取值为0,再重新启动计算机即可。

2. 添加DNS服务器
打开“开始”=>程序”=>“管理工具”=>“DNS管理器”,再选择“DNS”=>“新建服务器”子菜单,当弹出“添加DNS服务器”窗口时,在“DNS管理器”一栏中输入DNS服务器的NetBIOS计算机名、或域主机名(如server1)、或IP地址(如192.168.0.1),然后单击“确定” 。 添加了DNS服务器后,请在DNS管理器中双击该DNS服务器,注意只有当右面的“服务器统计”窗口中显示出有关的统计数据时,所添加的DNS管理器才有效,也即所添加的DNS服务器必须实际存在,否则便不能投入使用。此时还可以查看一下DNS服务器的启动设置。在“服务器清单”下双击IP地址192.168.0.1,再打开“DNS”=>“属性”=>“引导方法”,如果对话框中显示的是“DNS服务器当前被配置来从注册器启动”,便是指DNS服务器是从注册表中读取启动数据的。

3. 添加区域
DNS服务器是以区域为单位来进行管理的,在DNS服务器中必须先建立区域,再在区域中建立子域,以及在区域或子域中添加主机等各种记录。在微软的DNS服务器中,区域的上限是1000个,单个区域中的记录数上限是65533个,子域个数在理论上无限制。
区域分为两类:“主要”区域和“辅助”区域。“主要”区域中的DNS数据是自主生成的,而“辅助”区域中的DNS数据则是由“主要”区域通过区域传输复制过来的,“主要”区域是源,而“辅助”区域只是复制品,设置“辅助”区域只是为了提供容错功能、方便查询、加快查询速度和均衡网络负荷。在一台DNS服务器上不能建立同名区域,但可以建立多个不同名的区域,这时我们就可以说你将这些区域委托给了这台DNS服务器管理,这台DNS服务器也就是这些区域的“授权DNS服务器”。

添加“主要”区域的具体步骤如下: