BIND(转发器+缓存)- 如果转发器发生故障,则提供缓存服务

BIND(转发器+缓存)- 如果转发器发生故障,则提供缓存服务

我想将 BIND 配置为 DNS 转发器并利用缓存。

如果转发器失败,我该如何配置它来提供缓存结果(即使超出 TTL)?

这个问题已经在这里提出,但没有答案 -如果所有转发器都失败,如何让 BIND 返回旧的缓存实体?

我需要这样做的原因是,我的 ISP 非常糟糕(而且在我所在的地区没有更好的选择)。通常,所有 DNS 查找请求都会失败,我尝试了许多免费的 DNS 提供商,它们在此期间都失败了。互联网连接没有中断,只有 DNS 查询失败。

这就是我的要求背后的原因,所以当这种情况发生时,我仍然可以使用缓存的 DNS 结果(显然已经存在于缓存中)继续我的工作。

答案1

使用过期数据在标准中是绝对不能使用的,所以如果 BIND 真的能做到这一点,我会感到非常惊讶。您可能想研究更适合个人使用的替代解析器,或者(因为听起来您的 ISP 会间歇性地阻止到端口 53 的流量)尝试获取 VPN 隧道并让您的 BIND 使用它。

答案2

Calle 是正确的,你不会让 BIND 违反 TTL(除了降低最大值,但这在这里没有帮助)。话虽如此,如果你的 ISP 太差以至于你无法可靠地访问转发器,我真的不确定使用转发器的价值应该是什么

许多域名提供的权威名称服务器比通常配置的转发器数量 (2) 还要多。这反过来意味着在出现数据包丢失的情况下,查询有更多机会获得响应。在我看来,自己执行递归比使用转发器配置更划算。

您可能还想尝试支持预取功能的较新版本的 BIND。结合您自己的递归,服务器将自动尝试在记录从缓存中过期之前立即针对该记录的所有名称服务器执行刷新。这仅在查询在记录即将过期之前不久到达时才会发生,但它在这里可能仍然有帮助。

预取

当收到对即将过期的缓存数据的查询时,named 可以立即从权威服务器刷新数据,确保缓存中始终有可用的答案。

预取指定当前查询预取的“触发”TTL 值:当在查询处理期间遇到具有较低 TTL 值的缓存记录时,它将被刷新。有效的触发 TTL 值为 1 到 10 秒。大于 10 秒的值将默默减少到 10。将触发 TTL 设置为零 (0) 会导致预取被禁用。默认触发 TTL 为 2。

可选的第二个参数指定“合格”TTL:记录符合预取条件时可接受的最小原始 TTL 值。合格 TTL 必须至少比触发 TTL 长六秒;否则,named 会默默将其向上调整。默认合格 TTL 为 9。

ftp://ftp.isc.org/isc/bind9/cur/9.10/doc/arm/Bv9ARM.ch06.html

答案3

BIND 是 DNS 服务器,它遵循标准并遵守 TTL 规则。您需要的是具有 DNS 缓存支持的缓存代理。例如,将 positive_dns_ttl 设置为某个较大值的 Squid 可以发挥作用,或者您喜欢的任何其他代理。

相关内容