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

我已经安装了DNSMASQ,但由于53端口忙,所以它没有启动。

我发现ubuntu已经有了dnsmasq包,它正在工作。

现在的问题是……我只是希望能够通过它来解析/ etc / hosts中的主机

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

但这不会发生。

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

为了加速互联网,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 -es/--no-hosts//` EOF sudo chmod 755 /usr/sbin/dnsmasq 

请将错误标记为影响您。

没有修补系统文件的另一种解决方案

 cat /etc/NetworkManager/dnsmasq.d/hosts.conf addn-hosts=/etc/hosts 

即使是现在这个bug仍然影响了我(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’也令我失望。

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

简单的回答

  1. 创建/etc/NetworkManager/dnsmasq.d/hosts.conf
  2. address=/whatever/1.2.3.4放入其中。 查看文档 (查找--address )。 通配符是可能的: address/.whatever./1.2.3.4
  3. 杀死dnsmasq ( bug )。
  4. 重启它: $ service network-manager restart

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

尝试强制dnsmasq重新加载其hosts文件。 (对配置文件的更改需要重新启动)。 这些命令中的任何一个都应该有效。

 service dnsmasq reload kill -HUP $(pidof dnsmasq) 

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