配置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月,其他答案已过时。
简单的回答
- 创建
/etc/NetworkManager/dnsmasq.d/hosts.conf
。 - 将
address=/whatever/1.2.3.4
放入其中。 查看文档 (查找--address
)。 通配符是可能的:address/.whatever./1.2.3.4
。 - 杀死
dnsmasq
( bug )。 - 重启它:
$ 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
而在备用文件中提供其他主机数据。