Answers:
为了加快互联网速度,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
即使到现在(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”也让我感到失望。
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
同时在备用文件中提供其他主机数据。
dnsmasq
接收HUP
信号时,许多选项文件会重新读取。这包括/etc/hosts
和/etc/ethers
文件。重新启动时间足够快,客户端很少会收到响应。