简单答案

简单答案

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

我发现 ubuntu 已经有 dnsmasq 包并且它正在运行。

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

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

但事实并没有发生。

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

答案1

为了加快互联网速度,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

答案2

这个错误现在仍然影响着我(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”也让我失望。

答案3

截至 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漏洞)。
  4. 重新启动它:$ service network-manager restart

答案4

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

尝试强制 dnsmasq 重新加载其主机文件。(更改配置文件需要重新启动)。这两个命令都应该有效。

service dnsmasq reload

kill -HUP $(pidof dnsmasq)

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

相关内容