配置NetworkManager的dnsmasq以使用/ etc / hosts


22

我已经安装了DNSMASQ,但由于53端口繁忙而无法启动。

我发现ubuntu已经有了dnsmasq软件包,并且可以正常工作。

现在的问题是...我只想通过它来解析/ etc / hosts中的主机

即:nslookup somehostonlan localhost 解析为从/ etc / hosts文件获取的某些IP。

但这没有发生。

为什么?顺便说一句,作为缓存DNS服务器,它工作正常。我只希望它从/ etc / hosts文件中解析主机

Answers:


22

为了加快互联网速度,ubuntu 12.04已向NetworkManager添加了一个插件来启动dnsmasq,这是一个缓存dns条目的本地dns服务器。问题是插件已对--no-hosts字符串进行了硬编码。

因此,一种解决方案是注释掉将插件加载到NetworkManager配置文件中并重新启动NetworkManager的行:

sudo mv /etc/NetworkManager/NetworkManager.conf /etc/NetworkManager/NetworkManager.conf.bak
sudo bash -c 'cat /etc/NetworkManager/NetworkManager.conf.bak | sed -e "s/^\(dns=dnsmasq\)$/#\1/" > /etc/NetworkManager/NetworkManager.conf'
sudo restart network-manager

另一个解决方案是包装dnsmasq来过滤掉不需要的参数:

sudo mv /usr/sbin/dnsmasq /usr/sbin/dnsmasq.bin
sudo bash -c 'cat > /usr/sbin/dnsmasq' << EOF
#!/bin/sh
dnsmasq=/usr/sbin/dnsmasq.bin

exec $dnsmasq `echo $@ | sed -e s/--no-hosts//`
EOF

sudo chmod 755 /usr/sbin/dnsmasq

将该错误标记为影响您。

无需修补系统文件的另一种解决方案

cat /etc/NetworkManager/dnsmasq.d/hosts.conf 

addn-hosts=/etc/hosts

7

即使到现在(Ubuntu 14.04),该错误仍然影响着我。

最终,我找到了一个解决方案,只需将这行'addn-hosts = / etc / hosts'添加到Newworkmanager软件包的dnsmasq配置文件中。

echo 'addn-hosts=/etc/hosts' > /etc/NetworkManager/dnsmasq.d/etc-hosts
service network-manager restart

想法是,我们将/ etc / hosts作为附加主机文件添加。

即使可以找到解决方案,二进制文件/ usr / sbin / NetworkManager中的硬编码选项“ --no-hosts”也让我感到失望。


7

截至2015年8月,其他答案已过时。

简单的答案

  1. 创建/etc/NetworkManager/dnsmasq.d/hosts.conf
  2. address=/whatever/1.2.3.4在其中放置线条。请参阅文档 (查找--address)。可以使用通配符:address/.whatever./1.2.3.4
  3. 杀死dnsmasqbug)。
  4. 重新启动它:$ service network-manager restart

1

dnsmasq应该自动使用该/etc/hosts文件。可以通过-h命令行选项或no-hosts配置选项禁用此功能。我不希望在默认配置中设置任何一个。

尝试强制dnsmasq重新加载其主机文件。(更改配置文件需要重新启动)。这些命令都应该起作用。

service dnsmasq reload

kill -HUP $(pidof dnsmasq)

如果使用no-hosts指定的系统,则应该可以使用该addn-hosts选项覆盖它。通常,这将用于读取/etc/hosts格式的其他文件。这可用于指定您希望DNS提供但在/etc/hosts文件中不需要的其他主机数据。这可以用来允许程序包管理器和相关工具进行管理,/etc/hosts同时在备用文件中提供其他主机数据。


/etc/dnsmasq.conf已注释掉所有选项。重新加载没有帮助
bakytn

我不知道我做了什么 它现在似乎正在工作
bakytn 2012年

3
当您实际上不知道答案时,为什么还要回答呢?您“不希望在默认配置中设置任何一个”这一事实并不适用,因为实际上它是在NetworkManger中设置并硬编码到dnsmasq中的。
贾斯汀·布什

必须重新启动dnsmasq才能加载配置文件中的更改
txwikinger 2014年

@txwikinger dnsmasq接收HUP信号时,许多选项文件会重新读取。这包括/etc/hosts/etc/ethers文件。重新启动时间足够快,客户端很少会收到响应。
BillThor
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.