本章内容包括:
•数据库资源记录。资源记录(ResourceRecord)简称RR,组成了域区文件的内容,是DNS的核心数据。顾名思义,资源记录包含DNS应该知道的重要资源信息,这些资源就是其他的DNS服务器和主机。该节将说明主要的资源记录类型并介绍它们的使用。
•缓存文件。缓存文件(根提示)将标明根域名服务器,使得任何DNS服务器都能很容易地找到域名系统树的根。该节介绍缓存文件、它的重要性以及如何使用。
•委托授权。将你的主域名服务器向InterNIC注册使得域外的需要访问你的域名列表的客户机可以连接到这台服务器,还可用域名服务器记录(NS记录)公布你的辅域名服务器。该节将解释为什么要公布授权服务器。
如果DNS是有生命的,那么有些事它是靠直觉完成的,而其他的功能是要靠学习才有的。本章将介绍DNS应完成的基本工作,即哪些DNS几乎是靠直觉完成的事情(从它的域区文件里得到资源信息),还将介绍各种资源记录的类型,可用来使DNS完成更高级的任务的满足用户的需要(路由邮件,服务定位信息以及利用密钥交换来提高安全结构)。本章不涉及DNS最近才具有的新的动态升级功能。
4.1数据库资源记录
像任何其他数据库一样,DNS的体系结构也是由表组成的,每张表包含许多记录。DNS数据库表称为域区文件(zonefile)。大多数记录都有专门的含义,因为它们标识了许多资源的位置,它们甚至可以和其他表中的记录相联系。资源记录类型包括授权开始记录SOA(StartOfAuthority)、地址记录A(Address)、指针记录Ptr(Pointer)等。本章将在后面详细地介绍各种资源记录类型。附录F“资源记录和InterNIC缓存文件”提供了一个完整的资源记录列表。
在域区文件中能见到什么样的记录取决于若干因素。首先要看是哪一种域区文件,若是正向查找域区和反向查找域区就很少有相同的记录。另一个决定域区文件内容的因素是管理员想要发布或者是需要发布什么信息。本节将详细解释各种重要的记录类型。应该对它们都很了解,并知道它们是如何使用的。
当把域区信息以文件形式存储时,WindowsDNS把域区数据库文件存放在%Windows\system32\dns目录下。WindowsDNS也在.\samples子目录下提供了若干模板文件以提供文件格式的例子。
WindowsDNS服务器能在三处存储配置信息和域区信息。配置信息一般存储在注册表里,也能存储在兼容BIND的引导文件里(UNIX机器这样做)。域区信息存储在域区文件或活动目录里。DNS服务器引导配置信息在注册表里的位置是HKLM,System,CurrentControlset,Services,DNS,Zones;文件名为BOOT。不像UNIX的NAMED.BOOT文件,WindowsDNS服务器允许它的引导文件里只有主服务器、辅服务器和缓存服务器的信息,图4-1显示了WindowsDNS服务器“Properties(属性)”里的“Advanced(高级)”选项卡。
当“LoadZoneDataonstartup(启动时载入域区数据)”选项设置为“FromFile(从文件)”时,注册表信息就会自动产生一个引导文件,当变成“FromRegistry(从注册表)”时,先前的引导文件移入.\backup子目录下,不论是上述哪种情况,注册表总是保持当前信息,这种改变是在“Apply(应用)”按钮按下时即时生效的。
这里容易引起误导的是,除非活动目录被使用,否则总是用域区文件来存储域区信息。尽管在图4-1中有“FromActiveDirectoryandRegistry(从活动目录和注册表)”选项,域区文件(即真正的资源记录)还是不存储在注册表里。当域区信息存储在活动目录里时,域区记录通过LDAP协议传送至可见的目录对象。尽管这些域区记录仍然用于任何辅服务器,但主服务器上不再存在域区文件。同时,也不再有“FromFile(从文件)”这个选项。
WindowsDNS域区文件的格式是与RFC兼容的,并且本章中这样的格式同样应用于BIND域区文件和WindowsDNS文件。本章所包括的信息将比在WindowDNS管理界面所能看到的要多得多。这是因为实际的数据存储比所能看到的要复杂得多,而在服务器中为尽量把事情简单化则只需对配置的选项和缺省值进行选择。
RFC1035、RFCl183、RFC1664、RFC1886、RFC2052、RFC2181、RFC2035和RFC2672(可从www.isi.edu找到)是根域资源记录的最有权威的文件。当使用DNS服务器管理控制器时,WindowsDNS会自动格式化记录,但如果使用引导文件选项并在WindowsDNS和BIND之间来回移动文件,则需要知道如何使用文本编辑器来格式化记录以及如何让Windows接受引导文件。WindowsDNS的一个出色的特征是它可以用DNS服务器管理控制台生成一个配置,然后把配置存进一个引导文件里,显然,如果想从WindowsDNS转到基于UNIX/BIND的系统,这是很有帮助的,没有别的更好的方法。
4.2资源记录语法格式
以下的内容摘自RFC1035,由PaulMockapetris编写,解释了RR格式的语法(第32~34页):
这些文件的格式是一系列的条目。条目基本上是以行为单位的,但也可以用括号来续行,并且续行文本的字符中可以包括CRLF(回车换行)。任何数量的Tab键和空格键的组合都相当于一个分隔符,用以分隔条目中的组成项。在主文件任何一行的后面都可以加注释,注释以分号“;”开始。定义以下条目:
以上第一条定义空行。在文件的任何地方都可使用空行,空行可以带注释也可以不带注释。以上还定义了两个控制条目:$ORIGIN和$INCLUDE。$ORIGIN后必须跟一个域名,其作用是将当前域设置为条目中所指定的域。$INCLUD条目将在当前域名文件中插入一个域名文件。$INCLUDE条目中的域名是任选项,目的是指定包含文件的当前域名。$INCLUDE条目也可以带注释。注意,不论$INCLUDE条目是否改变$INCLUDE文件的域,都不会改变父文件(当前文件)的当前域。
后两个条目代表RR(资源记录)的格式。如果RR条目以空格开始,则这个RR是归以上条目中最后指明的域所有。如果一个RR条目是由域名(<domain-name>)开始,则重新设定记录的所有者。<rr>的内容可以有以下两种格式:
RR以可选项TTL和Class开始,然后是与类型(type)和类别(class)相应的type段和RDATA(记录数据)段。class和type使用标准助记符,TTL是个十进数。若省略class和TTL的值,则缺省为最后一次曾指定的值。因为type和class的助记符是不会重复的,对它们的句法分析将是唯一的(这里所列的顺序和示例与实际资源记录中的顺序是不同的,这里所列的顺序更便于进行语法分析)。带有<domain-name>的记录将占主文件数据的绝大部分。
域名的每一部分用字符串表示,并用“.”分开。域名中可以使用任何字符。以“.”结尾的域名称为绝对域名,是完整的域名。不以“.”结尾的域名称为相对域名,实际的域名是由相对域名和在$ORIGIN、$INCLUDE指定的源相连接后组成的,或者是主文件在调用例程时的目的参数。当没有源可用时,相对域名则是一种错误。
字符串<character-string>可用两种方式来表示:可以是没有内部空格的连续字符集;或者是用??括起来的字符集,这时的字符集可以用除了?以外的任何字符,如果要用?符,则必须和反斜杠\连用。
这些文件都是文本文件,但有些字符或表示法有特殊的意义,特别是:
.表示根。
@单独的@符表示当前的源。
\X这里的X是除了0~9数字符以外的任意字符。这种表示法是要说明这里的X符只是个普通的字符,而没有任何特殊的含义。如?\.?就表示一般的“.”,而不代表根。
\DDD这里的D是八进制数,DDD是相应十进制数的八进制表示,所得到的DDD也是作为文本,而没有其他的意义。
()括号用于括起跨行的数据。括号内若有行结束符,也不承认是行的结束。
;分号用来开始注释,分号后的内容可以忽略。
本章后面所描述的每种RR的语法表示和举例均出自RFC1035、RFC1183、RFC1664。这些文档是主文件格式的权威参考资料。不过,还是要提到一些资料:
•资源记录条目不区分大小写,所以hostname=HOSTNAME=HOSTNAme。
•在资源记录的名字中,每个标号有63个字符长度的限制,每个全域名也不能超过255个字符。
•服务资源记录(SRV)中的下划线,在RFC2052目前的修订本中被指定,也许是暂时的,在指定服务和协议域时使用。目前的RFC2052bis草案意图废除1999年11月16日的RFC2052isdvaft-ictf=dnsind-ifc2052bis-0.5txt文件。
•为了国际化,RFC2044采用了标准的增加字符集的支持,它在RFC2279后就被废除了。RFC2279中指定了UTF-8标准,它并不是专门处理DNS的字符集,这个标准已经内置于Windows2000DNS的资源记录支持中了。
下划线使用WindowsNT中经常使用下划线来命名模式。但是当把NetBIOS名字映射到DNS域名空间时就会有问题。Windows管理员必须认识到目前下划线在DNS主机和域名字中是非法的。有些域名服务器仅仅不提倡使用下划线,但有些服务器却返回错误信息和拒绝查询。在Windows2000中,因为DNS和Windows名字空间必须相互紧密联系,所以下划线的使用是一个典型的问题。剩下的问题便是UTF-8名字或像下划线这样的特殊字符的使用将给DNS服务器协同工作带来麻烦。
开始授权记录SOA
开始授权记录,一般称为SOA记录(Start-of-Authority),是所有正向和反向域区文件中必要的第一个条目。由RFC1035定义的SOA记录提供了每个域需要的若干关键信息。最重要的是SOA记录中指定了域的授权域名服务器。图7-l是SOA记录的“DomainNameServerManagerProperties(DNS管理器属性)”对话框,在服务器列表中双击域区图标就可以打开该对话框。
SOA记录非常重要,它们包含以下各段(在图4-2中可以看到其中的某些值)。以下的列表中给出了所有的段(但不一定和WindowsDNS管理器中所显示的完全相同)。