Linux 守护进程在 DNS 失败期间“持久化”DNS 应答

krz*_*zys 3 domain-name-system

是否有适用于 Linux 的工具可以在 DNS 服务器出现故障时“保留”IP 地址?因此,尽管远程 DNS 服务器暂时失败,域仍然可以在这台机器上解析。

场景是我有一台机器,上面部署了我的 Web 应用程序。应用程序必须连接到远程资源。该资源不在我的控制之下——它是其他公司提供的第三方 Web 服务,但它在我客户的域名下。客户端的DNS服务器不时出现故障,所以我的应用程序无法解析域名,但是这个第三方WS仍然可用(客户端的DNS故障与它无关),所以我可以通过IP访问它并完成我的工作。

所以我正在寻找工具(DNS缓存?),只要DNS服务器启动,它就会通过DNS解析域名,并在DNS服务器关闭时返回最后获得的值。减少 DNS 请求计数不是我对这种情况感兴趣的,因此“经典”DNS 缓存在这里不是解决方案(我认为)。


编辑:

使用本地 DNS 缓存的场景对我不起作用:
1. 远程 DNS 运行良好
2. 本地 DNS 缓存正在缓存来自远程 DNS 的响应
3. 在响应的 TTL 到期之前,远程 DNS 崩溃
4. 直到响应的 TTL 到期, cache 提供缓存响应;到目前为止,一切都很好
5. 响应的 TTL 过期,缓存刷新条目,无法获得新的响应,因为远程 DNS 仍然关闭;这是不好的

And*_*w B 6

正如其他人所建议的那样,最接近的是服务器上的缓存,nscd 或本地递归服务器。也就是说,这种方法存在许多问题:

  • 默认情况下,这些解决方案未配置为无限期地记住名称(如您所问),并且会根据与各个 DNS 记录关联的 TTL 使缓存条目过期。许多记录都有大约五分钟的短 TTL。
  • 该软件可能不允许您强制执行防止数据过期的“最小 TTL”策略。
  • 即使该软件确实允许您强制执行最小 TTL,这也会引入其自身的问题。出于某种原因,某些记录具有较短的 TTL。忽略那些短 TTL 可能会导致意外问题。

最终,您要求名称服务器记住最后一个已知的非错误响应,这不是 DNS 空间中当前存在的功能。由于以 DDoS 攻击为目标的权威 DNS 系统越来越流行,目前正在制定标准草案来解决这个问题。一旦它超过草案状态,我们可能会在不久的将来开始看到它的实现。


wom*_*ble 5

虽然我自己从未使用过它,但unbound缓存解析器的serve-expired设置听起来可能符合要求:

如果启用,unbound 会尝试从缓存中提供 TTL 为 0 的旧响应,而无需等待实际解析完成。实际的解析答案稍后会在缓存中结束。默认为“否”。

可能会让您失望的是,当“实际解析答案”为 时SERVRFAIL,该条目将过期。不过,测试它不应该花费太多精力。