当前位置: 首页>>技术教程>>正文


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

问题描述

我已经安装了 DNSMASQ,但它没有启动,因为 53 端口正忙。

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

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

即:nslookup somehostonlan localhost \n 解析为从 /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 -e s/--no-hosts//`
EOF

sudo chmod 755 /usr/sbin/dnsmasq

请将 the bug 标记为对您有影响。

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

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 中的 hard-coded 选项 ‘–no-hosts’ 也让我失望。

第三种思路

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

简单的回答

  1. 创建 /etc/NetworkManager/dnsmasq.d/hosts.conf

  2. address=/whatever/1.2.3.4 之类的行放入其中。\n请参阅 the docs \n(查找 --address )。\n可以使用通配符: address/.whatever./1.2.3.4

  3. 杀死 dnsmasq ( bug )。

  4. 重新启动它: $ service network-manager restart

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/13443.html,未经允许,请勿转载。