dnsmasq 导致无法解析主机发出的 DNS 查询

dnsmasq 导致无法解析主机发出的 DNS 查询

在无头 Ubuntu 14.04 vanilla 机器上,我使用以下配置将 dnsmasq 设置为 DNS 代理/etc/dnsmasq.conf

no-resolv
nameserver=<some working custom dns ip>
port=5555 #to circumvent my ISP's DNS hijacking

每当 dnsmasq 服务启动时,主机就会失去解析任何主机名的能力,但是 dnsmasq 可以很好地解析外部查询。检查 /etc/resolv.conf 仅显示一行

nameserver 127.0.0.1

所以我添加了一些名称服务器/etc/resolvconf/resolv.conf.d/base并重新启动了机器。即使添加的名称服务器出现在/etc/resolv.conf

答案1

我认为你有多个问题。

首先:port=5555- 这意味着该dnsmasq进程将侦听 UDP(也可能是 TCP)端口 5555 上的 DNS 查询。您的所有 DNS 客户端dnsmasq都必须在该端口上进行查询,否则他们将无法得到答案。您的 ISP 的 DNS 劫持对此并不重要。我怀疑您不想配置非标准端口,因为下一个问题......

其次,该文件/etc/resolv.conf是使用 libc 解析器执行 DNS 的进程将读取的内容以查找进程dnsmasq。这是针对“无头 Ubuntu 14.04”机器上的进程。该nameserver 127.0.0.1行在此文件中是适当的。由于您显然已经dnsmaq在端口 5555 上进行侦听,因此您可以在该文件中指定其他进程用于查询的端口号dnsmasq。谷歌搜索后,我看到OpenBSD 的 libresolv 可以指定非标准端口/etc/resolv.conf,但我不知道是否有任何常用的解析器可以读取此内容。我想说,尝试一下。使用:nameserver 127.0.0.1:5555看看是否有区别。使用类似ping www.google.com命令的命令 - 它使用 libc 解析器来获取名称“www.google.com”的 IP 地址。

第三,如果您尝试解决某些 ISP 对 DNS 的劫持,您将必须在世界上某个地方找到一个侦听 53 以外的端口的 DNS 服务器。这种配置似乎不存在。有关规避 DNS 劫持的博客文章将此列为主要障碍。我不知道在这里推荐什么,但最终,您必须告诉dnsmaq在哪里可以找到这样的服务器,并且该文件通常是/etc/dnsmasq.resolv.

答案2

删除除 的函数之外的return 0所有start_resolvconf()内容/etc/init.d/dnsmasq

相关内容