Linux 中的 DNS 缓存

新手上路,请多包涵

我对 DNS 缓存感到困惑。我正在编写一个小型转发代理服务器,并希望在 Linux 系统上使用 OS DNS 缓存。

如果我理解正确,浏览器级别有 DNS 缓存。然后是操作系统级别的 DNS 缓存(Windows 有它。我不确定 Linux 发行版是否默认有它)。

浏览器或代理服务器如何使用操作系统 DNS 缓存?我试图找出是否可以依靠 Linux 进行 DNS 缓存,而不是在我的代理中自己进行。

原文由 agent.smith 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 849
2 个回答

在 Linux(可能还有大多数 Unix)上,除非安装并运行了 nscd ,否则没有操作系统级别的 DNS 缓存。即便如此,至少在 Debian 中默认禁用 nscd 的 DNS 缓存功能,因为 它已损坏。实际的结果是您的 Linux 系统很可能不执行任何操作系统级别的 DNS 缓存。

您可以在您的应用程序中实现自己的缓存(就像他们为 Squid 所做的那样,根据 diegows 的评论),但我建议不要这样做。工作量很大,很容易出错(nscd 搞错了!!!),它可能不像专用 DNS 缓存那样容易调整,而且它复制了应用程序之外已经存在的功能。

如果使用您的软件的最终用户需要 DNS 缓存,因为 DNS 查询负载大到足以成为问题,或者到外部 DNS 服务器的往返时间足够长而成为问题,他们可以安装缓存 DNS 服务器例如 Unbound 与您的应用程序在同一台机器上,配置为缓存响应并将未命中转发到常规 DNS 解析器。

原文由 Celada 发布,翻译遵循 CC BY-SA 4.0 许可协议

以下是另外两个可用于 Linux 上的 DNS 缓存的软件包:

  • dnsmasq
  • 绑定

为 DNS 转发和缓存配置软件后,然后在 /etc/resolv.conf 中将系统的 DNS 解析器设置为 127.0.0.1。

如果您的系统正在使用 NetworkManager,您可以尝试使用 — 中的 /etc/NetworkManager/NetworkManager.conf dns=dnsmasq 选项,或者您可以将连接设置更改为自动(仅地址),然后在 /etc/NetworkManager/dispatcher.d 获取 DHCP 名称服务器的目录,在您的 DNS 缓存软件中将其设置为 DNS 转发服务器,然后触发配置重新加载。

原文由 Zan Lynx 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题