0

我们使用禁用 ipv6 的 RH5.8。

命名(绑定)服务处于转发模式(启用缓存)

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

但不幸的是到目前为止没有找到任何解决方案......

4

1 回答 1

1

根据评论中的要求:关于负缓存的一些解释。

NXDOMAIN 和 NODATA 之间的区别在 RFC 2308 的第 5 节中进行了描述:

应缓存由名称错误 (NXDOMAIN) 导致的否定答案,以便可以检索并返回它以响应对导致缓存否定响应的相同 <QNAME, QCLASS> 的另一个查询。

因此,可以根据 QNAME(即“blabla.example.com.”)和 QCLASS(通常为“IN”)缓存 NXDOMAIN。所以这意味着blabla.example.com根本不存在。负缓存条目与 QTYPE 无关。NODATA 的答案不同:

应缓存因无数据错误 (NODATA) 导致的否定答案,以便可以检索并返回它以响应对导致缓存否定响应的相同 <QNAME, QTYPE, QCLASS> 的另一个查询。

这里包含 QTYPE(即“AAAA”)。NODATA 负缓存条目仅表示此名称不存在此特定记录类型。

所以:如果您收到 NXDOMAIN 响应,那么您就知道该名称对于任何记录类型都不存在。如果您收到 NODATA 响应,则您知道请求的记录类型不存在,但可能存在其他记录类型。

这也意味着在发送响应时,如果同一名称可能存在不同记录类型的有效记录,则永远不应发送 NXDOMAIN 响应。不存在的域名被缓存,并且缓存将开始告诉其客户端该名称根本不存在。

于 2013-04-07T22:02:07.600 回答