|-常见问题
        |-详细问题
BIND常见问题集
Berkeley Internert Name Domain(BIND)是我们所熟知的
域名软件,它具有广泛的使用基础,Internet上的绝大多数
DNS服务器都是基于这个软件的。BIND目前由ISC(Internet
Software Consortium)负责维护,具体的开发由Nominum
(www.nominum.com)公司来完成。下面编译的这个常见问题集就
是由该公司所发布的(同时也见于http://www.isc.org/bind),
可以说,它具有较强的针对性和实用性。


    1) 哪里可以找到BIND?
    BIND以源码的格式发布。当前的版本为BIND 9,不过BIND 
8.2.2-P5仍然是广泛发布的版本。考虑到早期版本的安全问
题,如果您还在运行比8.2.2-P5更早的版本,那么我们强烈推荐
您升级软件。

    以下的URL包括了源码和其他相关资源的链接,你可能会觉
得很有用处:

    http://www.isc.org/products/BIND/

    源码也可以使用ftp从ftp://ftp.isc.org/isc/bind/src/8.2.2-P5/bind-src.tar.gz 
获得。
    镜像BIND的ftp服务器列表和其它ISC维护的开发源码软件可
以在ftp://ftp.isc.org/isc/MIRRORS上找到。

    2) 怎样安装BIND?
    下载源码到一个空的目录。如果你需要的话,你也可以下载
文档和捆绑的包。
    接下来,你需要解压(unzip)和解包(untar)发布的包。

    gunzip < bind-src.tar.gz | tar xf -
    然后,你需要编译和安装软件。常见src/INSTALL以获知指
令。在安装之前请备份系统,因为安装可能会覆盖旧的二进制

    代码;这是依赖于系统的。
    如果你是从BIND 4转过来的,那么你需要将配置文件
named.boot转成新的语法。这里包含了一个转换程序。
    named-bootconf
    ( /etc/named.boot ) /etc/named.conf
    同时,如果你正从BIND 4转换而来,那么系统启动脚本需要
进行修改,以使之查找/etc/named.conf,而不是
    /etc/named.boot。
    接着,你需要终止老的named并启动新的。
    kill -TERM 
    ndc start
检查系统日志(在大多数Unix系统上,错误都
存在/var/adm/messages中)因为当前的版本比先前的版本容错性会差一些。


    3) 哪里有基于NT的BIND?
    最新的基于NT的BIND可以从ftp://ftp.isc.org/isc/bind/src/8.2.2-P5/bind-src.tar.gz
上的8.2.2p5源码中找到。你应该能够使用WinZip来解压/解包
8.2.2p5文件。一旦解压了源码,你会在src/port/winnt目录下
找到NT的移植程序。你需要Visual C++ 6.0来编译它。

    4) 哪里可以找到有关BIND的信息?
    先从http://www.isc.org/products/BIND/开始。
    对于BIND用户,有一个可用的邮件列表。使用
http://www.isc.org/services/public/lists/bind-lists.html
上的表单订阅。在你提交你的问题到邮件列表之前,请检查邮件
列表的档案以查看是否你的问题已经回答过了。可搜索的
bind-users邮件列表档案位于http://www.isc.org/ml-archives/bind-users/。
    Bind-users邮件列表同时指向了中等的Usenet新闻组
comp.protocols.dns.bin.你可以在http://www.deja.com/上搜
索该新闻组。
    BIND的"圣经"是DNS and BIND,Third Edition,作者:Paul 
Albitz和Cricket Liu。


    5) 为什么我应该升级BIND到最新的版本?
    最新的BIND版本解决了在以前版本中发现的bug和/或安全漏
洞。
    6) 我现在使用的是BIND的什么版本?
    有几种方法可用来确定你正在使用什么版本的BIND。请注意
有一些是针对于特定操作系统的,而其它一些不能在早于
4.9.5的BIND版本上工作。我们会在下面的描述中指明这些限
制。
    ● 最简单的告知版本号的方法是查找named启动时写到系统
日志文件中的消息。例如:

Jul 14 12:54:21 ns named[15677]: starting. named 8.2.2-P5
Jul 14 12:54:21 hostmaster@ns1.nominum.com:/usr/sbin/named
    ● named带"-v"开关会显示版本:
    # named -v 
    named 8.2.2-P5 Thu Jul 20 17:19:57 PDT 2000

    hostmaster@ns1.nominum.com:/usr/sbin/named
    ● 当使用更新版本的BIND时,BIND的name后台守护程序的
控制接口程序可以提供版本信息:
    ndc status
    ● 源代码控制系统(SCSS)的"what"命令提供了文件的标
示信息。
    what /named
    以下命令当在运行BIND 4.9.5及以上版本的服务器上检查时
会起作用。这两个程序都包括在BIND的发布版本中。
    ●nslookup 
    # nslookup
    Default Server: ns.yourco.bogus
    Address: 333.333.333.333

    > set class=chaos
    > set type=txt
    > version.bind
    Server: ns.yourco.bogus
    Address: 333.333.333.333

    VERSION.BIND text = "8.2.2-P5"
    〉
    ●dig 
    dig version.bind txt chaos @ server name
    或者
    dig @ server name txt chaos version.bind

    7) 我得到一个错误提示:No default TTL set using SOA 
minimum instead.为什么会这样?怎么办?
    从BIND 8.2开始,你需要一条$TTL指示来设置域的默认
TTL。可在域的SOA记录之前添加一条'$TTL XXXXXX'指示。

    (XXXXXX表示计算到秒的默认TTL.)

    8) 主机名可使用哪些有效字符?
    主机名可以包括字母,数字以及连字符,但不能以连字符开
头。下划线(_)在主机名中不是有效的字符。尽管有一些DNS服
务软件包可以允许下划线在主机名中出现,但大多数是不行的。
使用一个带有下划线的域或者主机名会导致大多数Internet上的
名字服务器不能识别相关的主机/IP地址。


    9) 为什么当我在本域中的一台主机上使用nslookup时会得
到non-authoritative的答复?
    这通常发生在域(zone)文件中有错误出现的时候。检查系
统日志文件'messages'以查证错误。


    10) 我已经修改了自己的域,但是在Internet上的其它地
方看不到这种改变,为什么?
    每当你修改了你的域文件,例如当你添加或者修改了主机记
录的时候,你也必须更新域的SOA记录的文件版本,或者是
"serial number",因为名字服务器从你的服务器检索信息时需
要知道发生了修改。如果从上次查询之后版本号没有修改,就不
会执行更新。举例如下:
    ; foo.com.
    $TTL 14400
    @ IN SOA
    someplace.foo.com. admin.foo.com. (
    1 ; this file's version -- change
    43200 ; refresh twice a day
    1800 ; retry refresh every 15 minutes
    604800 ; expire after 1000 hours (over week)
    259200 ) ; minimum TTL of 3 day
    显而易见,带'file's version'的行是我们想要修改的。版
本序号可以为任何数字;1,2,3,4或者2001,2002,2003,等
等。唯一的限制是版本号不能多于10位。在这个示例中,如果你
对域文件作了修改,你需要将版本序号改为'2'。


    11) 为什么没有IP地址?
    在/etc/resolv.conf中没有名字服务器记录。

    12) 在我的日志文件中出现的"lame server"错误是什么?
    "lame server"指的是不能确信其是否具有域的授权的服务
器。如果你有lame server,或者是授权给了lame server的域,
那么"lame server"消息很有用。如果你宁愿不看
到"lameserver"消息,你可以使用logging语句丢弃它们:

    logging {
    category lame-servers{ null; };
    };

    13) Microsoft Windows 2000和BIND的关系怎样?
    BIND默认会检查所有记录以确保只在需要主机名的地方使用
了主机名,这能够防止意外的一致性问题。

    Microsoft Windows 2000使用一个称为"_msdcs"来存放动态
目录数据。尽管这种子域不会与合法的主机名产生不一致,

    但是也使得在子域中存放非法的主机名成为可能。这种主机
名的使用默认是被BIND拒绝的。
    动态目录希望在_msdcs中有"全局目录(globalcatalog)"(例
如,gc._msdcs.example.com),这默认是拒绝的。为了解决此问
题,我们推荐动态目录设为独立的域(如,"_msdcs.example.com")
并配置成不检查非法的主机名。这应该是合理的,因为Window 
2000服务器创建这些数据,而且不应该会与其它希望访问这些数
据的Windows 2000机器产生不一致问题。

    例如,
    zone "_msdcs.example.com" {
    type master;
    file "_msdcs.example.db";
    check-names ignore;
    allow-update { localnets; };

    };

    14) 什么是TSIG key?
    TSIG key提供了一种鉴别和验证交换的DNS数据有效性的方
法,它在解析器和服务器之间或者两台服务器之间使用一个密
钥。
    15) 我怎样使用TSIG key来动态更新我的DNS?
    首先你需要使用以下命令生成一个TSIG密钥(我们将使用
tsig-key作为密钥文件名):

    dnskeygen -H 128 -h -n tsig-key。
    这会生成一对密钥文件:
    'Ktsig-key.+157+00000.key',这是一个ASCII文件,它包
括以下行:
    tsig-key. IN KEY 513 3 157
    awwLOtRfpGE+rRKF2+DEiw== 
    和
    'Kvip-key.+157+00000.private' ,这包括:
    Private-key-format: v1.2 Algorithm: 157 (HMAC) 
    Key: awwLOtRfpGE+rRKF2+DEiw== 
    你将需要获取base64编码的密awwLOtRfpGE+rRKF2+DEiw== 
并在配置你的服务器命名设置中使用它。例如:

    key tsig-key. { algorithm hmac-md5; secret "awwLOtRfpGE+rRKF2+DEiw=="; };

    zone "ddns.dregis.com" {
    ...
    ...
    allow-update { key tsig-key. ; };
    } 
    记得在这之后重启named。
    然后,你需要复制这两个密钥文件到客户系统的某个位置
(例如使用/var/named/tsig)。最后,你需要运行以下命令:

    nsupdate -k /var/named/tsig:tsig-key。

    16) 在named.conf中的'forwarder'选项有何作用?
    forwarder行告诉服务器转发所有查询,因为它对另一个域
名服务器没有授权或缓冲的数据。