我有 DNS 缓存服务器。我使用的是 BIND 9.8.3-P1 或 dnscache(djbdns cache)。我经常在日志中看到“意外的 RCODE SERVFAIL”错误。bind9 和 dnscache 都有这个问题。在 tcpdump 中,我发现它们甚至不询问权威服务器。使用同一台机器上的 nslookup,我从权威服务器获得了正确的答案。
似乎我的缓存服务器将缓存服务失败答案放入其中,并且不再询问。我认为根据 RFC,它们根本不应该放入 SERVFAIL 答案。任何想法都将不胜感激。
答案1
我认为你对正在发生的事情的看法是正确的,但是RFC 2308在 s7.1 中非常清楚地允许缓存 SERVFAIL:
In either case a resolver MAY cache a server failure response. If it
does so it MUST NOT cache it for longer than five (5) minutes
如果您正在运行 DNS 服务器,您可以调整此行为,甚至完全停止它,因此如果缓存这些内容并让您烦恼的名称服务器超出了您的控制范围,请运行您自己的 DNS 服务器。
答案2
您也可以尝试 max-ncache-ttl 选项:
http://www.zytrax.com/books/dns/ch7/hkpng.html#max-ncache-ttl
这不会阻止 servfail 的发生但应该使 bind 不缓存它。