如何在NetworkManager控制的dnsmasq中启用DNS缓存?

Ubuntu Desktop 12.04使用dnsmasq执行DNS查找,但未配置为缓存这些结果。 (我已经通过使用dig来解决这个问题来解决这个问题,我没有看到第一次查找后响应时间有很大的改进。)如何配置NetworkManager控制的dnsmasq来缓存DNS查找的结果?

在Ubuntu 12.10中,您可以通过放置线来启用NetworkManager控制的dnsmasq实例的缓存

cache-size=1000 

(在/etc/NetworkManager/dnsmasq.d/中的新文件中使用您的首选名称而不是1000)。 要激活此更改,您必须这样做

 sudo stop network-manager sudo killall dnsmasq sudo start network-manager 

或重新启动。

我能够使用第一个答案中描述的方法在Linux Mint 13(基于Ubuntu 12.04)中启用DNS缓存。 我创建了一个包含行cache-size=100的文件/etc/NetworkManager/dnsmasq.d/cachedns ,然后重新启动了network-manager。 即使dnsmasq由网络管理器在其命令行上使用硬编码的--cache-size=0执行,但在配置文件中设置cache-size会覆盖该值。 您可以通过执行以下操作validation它是否有效:

 sudo killall -USR1 dnsmasq tail /var/log/syslog 

您应该在syslog中看到一行如下所示,显示缓存大小:

 dnsmasq[17808]: cache size 100, 0/2 cache insertions re-used unexpired cache entries. 

我不想从12.04升级,但仍然希望NetworkManager管理的dnsmasq启用了缓存,但正如另一个答案所说, – cache-size = 0是硬编码的,无法通过配置进行更改。

所以我最终做的是以下,作为root:

 mv /usr/sbin/dnsmasq /usr/sbin/dnsmasq.real 

然后使用以下内容创建一个新文件/ usr / sbin / dnsmasq:

 #!/bin/bash args=$(echo "$@" | sed 's/--cache-size=0/--cache-size=1000/') /usr/sbin/dnsmasq.real $args 

确保chmod +x /usr/sbin/dnsmasq ,并将缓存大小从1000更改为您想要的任何内容,享受带有DNS缓存的LTS版本!

在12.04中,dnsmasq由NetworkManager启动,带有硬编码(即不可配置)参数–cache-size = 0

dnsmasq的联机帮助页称将cache-size设置为零会禁用缓存。 如果要启用缓存,则可能必须禁用NetworkManager的dnsmasq-plugin以阻止NetworkManager启动dnsmasq并启动自己的dnsmasq实例,其缓存大小大于零。

在这里你可以阅读如何禁用NetworkManager的dnsmasq-plugin: https : //askubuntu.com/a/131422/71057

要重新启用缓存(使用具有/etc/NetworkManager/dnsmasq.d目录的NetworkManager版本),实际上就可以将文件放在该目录中,内容为“cache-size = X”(X为150)对于默认的dnsmasq会有)。 其中的文件覆盖命令行上给出的硬编码参数。

在Ubuntu 14.04中,我不得不编辑/etc/default/dnsmasq并设置ENABLED=1

我还将cache-size=1000放在那里以及我找到的所有其他dnsmasq配置文件中。