在ipv4接口上查询AAAA DNS



我们使用禁用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响应。不存在的域名将被缓存,缓存将开始告诉其客户端该名称根本不存在。

最新更新