我们使用禁用ipv6的RH5.8
named(bind)服务处于转发模式(启用缓存)
options {
directory "/var/named";
listen-on { 127.0.0.1; };
forwarders {10.10.12.1;};
forward only;
};
似乎有些命令(如telnet)总是首先查询AAAA记录,当回退到查询A记录时,答案(没有这样的名字)已经在命名缓存中。
结果,客户端总是得到一个错误。
在下面的例子中,10.10.10.1是一个本地ip:
127.0.0.1 -> 127.0.0.1 DNS Standard query AAAA testapp.test.com
10.10.10.1 -> 10.10.12.1 DNS Standard query AAAA testapp.test.com
10.10.10.1 -> 10.10.12.1 DNS Standard query AAAA testapp.test.com
10.10.12.1 -> 10.10.10.1 DNS Standard query response, No such name
127.0.0.1 -> 127.0.0.1 DNS Standard query response, No such name
127.0.0.1 -> 127.0.0.1 DNS Standard query A testapp.test.com
127.0.0.1 -> 127.0.0.1 DNS Standard query response, No such name
我在网上搜索,发现不仅仅是我遇到了这样的问题http://www.linuxforums.org/forum/red-hat-fedora-linux/136217-disabling-ipv6-dns-queries.html
less /etc/modprobe.conf
alias net-pf-10 off
alias ipv6 off
options ipv6 disable=1
less /etc/sysconfig/network
NETWORKING_IPV6=no
less /etc/sysconfig/named
OPTIONS="-4"
named -v
BIND 9.3.6-P1-RedHat-9.3.6-20.P1.el5
根据评论的要求:对负缓存的一些解释。
NXDOMAIN和NODATA之间的区别在RFC 2308的第5节中描述:
由于名称错误(NXDOMAIN)导致的否定答案应该缓存,以便在响应时检索和返回另一个查询相同的QNAME, QCLASS>这导致了缓存的否定回复。
所以NXDOMAIN可以基于QNAME缓存(即。"blabla.example.com.")和QCLASS(通常是"IN")。这意味着blabla.example.com
根本不存在。负缓存项与QTYPE无关。NODATA的答案是不同的:
由无数据错误(NODATA)导致的否定答案应该缓存,以便在响应时检索和返回QNAME, QTYPE, QCLASS>结果是缓存的否定响应。
这里是QTYPE(即:"AAAA")包括在内。NODATA负缓存项仅意味着此特定记录类型不存在此名称。
因此:如果您收到一个NXDOMAIN响应,那么您就知道任何记录类型的名称都不存在。如果你收到一个NODATA响应,那么你就知道请求的记录类型不存在,但是其他的记录类型可能存在。
这也意味着在发送响应时,如果可能存在相同名称的不同记录类型的有效记录,则应该永远不要发送NXDOMAIN响应。不存在的域名将被缓存,缓存将开始告诉其客户端该名称根本不存在。