Linux 守护进程在 DNS 失败期间“保留”DNS 答案

Linux 守护进程在 DNS 失败期间“保留”DNS 答案

有没有一种 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 到期之前,缓存提供缓存的响应;到目前为止,一切正常
5. 响应的 TTL 到期,缓存刷新条目并且无法获得新的响应,因为远程 DNS 仍然处于关闭状态;这种情况不太好

答案1

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

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

最终,您要求的是名称服务器记住最后已知的非错误响应,这不是 DNS 空间中当前存在的功能。目前正在制定一项标准草案来解决这个问题这是因为针对权威 DNS 系统进行 DDoS 攻击的现象越来越普遍。一旦该提案通过草案阶段,我们可能在不久的将来开始看到该提案的实施。

答案2

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

如果启用,unbound 会尝试从缓存中提供旧响应,并在响应中将 TTL 设置为 0,而不等待实际解析完成。实际解析答案稍后会进入缓存。默认值为“否”。

可能让您感到困惑的是,当“实际解析答案”为 时SERVRFAIL,条目将过期。不过,测试这一点应该不费力。

答案3

可以制作一个程序,定期使用 DNS 查询远程主机名,然后/etc/hosts使用该信息更新本地文件。

最终结果是该/etc/hosts文件充当域名 IP 的本地缓存,应用程序将使用它作为 IP 地址的来源。

但我不知道有任何现成的软件可以做到这一点。

答案4

查看您的发行版。我知道 Ubuntu (>=12.04) 及其同类产品已经在本地机器上安装了 dnsmasq DNS 服务器,用于执行缓存和其他 DNS 欺骗。您可能能够利用类似的东西使 DNS 缓存具有更长的缓存/TTL 时间。

相关内容