我正在设置内部 DNS 缓存,因为我的防火墙无法处理 DNS 请求创建的所有会话。我尝试使用 bind9、dnsmasq 和 DJB dnscache,它们都有助于减少离开我网络的请求数量,但仍然有大量请求正在发出。
查看日志文件以及 tcpdump 和 dnstop 输出,似乎返回 SERVFAIL 的请求根本没有被缓存。而且很多失败的请求都是 AAAA 请求,这很遗憾,因为我没有在任何服务器上启用 ipv6。
我已经研究了几种解决此问题的方法,我认为如果我能以某种方式阻止 DNS 缓存转发 AAAA 记录请求,那么请求的数量将大大减少。
我发现最接近的东西是过滤器-aaaa-on-v4选项。但是,这只会从服务器响应中删除记录,而不会阻止其转发该记录。
任何帮助,将不胜感激。
答案1
我不认为这在任何标准 DNS 解析器中都可行。此外:隐藏来自客户端的 IPv6 响应可能会破坏 DNSSEC 验证,具体取决于您是否/在何处进行验证。
权威 DNS 服务器在被要求提供其没有的数据时不应返回 SERVFAIL,因此真正的问题在于这些服务器。我个人很少看到这种不良行为,但您似乎更经常看到这种情况。如果只有少数服务器出现此类行为,最好让运营商或域名持有者知道,以便他们能够修复它。
有些防火墙可以无状态处理某些流量。你可以过滤
internal DNS cache address port > 1024 <--> * port 53
并使所有流量无状态。您不会失去太多保护,防火墙的负载也会降低。老实说,我很惊讶您的防火墙在处理 DNS 查询会话时出现问题。您从未指定您使用的品牌和型号。我在 Juniper SRX 210 上为 BitTorrent 服务器执行了此操作。如果您认为 DNS 请求会导致许多会话... ;-)
如果其他方法都失败了,您可以将工作转移到外部 DNS 解析器。如果您将 DNS 缓存配置为将所有查询转发到外部解析器(想到了您的 ISP 解析器和 8.8.8.8/8.8.4.4),那么您的 DNS 缓存就不必自己遍历 DNS 树,这将大大降低查询数量。