bind9 faq
本文译自BIND主网站上的一篇文章:http://www.isc.org/products/BIND/FAQ.html。应该说,这些问题都非常典型,对BIND 9用户的日常维护和管理可以提供不小的帮助。
1. 当我在Linux 2.2.x上使用以--enable-threads选项编译的bind程序时,为什么-u参数不起作用?
答:Linux线程并没有完全实现Posix线程(pthreads)标准。特别是setuid()只能对当前线程起作用,而不适用于整个进程。正是由于此项限制,Linux上的BIND 9就无法像在其他支持的系统平台上一样使用setuid()。在创建线程之前不能调用setuid(),因为服务器只有在线程启动之后才能开始监听预留端口。
对于2.2.18或2.3.99-pre3以及更新的内核而言,则能在调用setuid()之后仍然保持可用性。这使得BIND 9可以更早些调用setuid(),而同时又保持了绑定预留端口的能力。这是针对Linux所作的特别处理。
在2.2内核上,BIND 9的确放弃了许多root权限,所以相对于那些没有放弃权限的root进程而言,这会更加安全一些。
如果Linux线程已经正常工作,那么这项限制也就不复存在。
用户可以使用--disable-threads选项(这是默认选项)来编译BIND9,这样会生成一个非线程的版本,用户能够使用-u选项。
2、为什么named的日志中会给出警告信息"no TTL specified - using SOA MINTTL instead"?
答:你的zone文件不符合RFC1035标准。你可以使用两种方法来解决此问题:
1)在zone文件的开头加入一行对TTL的定义,例如:$TTL 86400
2)在zone文件的第一条记录中包含TTL字段,例如:example.com. 86400 IN SOA ns hostmaster
3、为什么我在Linux上会看到5个(或者更多)的named副本?
答:在ps下每个Linux线程也会像进程一样显示出来。一般运行的线程个数为n 4,这里n表示CPU的数目。注意在内存量的使用上并不遵从累加的原则;如果每个进程使用10M内存,那么所有线程总共也只使用10M内存。
4、为什么即便我在Linux系统上用root身份运行BIND 9,在访问配置文件或zone文件时,仍然会得到关于"permission denied"错误的日志?
答:在Linux上,BIND 9在启动时就放弃了绝大部分root权限,这其中就包括打开其他用户所属文件的权限。因此,如果服务器是以root身份运行的,那么配置文件和zone文件也应该由root所有。
5、为什么我得到类似于"dns_zone_load: zone foo/IN: loading master file bar: ran out of space"的错误提示?
答:这通常是由于TXT记录中少了一个引号所致。检查所有TXT记录是否都包含了完整的引号。
6、我怎样能够在Linux上从多线程named生成一个可用的core文件?
答:如果Linux内核是2.4.7或更新的版本,多线程core导出(dump)是可用的(也就是说,将导出正确的线程)。否则,如果使用的是2.2内核,那么需要应用在contrib/linux/coredump-patch中的内核补丁并重新编译内核。该补丁可以使多线程程序导出正确的线程。
7、我怎样限制别人查询我的服务器版本?
答:在named.conf的"options"段中放置"version"选项,并将其值设成与你实际使用版本不同的其他版本。注意:这样做不能避免攻击,反而可能会妨碍别人对你服务器问题的诊断尝试,而且这同样可能成为别人鉴别你服务器的标志。
8、我怎样限制只有远程用户才能查询服务器版本?
答:当存有版本信息的内部视图被最后匹配时,下面的视图语句将拦截查询。上面一问回答中的警告在这里同样适用。
view "chaos" chaos {
match-clients { ; };
allow-query { none; };
zone "." {
type hint;
file "/dev/null"; // or any empty file
};
};
9、"no source of entropy found"或"could not open entropy source foo"是什么意思?
答:服务器需要信息熵(entropy)源来执行特定的操作,通常这与DNSSEC相关。这些信息提示没有信息熵源。在有/dev/random或类似设备的系统上,默认会使用它们。信息源也可以通过named.conf中的random-device选项来定义。
10、我安装了BIND 9并且重新启动了named,但是它仍然是BIND 8,这是为什么?
答:BIND 9默认安装在/usr/local下。而BIND 8通常安装在/usr下。检查是否正确的named在运行。
11、我尝试使用TSIG来验证动态更新或者zone传输。我确信密钥设置是正确的,但是服务器仍然拒绝TSIG,为什么?
答:这可能是时钟不准的问题。检查客户端的时钟和服务器上的是否同步(例如使用ntp)。
12、我尝试编译BIND 9,但"make"却因为某些文件无法找到而失败了。为什么?
答:使用并行或分布式的"make"来编译BIND 9是不支持的,而且也无法工作。如果你确实使用的是它们中一种,建议你使用一般的make或gmake来替代。
13、我有一台BIND 9的主服务器和一台BIND 8.2.3的从服务器,而主服务器记录到类似于"notify to 10.0.0.1#53 failed: unexpected end of input"的错误信息。哪有问题?
答:该错误信息是由BIND 8.2.3中一个已知的bug所致,这在BIND 8.2.4中得到了修复。你可以完全不必理会它 - 不管错误信息如何,notify都在正常工作着。
14、我不断地得到如下的日志信息,为什么?
Dec 4 23:47:59 client 10.0.0.1#1355: updating zone 'example.com/IN': update failed: 'RRset exists (value dependent)' prerequisite not satisfied (NXRRSET)
答:DNS更新程序允许更新请求在进行更新之前进行测试以确认特定的条件是否满足。以上信息说明条件不满足,无法继续进行更新。参看doc/rfc/rfc2136.txt以获知关于前提条件的更多信息。 技术无忧.com











文章评论
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面