在Linux中的DNScaching

我很困惑DNScaching。 我正在写一个小型的转发代理服务器,并希望在Linux系统上使用操作系统DNScaching。

如果我理解正确,那么在浏览器级别有DNScaching。 然后是在操作系统级别的DNScaching(Windows有它,我不知道Linux发行版是否默认)。

那么,浏览器/ proxy_server如何使用OS DNScaching呢? 我试图find我是否可以依靠Linux进行DNScaching,而不是在我自己的代理内部进行。

谢谢

在Linux(也可能是大多数Unix)上,除非安装并运行nscd,否则不存在操作系统级别的DNScaching。 即使如此,nscd的DNScachingfunction至less在Debian中是被禁用的,因为它是坏的 。 实际的结果是,你的linux系统很可能不会做任何操作系统级的DNScaching。

你可以在你的应用程序中实现你自己的caching(就像他们为Squid做的一样,根据diegows的评论),但我会推荐它。 这是很多工作,很容易弄错(nscd错了!!!),它可能不会像专门的DNScaching那样容易调整,并且它复制了已经存在于应用程序之外的function。

如果使用软件的最终用户需要进行DNScaching,因为DNS查询负载足够大,或者外部DNS服务器的RTT长到足以成为问题,那么他们可以安装cachingDNS服务器,如Unbound在与应用程序相同的机器上,configuration为caching响应并将未命中转发给常规DNSparsing器。

这里有两个可用于Linux上的DNScaching的软件包:

  • 的dnsmasq
  • 捆绑

configurationDNS转发和caching软件之后,您可以在/etc/resolv.conf中将系统的DNSparsing器设置为127.0.0.1。

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

您可以在这里find一个使用dnsmasq 在Debian中进行DNScaching的例子。

Firefox包含一个dnscaching。 要禁用DNScaching:

  1. 打开你的浏览器
  2. 在地址栏中inputabout:config
  3. 右键单击属性列表,然后在上下文菜单中select新build>整数
  4. input“network.dnsCacheExpiration”作为首选项名称,input0作为整数值

禁用时,Firefox将使用操作系统提供的DNScaching。