在Inte.net中主要使用名字进行连接,因此网络中的DNS查询会十分频繁。很多情况下,会有大量且重复 的DNS查询。尤其在使用拨号连接的条件下,由于名字服务器位于ISP端,即使是曾经查询过的名字,其信息仍然保存在 线路的另一端的名字服务器的缓冲区内,重复的DNS查询将占据宝贵的线路带宽。并且DNS查询还往往使得网络连接软件 不能正确获得超时信息,不能适时断开连接以节省电话连接时间。
因此,最好的办法是将查询结果保存在本地计算机上,以避免重复查询造成的无谓的网络流量。虽然很多TCP/IP 客户机能够在本机内保存一个名字解析缓冲区,但这个缓冲区相对来讲太小了,起不到很有效的作用,然而如果要将这个缓 冲区设置的较大,又不能及时刷新名字解析数据。要想很好的缓冲DNS数据,最好的缓冲区还是DNS服务器本身,因为DNS 的实现方式就是一种经常刷新的缓冲方式,并且named可以根据不同zone的不同设置,来实现数据刷新。
因此,最简单的办法就是设置一个具备缓冲能力的名字服务器,它将能够用做名字解析的缓冲,这就要需要设置名字 服务器的过程。
要成功配置named,最重要的一步就是改变配置文件named.conf,一个用于转发的设置文件应为:
options { directory "/var/namedb"; datasize 20M; forward only; forwarders { 202.102.224.68 }; }; zone "." { type hint; file "named.root"; }; zone "0.0.127.in-addr.arpa" { type master; file "localhost.rev"; }; |
这个设置文件中去除了任何注释项,named中使用与C++相同的注释方式,即用两个斜线来表示一行注释,而 设置语句也类似C的语法。
第一个语句options用于设置named的参数,directory指明named的工作目录为/etc /namedb,datasize用于设置缓冲区的大小,forward only和forwarders用于指明这 个服务器只是一个转发服务器,并设置转发的名字服务器的地址。这两个转发选项不是必须设置的,不进行设置时named 就能很好的适应解析和缓冲任务。这样名字服务器初始时就从根名字服务器中获得信息,这些信息将保存在named的缓冲 区内,此后就可以查询缓冲区内的相关服务器来获得进一步的名字解析。
第二个语句用于设置根zone,这用于设置Internet上的根名字服务器,一切本地无法解析的数据将发送 给那些根名字服务器进行解析,设置了工作目录下的named.root文件中记录了这些根名字服务器的地址,记录根名 字服务器的文件名字也可能为root.hints。第三句定义了对127.0.0.0的反向查询的数据,0.0.12 7.in-addr.arpa为一个反向解析zone,其IP地址也是反序排列的,并且使用in-addr.arpa 后缀,而对应的反向解析数据在localhost.rev文件中定义。
BIND的当前版本为8,之前的版本为4.9.x,它们使用named.boot作为named的配置文件。 大多数Unix版本,包括大多数商业Unix在内,还没有更新他们的名字服务器到当前的BIND 8,仍然运行老版本 的named。但必须注意named.boot文件的格式与named.conf不同,不能混用。BIND 8提供了 很多优秀的特性,因此最好立即升级到新版本。
named.root文件给出了Internet上的多个根名字服务器,用于初始化named的缓冲区。借助 这些名字服务器的帮助,一台名字服务器能对整个Internet进行查询。一般不需要改变这些文件的内容,但是如果要 建设一个内部网,不与Internet连接,就不需要named.root中的这些根名字服务器的地址,而要更改为自 己网络内的根名字服务器的地址。事实上,没有任何内部网络能和Internet相比拟,需要使用多台根名字服务器来维 护其域名解析系统,直接设置一台或几台名字服务器,并指定客户计算机使用这些名字服务器就满足要求了。
@ IN SOA freebsd.example.org.cn. root.freebsd.example.org.cn. ( 1998012314 ; Serial 3600 ; Refresh 900 ; Retry 3600000 ; Expire 3600 ) ; Minimum IN NS freebsd.example.org.cn. 1 IN PTR localhost. |
这是根据计算机的名字和域名产生的localhost.rev文件,这个文件定义了对127.0.0.0这个 反向zone的反向名字解析数据,可以用于从IP地址查询主机的名字。
第一个设置定义了一个SOA记录,这个类型的记录定义了包含一个zone的开始,并用于设置zone中数据刷 新时间等参数。在这个记录中,@代表一个zone,由于这个设置文件中没有设置它的值,那么它就是named.con f中的定义语句中zone的值,这里就为0.0.127.in-addr.arpa。空白字符分隔之后为IN,这是用 于表示定义的关键字,SOA表示这一行的类型为SOA记录,接下来的freebsd.example.org.cn. 为这台主机的全名,注意,这里以 ”.” 结尾,如果在名字解析配置文件中不以点结尾,named将自动附加上当前 zone的值;此后给出了一个联系用的email地址,这里为root@freebsd.expampleorg.or g.cn,但是由于@在设置文件中有特殊含义,因此使用点代替;
再后面就是SOA记录的参数,这些参数使用了括号,并分在几行分别设置,这主要是为了使得设置更为清楚,将它 们放在同一行内也可以。SOA记录的参数有序列号,用于标识SOA记录数据 ── 其他名字服务器使用这个数据与自己 缓冲区内的数据对比,来判断这个zone的数据是否更新,否则就没有必要传输全部zone的数据。因此可以使用日期来 表示不同的序列号,以使得更改过SOA记录之后,其他名字服务器能即使刷新数据;刷新时间 ── 用于告诉其他名字服 务器何时来检查zone中的数据是否更新,这里配置为1小时(3600秒),这个时间间隔对于不经常改变的服务器来讲 太小了,应该配置为一天或更大;第三个参数为连接的尝试次数;然后是过期时间,表示一旦某个zone的正式名字服务器 不能提供其服务,其他名字服务器在其缓冲区中保存多久该zone的缓冲数据;最后一个参数指出其他名字服务器缓冲这个 文件内容的最小时间间隔,在这个间隔内不应该刷新该zone的名字解析数据。
当括号结束之后,这个SOA设置项就结束了。而第二项设置定义了一个名字服务器记录,这个设置直接用空格和IN 开头,表示这一项仍然使用上一项中的设置,这里就是@。NS代表这一项定义是名字服务器类型,最后给出了名字服务器 的名字freebsd.example.org.cn.,表示这个zone的名字解析数据位于这个名字服务器中。
第三项定义了一个反向查询指针记录PTR,第一列为1,由于没有使用点结尾,因此其全形式应为127.0.0.1 ,第三列PTR表示这个记录为PTR记录,是给定IP地址返回名字的查询形式,最后一列即是127.0.0.1的 名字localhost。
未完,待续。。。