当前位置:Linux教程 - Linux - Linux网络管理员手册(6)

Linux网络管理员手册(6)



         翻译:赵炯
    [email protected]

    第六章 名字服务和解析器配置

    正如第二章所述,TCP/IP网络可以依赖于不同的方案来将名字转换成地址。如果不利用名字空间被分裂成区的好处的话,最简单的方法是用存储于/etc/hosts中的主机表。这仅对由一个管理员管理的小型局域网有用,而且这个局域网要与外界没有IP通信。hosts文件的格式早已在第5章中描述过。
    作为选择,你可以使用BIND—伯克里互连网名字域服务(Berkeley Internet Name Domain Service)--来解析主机名到IP地址。配置BIND可能很是繁杂,但是一旦你完成它,那么网络拓扑的变化很容易做到。在Linux上,正如在许多其它UNIX样的系统中,名字服务是通过一个称为named的程序提供的。在启动时,它将一组主要文件装入缓冲中,等待从远程或本地用户进程来的请求。设立BIND有不同的方法,并且不是所有的方法都需要你在每个主机上都运行名字服务器的。
    虽然本章可以叙述的更详细一些,但却只是给出了如何操作一个名字服务器的粗略概况。如果你计划在不只是一个小型局域网并且可能有一个Internet连接的环境下使用BIND,你应该针对BIND取得一本好书,例如Crichet Liu的“DNS和BIND”(见[AlbitzLiu92])。对于当前的信息,你也可以查阅包括在BIND原程序中的发行注释(release notes)。还有一个DNS问题新闻组(newsgroup)称为comp.protocols.tcp-ip.domains。

    6.1 解析器库
    当谈及“解析器”,我们并不是指任何特殊的应用程序,而是指解析器库(resolver library),是一个能在标准C库中找到的函数的集合。主要的例程是gethostbyname(2)和gethostbyaddr(2),它们查寻属于一个主机的所有的IP地址,并且反之也然。它们可以被配置成只是简单地在hosts中查询信息、请求名字服务器的一个数、或使用NIS的hosts数据库(Network Information Service)。其它的应用程序,象smail,可能包括这些中的任何不同的驱动程序,并且需要特别的照料。

    6.1.1 host.conf文件
    控制你的解析器设置的主要文件是host.conf。它存储于/etc中并且告知解析器使用哪个服务、以及用什么顺序。
    Host.conf中的选项必须出现在不同的行上。各个域要用空格(空格或制表符)隔离。一个“#”号表示一个注释行。
    有以下一些选项:

    order
    这确定了解析服务试验的顺序。有效的选项是:bind用于请求名字服务器、hosts用于在/etc/hosts中查找、nis用于NIS查寻。可以指定其中的任何一个或所有。它们出现在一行上的顺序决定了各个相关服务试验的顺序。
    multi
    以on或off做为选项。这决定了在/etc/hosts中的一个主机是否可以有几个IP地址,它通常指的是作为“多宿主的”。这个标志对DNS或NIS请求是没有作用的。
    nospoof
    就如前章所解释的,DNS通过使用in-addr.arpa域,允许你找到属于一个IP地址的主机名。名字服务器提供一个假主机名的企图被称为“哄骗”(“spoofing”)。为了防止这个做法,解析器可以配置成检查是否一个原始IP地址实际上是与一个获得的主机名相关的。如果不是,这个名字将被丢弃并且返回一个出错。这个行为是通过设置nospoof为on来打开的。
    alert
    这个选项使用on或off作为参数。如果它被打开,任何哄骗企图(见上面)将导致解析器将信息写进syslog日志文件中。
    trim
    这个选项将一个域名作为参数,在查寻之前它将被从主机名中删去。这对于hosts项是很有用的,那里你可能只想指定无本地域的主机名。附带有本地域名的一个主机的查寻将被移去本地域,这样就使得在/etc/hosts中的查找获得成功。

    Vlager的一个样本文件显示如下:

    # /etc/host.conf
    # We have named running, but no NIS (yet)
    order bind hosts
    # Allow multiple addrs
    multi on
    # Guard against spoof attempts
    nospoof on
    # Trim local domain (not really necessary).
    trim vbrew.com.

    6.1.2 解析器环境变量
    host.conf中的设置可以通过使用环境变量来覆盖。这些环境变量是

    RESOLV_HOST_CONF
    这指定读一个文件而不是读/etc/host.conf。
    RESOLV_SERV_ORDER
    覆盖host.conf中给出的顺序选项。服务器以hosts、bind、以及nis顺序给出,用空格、逗号、冒号、或分号来分隔。
    RESOLV_SPOOF_CHECK
    确定对待哄骗的方法。可以用off来完全禁止它。值warn和warn off启用哄骗检查,但分别打开或关闭日志。值*启用哄骗检查,但留下在host.conf中定义的日志选项。
    RESOLV_MULTI
    值on或off可用于覆盖host.conf中的multi选项。
    RESOLV_OVERRIDE_TRIM_DOMAINS
    这个环境变量指定了一个修整域的列表,它覆盖host.conf中给出的修整域。
    RESOLV_ADD_TRIM_DOMAINS
    这个环境变量指定了一个修整域的列表,它对host.conf中的修整域作了增加。

    6.1.3 配置名字服务器查寻—resolv.conf
    当配置解析器库以使用BIND名字服务进行主机查找,你也必须告知它使用哪个名字服务器。对此有一个独立的文件,称为resolv.conf。如果这个文件不存在或是空的,那么解析器就假设名字服务器在你本地的主机上。
    如果在你的本地主机上运行一个名字服务器,就象在下面一节中解释的那样,你必须单独地设置它。如果你在本地网络上并且有机会使用一个现存的名字服务器的话,这将总是一种推荐的做法。
    resolv.conf中最重要的选项是nameserver,它给出了要使用的名字服务器的IP地址。如果你通过几次给出nameserver选项指定了几个名字服务器,那么它们会以给出的顺序试用。因此,你应该首先给出最可靠的服务器。目前,至多支持三个名字服务器。
    如果没有给出nameserver选项,那么解析器试图连接本地主机上的名字服务器。
    其它两个选项,domain和search涉及到如果BIND不能用第一个请求解析主机名时附加在主机名上的缺省域。search选项指定了一个试用的域名列表。列表项是用空格或制表符分开的。
    如果没有给出search选项,就会通过使用域名本身从本地域名以及直至root的父域中建立一个搜寻列表。本地域名可以使用domain语句给出;如果一个也没有给出,那么解析器就通过系统调用getdomainname(2)来获取。
    如果这使得你感到混淆,考虑虚拟酿酒厂的resolv.conf样本文件:

    # /etc/resolv.conf
    # Our domain
    domain vbrew.com
    #
    # We use vlager as central nameserver:
    nameserver 191.72.1.1

    当解析名字vale时,解析器将查询vale,并且vale.vbrew.com和vale.com都会失败。

    6.1.4 解析器的稳固性
    如果你在一个大型网络中运行一个局域网,你无疑地应该使用主要名字服务器如果它们存在的话。这样做的优点是它们会有丰富的缓冲,因为所有的请求都转发给了它们。然而,这个方案也有缺点:当一把火毁坏了我校的主干网电缆时,我们系的LAN就做不了什么工作了,因为解析器不再能到达任何名字服务器了、在X-终端上不再能登录了、也没了打印等等。
    尽管校园主干网在火中焚毁不是常有的事,但我们必须针对这种情况采取防范措施。
    一种选择是设置一个从本地域解析主机名的本地名字服务器,并且转发对其它主机名的所有请求到主服务器上去。当然,这只适用于你运行在自己的后台程序时。
    另一种选择是,你可以在你的/etc/hosts中维护一个你的域或LAN的一个备份主机表。然后,在/etc/host.conf中要包含“order bind hosts”使得解析器在主名字服务器不在时后退到hosts文件。

    6.2 运行named
    在大多数UNIX机器上提供域名服务的程序通常称为named(发音为name-dee)。这是一个最初为BSD开发的用于为客户提供名字服务的服务器程序,其它的名字服务器程序也可能是这样的。目前在多数Linux安装中所使用的版本好象是BIND-4.8.3。现在BIND-4.9.3正处于Beta测试阶段,不久就会有了。
    本节需要对域名系统工作原理有一些理解。如果下面的讨论你一点也看不懂,你可以重新阅读第2章,那里有关于DNS的更多的信息。
    named通常在系统引导时启动的,并且一直运行到机器再次关闭为止。它从一个称为/etc/named.boot的配置文件中以及各种包含域名到地址映射数据的文件等中取得信息。后者称为区域文件(zone files)。这些文件的格式和语义将在下一节中描述。
    要运行named,只需在提示符下简单地键入

    # /usr/sbin/named

    named将启动,读取named.boot文件以及其中指定的任何区域文件。它将它的进程id以ASCII写入/var/named.pid中、如有需要就从主服务器中下载任何区域文件,并且开始在端口53侦听DNS请求。[1]

    6.2.1 named.boot文件
    named.boot文件通常很小并且只包括指向含有区域信息的主文件的指针、以及指向名字服务器的指针。该boot文件中的注释行以一个分号开始一直延续到下一个新行开始。在我们详细讨论named.boot的格式之前,我们将看一下图6.1中给出的vlager的样本文件。[2]
    ;
    ; /etc/named.boot file for vlager.vbrew.com
    ;
    directory /var/named
    ;
    ; domain file
    ;---------------------------------------------------
    cache . named.ca
    primary vbrew.com named.hosts
    primary 0.0.127.in-addr.arpa named.local
    primary 72.191.in-addr.arpa named.rev
    图6.1 vlager的named.boot文件。

    这个例子中的cache和primary命令将信息装入named。这个信息是从第二个参数指定的主文件中取得的。它们含有DNS资源记录的文本表示,下面我们来看看。
    在这个示例中,我们把named配置成三个域的主要(primary)名字服务器,就如该文件末尾的primary语句指出的那样。其中第一个primary语句指示named作为vbrew.com的主服务器,并从named.hosts文件中取得区域数据。directory关键字告诉它所有的区域文件位于/var/named目录中。
    cache是非常特殊的项并且实际上应该在所有运行名字服务器的机器上存在。它的功能有两个:它指示named激活它的缓冲,并从指定的缓冲文件中(在该示例中是named.ca)装入根名字服务器提示(root name server hints)。我们将在下面回过来讨论名字服务器提示。
    下面是用于named.boot中的非常重要的选项的一张列表:

    directory 它指定了区域文件存储的目录。文件名可以用与该目录相关的形式给出。通过重复使用directory可以指定几个目录。根据Linux文件系统标准,这应该是/var/named。
    primary 它将一个域名(domain name)和一个文件名(file name)作为参数,宣布了对命名的域的本地服务器的授权。作为一个主要服务器,named从主文件中装入区域信息。一般地,在每个.boot文件中总是有至少一个primary项,即用于网络127.0.0.0的逆向映射,该网络是本地回送(loopback)网络。
    secondary 这个语句将域名(domain name)、地址列表(address list)和一个文件名(file name)作为参数。它为指定的域宣布本地服务器为二级主服务器。一个二级服务器同样也掌有该域的授权数据,但它不是从文件中得到的,而是试着从主服务器中下载来的。因此至少一个主服务器的IP地址必须在named的地址列表中给出。本地服务器将联系每个主服务器直到它成功地将区域数据库传输过来,这个区域数据库然后被保存在第三个参数指定的备份文件中。如果主服务器一个都没有响应,就从备份文件中取回区域数据。此后,named将试图定期刷新区域数据。这将在下面连同SOA资源记录类型一起讨论。
    cache 它将域(domain)和文件名(file name)作为参数。这个文件包含了根服务器提示,它是一个指向根名字服务器的一张列表。只有NS和A记录将被识别。domain参数通常是根域名“.”。对named来说这个信息是绝对至关重要的:如果.boot文件中没有cache语句,named将完全不会产生一个本地缓冲。如果下一个服务器请求不在本地网上,这将严重地降低性能以及增加网络负荷。更为严重的是,named将不能到达任何根名字服务器,因而,除了那些它授权的,它将不能解析任何地址。这个规则的一个例外是使用转发服务器(cf. 下面的forwarders选项)。
    forwarders 这个语句将一个地址列表(address list)作为参数。这个列表中的IP地址指定了在named不能从本地缓冲中解析一个查询时可能会查询的名字服务器的一个列表。它们会被顺序地试用直到其中一个服务器对查询作出响应。
    slave 该语句使得名字服务器成为一个从服务器。也即,它本身将永不执行递归查询,但只是将查询转发到forwarders语句指定的服务器上。

    还有两个选项,sortlist和domain,我们在这里将不对它们进行讨论。另外,还有两个可以用于区域数据库文件中的指令。它们是$INCLUDE和$ORIGIN。因为它们很少用到,这里我们将同样不对它们进行描述。

    6.2.2 DNS数据库文件
    named包括的主文件,如named.hosts,总有一个域与它们相关联,称之为origin。这是一个用cache和primary命令指定的域名。在一个主文件中,允许你指定与该域相关的域和主机名。在配置文件中的一个名字如果以一个点结尾就被认为是绝对的(absolute),否则的话它被认为是与orgin相关的。orgin本身可以用“@”来引用。
    一个主文件中包含的所有数据被分裂成资源记录(resource records),或简称RRs。它们构成DNS中的最小的信息单元。每一资源记录有一个类型。例如,A记录将一个主机名映射到一个IP地址、一个CNAME记录将一个主机的别名与它的正式主机名相关联。作为一个示例,请观看115页是的图6.3,它显示了虚拟酿酒厂的named.hosts主文件。
    主文件中的资源记录表示法共享一个通用的格式,它是

    [domain] [ttl] [class] type rdata

    各域用空格或制表符分开。如果一个左大括号在第一个新行之前,一个项可以连续跨过几行,并且最后一个域后跟一个右大括号。在分号和新行之间的任何信息都被忽略。

    domain 条目所适用的域名。如果没有给出域名,那么该RR假定应用于前一个RR的域。
    ttl 为了迫使解析器在一段时间后放弃(废弃)信息,每个RR有一个相应的“存活期”(“time to live”),或简称ttl。ttl域用秒来指定从服务器取得的信息有效的时间。它是一个最多八位的十进制数。如果没有给出ttl值,那么它的值缺省为前面SOA记录的最小域的值。
    class 这是一个地址类,正如IP地址的IN,或Hesiod类中对象的HS。对于TCP/IP网络来说,你必须使它为IN。如果没有给出class域,就假定使用前一个RR的类。
    type 它描述了RR的类型。最普通的类型是A、SOA、PTR以及NS。下一节描述了RR的各种类型。
    rdata 它保存与RR相关的数据。这个域的格式依赖于RR的类型。下面对每种RR进行单独的描述。

    下面是用于DNS主文件的RR的一个不完整列表。还有许多RR的类型,我们将不作讨论。它们是试验性的,并且通常很少有用。

    SOA 它描述了一个授权区域(SOA是指“Start of Authority”)。它表示紧跟在SOA RR后面的记录包含有对该域的授权信息。每一个用primary语句包括的主文件在此区域必须含有一个SOA记录。资源数据含有以下几个域:

    orign 这是该域的主要名字服务器的规范主机名。它通常用一个完全的名字给出。
    contact 这是维护该域的负责人的email地址。用一个点替换掉了“@”字符。例如,虚拟酿酒厂域的负责人是janet,那么这个字段域将含有janet.vbrew.com。
    serial 这是一个用单个十进制数表示的区域文件的版本号数。每当区域文件中的数据改变时,这个数值将增加。
    这个序列(serial)号值是用于次要名字服务器识别何时区域信息改变了。为了保持最新,次要服务器在一定间隔时间后就请求主要服务器的SOA记录,并且将该序列号值与缓冲的SOA记录的序列号值相比较。如果数值改变了,次要服务器就从主要服务器将整个区域数据库传输过来。
    refresh 它指定了次要服务器将等待检查主要服务器的SOA记录的一个以秒计的间隔时间,同样地,这是一个最多八位的十进制数。通常网络的拓扑结构不会经常性地改变,所以对于大型网络来说,这个数应该指定为大约一天左右。
    retry 这个数值确定了一个间隔时间,它是一个请求或一个区域刷新失败时次要服务器将重试与主要服务器联系的间隔时间。它不应该太小,否则一个临时的服务器失败或网络问题将导致次要服务器浪费网络资源。一个小时、或者一个半小时,可能是一个好的选择。
    expire 它以秒指定了一个时间值,在这个时间过后,如果服务器还不能联系到主要服务器的话,它最终将丢弃所有的区域数据。这个时间值通常应该很大。Graig Hunt([GETST 92])推荐为42天。
    minimum 这是对于没有明确指定ttl的资源记录的一个缺省的ttl值。这需要其它的名字服务器在一段时间后丢弃RR。然而,它与次要服务器开始试图更新区域信息所等待的时间无关。Minimum应该是一个很大的值,尤其是对于网络拓扑结构几乎不变的局域网。一个大约是一周或一个月的值大概是一个很好的选择。对于单个RR可能经常改变的情况,你仍可以给它们一个不同的ttl值。

    A 这将一个IP地址与一个主机名相关联。资源数据域包含点分四组表示的地址。对于每一台主机,只能有一个A记录。用于这个A记录的主机名被认为是正式的或规范的主机名。所有其它主机名都是别名,并且必须使用一个CNAME记录映射到这个规范的主机名上。
    NS 这指向一个从属区域的主名字服务器。对于为什么要有NS记录的解释,请参见3.6节。资源数据域包含名字服务器的主机名。为了解析这个主机名,另外需要一个A记录,即给出名字服务器IP地址的所谓的粘合记录。
    CNAME 它将一个主机的别名与它的正规(或规范)主机名相关联。规范主机名就是主文件为其提供一个A记录的主机名;别名只是通过一个CNAME记录简单地联结到规范主机名上,但它们本身没有任何其它的记录。
    PTR 这个类型的记录用于将in-addr.arpa域中的名字与主机名相关联。这用于IP地址到主机名的逆向映射。所给出的主机名必须是规范主机名。
    MX 这个RR对于一个域申明了一个邮件交换器(mail exchanger)。有邮件交换器的原因将在第13章的“互连网上的邮件路由”一节中讨论。MX记录的句法是
    [domain] [ttl] [class] MX preference host

    host 为domain命名邮件交换器。每个邮件交换器有一个整数preference(优先权)与之关联。一个想要将邮件分发到domain的邮件传输代理会试用所有针对这个域的MX记录的主机,直到成功为止。具有最低优先权值的将首先试用,然后按着优先权值的增大顺序试用其它主机。
    HINFO 这个记录提供了有关系统硬件和软件的信息。它的句法是

    [domain] [ttl] [class] HINFO hardware software

    hardware(硬件)字段确定主机所使用的硬件。存在特别的约定来指定它。在“Assigned Numbers”(RFC 1340)中给出了一张有效名字的列表。如果字段中含有任何空格字符,就必须用双引号括住。Software(软件)字段指定系统所用的操作系统软件。同样,应该选用“Assigned Numbers”RFC中的有效名字。

    6.2.3 编写主文件
    图6.2、6.3、6.4和6.5给出了在酿酒厂vlager上的一个名字服务器的样本文件。考虑到所讨论网络的特性(单个局域网),这个例子是非常直观的。如果你的要求更复杂些,并且你运行不了named,参见Cricket Liu和Paul Albitz([AlbitzLiu92])的“DNS and BIND”。
    图6.2示出的named.ca缓冲文件显示出一个根名字服务器的样本提示记录。一个典型的缓冲文件通常描述了大约一打左右的名字服务器。你可以使用本章末描述的nslookup工具获得根域的当前名字服务器的列表。[3]
    ;
    ; /var/named/named.ca Cache file for the brewery.
    ; We\"re not on the Internet, so we don\"t need
    ; any root servers. To activate these
    ; records, remove the semicolons.
    ;
    ; . 99999999 IN NS NS.NIC.DDN.MIL
    ; NS.NIC.DDN.MIL 99999999 IN A 26.3.0.103
    ; . 99999999 IN NS NS.NASA.GOV
    ; NS.NASA.GOV 99999999 IN A 128.102.16.10

    图6.2 named.ca文件
    ;
    ; /var/named/named.hosts Local hosts at the brewery
    ; Origin is vbrew.com
    ;
    @ IN SOA vlager.vbrew.com. (
    janet.vbrew.com.
    16 ; serial
    86400 ; refresh: once per day
    3600 ; retry: one hour
    3600000 ; expire: 42 days
    604800 ; minimum: 1 week
    )
    IN NS vlager.vbrew.com.
    ;
    ; local mail is distributed on vlager
    IN MX 10 vlager
    ;
    ; loopback address
    localhost. IN A 127.0.0.1
    ; brewery Ethernet
    vlager IN A 191.72.1.1
    vlager-if1 IN CNAME vlager
    ; vlager is also news server
    news IN CNAME vlager
    vstout IN A 191.72.1.2
    vale IN A 191.72.1.3
    ; winery Ethernet
    vlager-if2 IN A 191.72.2.1
    vbardolino IN A 191.72.2.2
    vchianti IN A 191.72.2.3
    vbeaujolais IN A 191.72.2.4

    图6.3 named.hosts 文件
    ;
    ; /var/named/named.local Reverse mapping of 127.0.0
    ; Origin is 0.0.127.in-addr.arpa.
    ;
    @ IN SOA vlager.vbrew.com. (
    joe.vbrew.com.
    1 ; serial
    360000 ; refresh: 100 hrs
    3600 ; retry: one hour
    3600000 ; expire: 42 days
    360000 ; minimum: 100 hrs
    )
    IN NS vlager.vbrew.com.
    1 IN PTR localhost.

    图6.4 named.local文件


    ;
    ; /var/named/named.rev Reverse mapping of our IP addresses
    ; Origin is 72.191.in-addr.arpa.
    ;
    @ IN SOA vlager.vbrew.com. (
    joe.vbrew.com.
    16 ; serial
    86400 ; refresh: once per day
    3600 ; retry: one hour
    3600000 ; expire: 42 days
    604800 ; minimum: 1 week
    )
    IN NS vlager.vbrew.com.
    ; brewery
    1.1 IN PTR vlager.vbrew.com.
    2.1 IN PTR vstout.vbrew.com.
    3.1 IN PTR vale.vbrew.com.
    ; winery
    1.2 IN PTR vlager-if1.vbrew.com.
    2.2 IN PTR vbardolino.vbrew.com.
    3.2 IN PTR vchianti.vbrew.com.
    4.2 IN PTR vbeaujolais.vbrew.com.

    图6.5 named.rec文件

    6.2.4 验证名字服务器的设置
    有一个很好的工具用于检查名字服务器设置的操作。它称为nslookup,即可以交互式地使用,也可以从命令行上使用。在后一种情况下,你只需象这样简单地调用它

    nslookup hostname

    它将对hostname查询resolv.conf中指定的名字服务器。(如果这个文件指定了多个服务器,nslookup将随机地选择一个)。
    然而,交互模式则更令人兴奋。除了能查询单个的主机,你可以查询DNS记录的任何类型,并且传输一个域的整个区域信息。
    当不加参数地调用,nslookup将显示它所用的名字服务器,并且进入交互模式。在’>’提示符下,你可以键入任何想要查询的域名。缺省地,它请求类A记录,这些是包含与域名相关的IP地址的。
    你可以通过发出“set type=type”来改变这个类型,这里type是上面6.2节中描述的资源记录名,或ANY。
    例如,你可以与它进行下面的对话:

    $ nslookup
    Default Name Server: rs10.hrz.th-darmstadt.de
    Address: 130.83.56.60

    > sunsite.unc.edu
    Name Server: rs10.hrz.th-darmstadt.de
    Address: 130.83.56.60

    Non-authoritative answer:
    Name: sunsite.unc.edu
    Address: 152.2.22.81

    如果你试者去查询一个没有相应IP地址的名字,但DNS数据库中能找到其它的记录,nslookup将返回一个错误信息说“No type A records found”(“没有类型A记录发现”)。然而,你可以通过发出“set type”命令来查询不是类型A的其它记录。例如,要得到unc.edu的SOA记录,你要发出:

    > unc.edu
    *** No address (A) records available for unc.edu
    Name Server: rs10.hrz.th-darmstadt.de
    Address: 130.83.56.60

    > set type=SOA
    > unc.edu
    Name Server: rs10.hrz.th-darmstadt.de
    Address: 130.83.56.60

    Non-authoritative answer:
    unc.edu
    origin = ns.unc.edu
    mail addr = shava.ns.unc.edu
    serial = 930408
    refresh = 28800 (8 hours)
    retry = 3600 (1 hour)
    expire = 1209600 (14 days)
    minimum ttl = 86400 (1 day)

    Authoritative answers can be found from:
    UNC.EDU nameserver = SAMBA.ACS.UNC.EDU
    SAMBA.ACS.UNC.EDU internet address = 128.109.157.30

    以同样的方式你可以查询MX记录,等等。使用一个ANY类型将返回与一个给出的名字关联的所有资源记录。
    > set type=MX
    > unc.edu
    Non-authoritative answer:
    unc.edu preference = 10, mail exchanger = lambada.oit.unc.edu
    lambada.oit.unc.edu internet address = 152.2.22.80

    Authoritative answers can be found from:
    UNC.EDU nameserver = SAMBA.ACS.UNC.EDU
    SAMBA.ACS.UNC.EDU internet address = 128.109.157.30

    除了调试,nslookup的一个实际应用是为named.ca文件获取根名字服务器的当前列表。你可以通过查询与根域相关的所有NS类型记录来做到:

    > set typ=NS
    > .
    Name Server: fb0430.mathematik.th-darmstadt.de
    Address: 130.83.2.30

    Non-authoritative answer:
    (root) nameserver = NS.INTERNIC.NET
    (root) nameserver = AOS.ARL.ARMY.MIL
    (root) nameserver = C.NYSER.NET
    (root) nameserver = TERP.UMD.EDU
    (root) nameserver = NS.NASA.GOV
    (root) nameserver = NIC.NORDU.NET
    (root) nameserver = NS.NIC.DDN.MIL

    Authoritative answers can be found from:
    (root) nameserver = NS.INTERNIC.NET
    (root) nameserver = AOS.ARL.ARMY.MIL
    (root) nameserver = C.NYSER.NET
    (root) nameserver = TERP.UMD.EDU
    (root) nameserver = NS.NASA.GOV
    (root) nameserver = NIC.NORDU.NET
    (root) nameserver = NS.NIC.DDN.MIL
    NS.INTERNIC.NET internet address = 198.41.0.4
    AOS.ARL.ARMY.MIL internet address = 128.63.4.82
    AOS.ARL.ARMY.MIL internet address = 192.5.25.82
    AOS.ARL.ARMY.MIL internet address = 26.3.0.29
    C.NYSER.NET internet address = 192.33.4.12
    TERP.UMD.EDU internet address = 128.8.10.90
    NS.NASA.GOV internet address = 128.102.16.10
    NS.NASA.GOV internet address = 192.52.195.10
    NS.NASA.GOV internet address = 45.13.10.121
    NIC.NORDU.NET internet address = 192.36.148.17
    NS.NIC.DDN.MIL internet address = 192.112.36.4

    nslookup完整的命令集可以通过nslookup中的help命令得到。

    6.2.5 其它有用工具
    还有几个工具能帮助你完成作为一个BIND管理员的任务。这里我将概要地描述其中的两个。请查阅这些工具的文档来获取如何使用它们的信息。
    hostcvt通过将你的/etc/hosts文件转换成named的主文件来帮助你进行初始BIND配置。它产生前向(A)和逆向映射(PTR)条目,并且管理别名等。当然,它不可能为你做整个工作,正如你仍想要,例如,调整SOA记录的超时值、增加MX记录等等这类工作。不过,它仍能帮助你节约几片阿司匹林。hostcvt是BIND原代码的一部分,但是你也能在几个Linux FTP服务器上找到作为一个独立的软件包的。
    在设置好你的名字服务器以后,你可能想测试一下你的配置。做这件事的理想的(并且,就我所知而言)唯一的工具是dnswalk,一个基于perl的软件包,它通览你的DNS数据库,查找常见的错误并且验证信息的一致性。近来,dnswalk已在comp.sources.misc上发布,并且将会在所有对该组存档的FTP站点上存储(如果你不知道靠近你的任何这样的站点,ftp.uu.net将是一个可靠的地方)。





    注释
    [1] 在Linux的FTP站点上有各种named执行文件,每个的配置稍有不同,有些将它们的pid文件放在/etc中,有些将pid文件存储在/tmp或/var/tmp中。
    [2] 注意,这个例子中的域名是以无轨迹点给出的。Named的早期版本好象将轨迹点当作错误看待,并且悄无声息地舍弃了该行。BIND-4.9.3据称以修正。
    [3] 注意,如果没有安装任何根服务器提示,你就不能向你的名字服务器查询根服务器。Catch-22!为了避免这个难题,你可以或者使得nslookup使用一个不同的名字服务器,或者你可以使用图6.2中的样本文件作为一个起点,然后获取一张有效服务器的完全列表。
    发布人:netbull 来自:Linux自由鸽