将 dnsmasq 与 NetworkManager 一起使用

xpt*_*xpt 19 networking dns dhcp dnsmasq ubuntu

众所周知,NetworkManager 不能很好地使用dnsmasq(参考:此处)。我已经浏览了这里冗长的讨论,但仍然不确定处理这种情况的推荐方法是什么。

所有我想要的是做的是使用dnsmasq提供DNS和DHCP以我的本地网络。在这种情况下,推荐的方法是什么?

即使对于 Ubuntu 14.04,问题似乎仍然存在,甚至声称已修复该错误

作为变通方法,人们禁用 NM 奴役,dnsmasq-base原因如下:

NM-enslaveddnsmasq使用提供极其有限功能的硬编码选项(在 C 中)。

  • 它不监听 ethX ( --listen-address=127.0.0.1)。因此,我们不能将我们的服务器用作本地网络 PC 的 DNS 服务器,即它对 LAN 完全无用。
  • 它不缓存请求 ( --cache-size=0)。无缓存 ==> 无 DNS 查询加速。这对于 LAN 来说非常重要,因为有许多并发用户。
  • 最后,我们还需要 dnsmasq 的 DHCP 和 TFTP 功能,所以即使 NM+dnsmasq 包含一个真正的 DNS 服务器,我们也必须运行另一个 dnsmasq

但我不确定它们是否仍然有效和/或修复程序如何解决问题。此外,他们中没有一个人非常清楚他们做了什么以及他们如何解决他们的问题。即,冗长的讨论中缺少解决方案部分。请问有人可以填空吗?IE,

由于dnsmasq上述原因,Ubuntu 提供的开箱即用在服务器端不起作用。而且,在客户端,“安装在那些 Ubuntu 笔记本电脑上的 dnsmasq 无法从我的 DNS 服务器进行 LAN DNS 查询”,因为“(Ubuntu 笔记本电脑的)NetworkManager 导致它们具有奇怪的 127.0.1.1 名称服务器设置”(参考:LAN 或本地家庭网络的 DNS 解决方案

如何让 dnsmasq 与 NetworkManager 顺利工作,以便在服务器端和客户端为我的本地网络提供 DNS 和 DHCP(和 TFTP)?

医生

对于那些寻求答案的人。在下面的所有答案中,我发现最简单的解决方案是@brad's,对于服务器端(对于客户端仍然没有好的答案):

该问题的唯一解决方案是禁用 NM 驱动器 dnsmasq...,并安装“标准”dnsmasq,然后通过其标准/etc/dnsmasq.conf配置文件进行配置。

Tob*_*obu 7

可以通过将设置放入/etc/NetworkManager/dnsmasq.d/*.conf. 配置文件设置优先于命令行标志。它们在 NetworkManager 启动 dnsmasq 时应用。运行sudo service network-manager restart重新申请。(如果有任何疑问:布拉德的回答错过了ps ax | grep dns显示--conf-dir争论的事实)

例如:

echo cache-size=1000 |sudo tee -a /etc/NetworkManager/dnsmasq.d/cache.conf
Run Code Online (Sandbox Code Playgroud)

我记得由于担心缓存中毒,NetworkManager 默认禁用 dnsmasq 缓存。对于所有用户都受信任的机器,这可能不是问题。

NetworkManager 不与 集成resolvconf127.0.1.1如果安装了 resolvconf 包,NM 的服务器将不会在本地使用。resolvconf 是 ubuntu-minimal 和标准 Debian 安装的一部分;NetworkManager 以更集成、更少基于脚本的方式重新实现该功能。

NetworkManager 确实确保不干扰全局 dnsmasq 实例(绑定到辅助环回 IP 并bind-interfaces通过设置/etc/dnsmasq.d/network-manager)。如果您安装了一个全局 dnsmasq 实例并保留了 NM 的实例,请仔细检查/etc/resolv.conf以查看主机默认使用哪一个。

虽然您可以如上所示自定义 NetworkManager 的 dnsmasq 实例,但如果您想要一个绑定到公共接口的 DNS 服务器,您应该安装该dnsmasq包(NetworkManager 只使用dnsmasq-base,它不配置全局实例)并将您的配置放在/etc/dnsmasq.d/*.conf. NetworkManager 的从属实例仅用于绑定到环回接口,超出该范围配置它可能会破坏它。


总之,对于只想要本地 DNS 缓存的人:

sudo apt-get remove dnsmasq resolvconf dhcpcd5 rdnssd
echo cache-size=1000 |sudo tee -a /etc/NetworkManager/dnsmasq.d/cache.conf
Run Code Online (Sandbox Code Playgroud)

对于一个简单的局域网,NetworkManager 的连接共享应该还是足够的。但是对于自定义配置的 LAN,使用 TFTP 等:

sudo apt-get install resolvconf dnsmasq
echo 192.168.0.50,192.168.0.150,12h |sudo tee -a /etc/dnsmasq.d/lan.conf
echo enable-tftp |sudo tee -a /etc/dnsmasq.d/lan.conf
sudo service dnsmasq restart
Run Code Online (Sandbox Code Playgroud)


bra*_*rad 5

我也有你的问题。

原则上,在wiki.archlinux之后,似乎启用缓存应该足以创建一个/etc/NetworkManager/dnsmasq.d/cache包含简单的文件

$ cat /etc/NetworkManager/dnsmasq.d/cache 
cache-size=1000
Run Code Online (Sandbox Code Playgroud)

我试过了,但是,在 NM 重新启动后,我仍然没有缓存:

# ps ax | grep dns
11724 ?        S      0:00 /usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/run/sendsigs.omit.d/network-manager.dnsmasq.pid --listen-address=127.0.1.1 --conf-file=/var/run/NetworkManager/dnsmasq.conf --cache-size=0 --proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq --conf-dir=/etc/NetworkManager/dnsmasq.d
Run Code Online (Sandbox Code Playgroud)

请注意,引用的 conf 文件始终为空:我无法使用此过程配置任何选项。

总而言之,似乎14.04中NM-enslaved dnsmask(由dnsmasq-base包提供)完全锁定,因此无法启用缓存,也没有其他任何东西(dhcp,tftp)。

如果这是正确的,我认为,正如您所说,问题的唯一解决方案是通过注释掉该行来禁用 NM 驱动器 dnsmasq

dns=dnsmasq
Run Code Online (Sandbox Code Playgroud)

在文件中/etc/NetworkManager/NetworkManager.conf安装“标准”dnsmasq,然后通过其标准/etc/dnsmasq.conf配置文件进行配置。

  • 实际上,这确实启用了缓存,因为它使用 `--conf-dir=/etc/NetworkManager/dnsmasq.d` 运行,因此使用您创建的文件中指定的 `cache-size`。您可以使用`dig`查看差异 (3认同)