FreeBSDDNS的体系结构
通常,一台计算机只需要配置域名解析就可以了,不需要自己运行名字服务器守护进程,然而有些时候需要设置自己的名字服务器,这就需要FreeBSD下配置名字服务器BIND(Berkeley Internet Name D omain)。BIND也是由伯克利开发的一个著名软件,它的执行程序为named,运行在Internet上几乎所有的名字服务器上,构成Internet的名字系统。由于普通的客户计算机并不需要运行named,因此在其/etc/rc.conf配置文件中,named_enable 应为NO。当需要运行named以提供DNS服务的时候,就要将这个参数的值改为”YES”。
DNS的体系结构
Internet上的DNS名字服务为一种分布式的体系,由分布在Internet各地的DNS服务器上的named 守护进程为整个Internet提供本域内计算机的名字解析服务。DNS域名结构为分级方式,例如www.online.ha.cn 中最后面的cn为顶级域名,由后向前分别划分为不同级别的域。
Internet上的顶级域名有两种,一种象cn这样的国别代码,另一种是如同edu、org、net、com 等分类代码。国别顶级域下的次级域名同样可以按照地域或组织结构来分类划分。
那么要进行名字解析,就需要从域名的后面向前,一级级查找这个域名。因此Internet上就有一些DNS服务器为Internet的顶级域提供解析任务,这些DNS服务器称为根DNS服务器。知道了根DNS服务器的地址,就能按级查找任何具有DNS域名的主机名字,BIND代码中就包括了这些根DNS服务器的地址。
名字服务使用zone的概念来表示一个域内的主机,然而zone与域也有所区别,zone只是域的一部分,而不是整个域。因为zone中不包括域下的子域。例如域名www.example.org.cn的域为example.org.cn ,这是一个独立的zone。这个域下可由子域组成,例如www.sub.example.org.cn就属于其子域sub.example.org.cn,子域也是一个独立的zone,并不包括在example.org.cn 这个zone之内,作为域的example.org.cn中就包括sub.example.org.cn子域。
除了从名字查找主机的IP地址这种正向的查找方式之外,另外还有从IP地址反查主机域名的解析方式。很多情况下网络中使用这种反向解析来确定主机的身份,因此也很重要。查找名字的反向解析是从前面的网络地址向后面的节点地址,逐级查找,因此IP地址zone是IP地址的前面部分。然而由于一个主机的域名可以任意设置,并不一定与IP地址相关,因此正向查找和反向查找是两个不同的查找过程,需要配置不同的zone。
- 使用DNS查询工具
用来进行DNS查询的一个非常有用的工具是nslookup,可以使用它来查询DNS中的各种数据。除了可以在命令行下直接进行基本的DNS查询之外,直接启动nslookup将进入一个交互模式,这里能查询各种类型的DNS 数据。
的名字解析数据可以有各种不同的类型,有设置这个zone的参数的SOA类型数据,有设置名字对应的IP地址的A类型数据,有设置从IP地址反向解析DNS名字的PTR数据,有定义服务与这个zone的DNS服务器的NS数据,以及定义主机别名的CNAME数据。这些不同类型的数据均可以通过nslookup的交互模式来查询,需要使用 set type命令设置相应的查询类型。
$ nslookupDefault Server:
ns.hazzptt.net.cnAddress:
202.102.224.68> set type=ns> yahoo.comServer:
ns.hazzptt.net.cnAddress:
202.102.224.68Non-authoritative answer:yahoo.com
nameserver = NS2.DCA.yahoo.comyahoo.com
nameserver = NS5.DCX.yahoo.comyahoo.com
nameserver = NS.EUROPE.yahoo.comyahoo.com
nameserver = NS1.yahoo.comAuthoritative answers can be found from:NS2.DCA.yahoo.com
internet address = 209.143.200.34NS5.DCX.yahoo.com
internet address = 216.32.74.10NS.EUROPE.yahoo.com
internet address = 195.67.49.25NS1.yahoo.com
internet address = 204.71.200.33>
这个例子就使用nslookup来查询yahoo.com这个zone的名字服务器,需要将类型设置为ns来执行查询。用来帮助获得DNS数据的工具还有很多,如dig能迅速返回整个zone的名字解析数据,dnswalk可以用来帮助查询名字服务器的设置。这些工具都可以用来帮助查找DNS的设置问题。
配置缓冲或转发方式的named
在Internet中主要使用名字进行连接,因此网络中的DNS查询会十分频繁。很多情况下,会有大量且重复的DNS查询。尤其在使用拨号连接的条件下,由于名字服务器位于ISP端,即使是曾经查询过的名字,其信息仍然保存在线路的另一端的名字服务器的缓冲区内,重复的DNS查询将占据宝贵的线路带宽。并且DNS查询还往往使得网络连接软件不能正确获得超时信息,不能适时断开连接以节省电话连接时间。
因此,最好的办法是将查询结果保存在本地计算机上,以避免重复查询造成的无谓的网络流量。虽然很多TCP/IP 客户机能够在本机内保存一个名字解析缓冲区,但这个缓冲区相对来讲太小了,起不到很有效的作用,然而如果要将这个缓冲区设置的较大,又不能及时刷新名字解析数据。要想很好的缓冲DNS数据,最好的缓冲区还是DNS服务器本身,因为DNS 的实现方式就是一种经常刷新的缓冲方式,并且named可以根据不同zone的不同设置,来实现数据刷新。
因此,最简单的办法就是设置一个具备缓冲能力的名字服务器,它将能够用做名字解析的缓冲,这就要需要设置名字服务器的过程。
- 在/etc/resolv.conf中,将127.0.0.1作为第一个可选服务器,其他DNS服务器作为备份,使得名字查询通过本地的名字服务器进行,以利用它的缓冲机制;
- 在/etc/rc.conf中,将named_enable设置为”YES”,允许启动named,rc.conf中有关named的其他选项不需改变;
- 改变到/etc/namedb目录下,运行make-localhost程序,这将产生针对本计算机的解析数据localhost.rev文件;
- 修改/etc/namedb/named.conf文件,使其符合一个转发系统的要求。
- 启动名字服务器,可以使用root身份直接执行named守护进程,并在rc.conf中更改named_enable的设置值。
- 设置named.conf
要成功配置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相比拟,需要使用多台根名字服务器来维护其域名解析系统,直接设置一台或几台名字服务器,并指定客户计算机使用这些名字服务器就满足要求了。
- zone数据文件的格式
@
IN
SOA
freebsd.example.org.cn. root.freebsd.example.org.cn.
(
1998012314
; Serial
3600
; Refresh
900
; Retry
3600000
; Expire
3600 )
; Mi