在无头 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
。