我当前安装的 Debian 有一些严重错误。大多数程序(如 firefox、nslookup、dig 等)都会忽略/etc/hosts
文件中的条目,实际上我使用此文件来拦截广告。
一个例子
/etc/hosts
文件中的一行
127.0.0.1 www.winaproduct.com
当我dig +short www.winaproduct.com
这样做时,它返回服务器的相应 IP 地址,而不是127.0.0.1
.
在 firefox 上打开www.winaproduct.com
,它显示相应的网站,但这不是预期的。
ping
但、busybox nslookup
、等没有问题busybox ping
。resolveip
那么,问题出在哪里呢?如何解决这个问题?我认为问题出在 DNS 解析库上。
临时修复、设置dnsmasq
和更改nameserver
为.127.0.0.1
/etc/resolv.conf
更新
安装后问题神奇地解决了libnss3
,作为依赖项google-chrome
默认 /etc/nsswitch.conf 看起来像hosts: files dns
如何告诉nslookup
等dig
首先询问/etc/hosts 文件而不是直接询问DNS?
但为什么busybox nslookup
, wget
,resolveip
等 的工作方式与nslookup
,dig
等 不同?
答案1
nslookup
、dig
、 和host
是用于查询 DNS 名称服务器的工具。
如果您的配置不是由名称服务器提供的(如 参考资料中给出的信息/etc/hosts
),这些工具将不会显示它们,因为它们直接询问名称服务器。
如果您想检查“通常”分辨率是否有效(即中指定的方式/etc/nsswitch.conf
),您可以使用getent
:
getent hosts www.winaproduct.com
答案2
配置未绑定软件包(目前在 Linux 上默认安装)或在 Windows 上安装。然后,您的解析器将寻找这个小型轻量级服务来处理所有 DNS 查询。未绑定将读取您的/etc/hosts
条目并将其导入解析器 DNS 缓存中。
对于其他一切,它会将您系统的 DNS 查询代理到您计算机的上游 DNS 服务器。
现在,您的所有应用程序以及 DNS 工具(例如dig
、host
和 )nslookup
都可以接收来自本地/etc/hosts
文件的答案。
作为 Linux 上的替代方案,您可以使用DNSmasq不过,如果您愿意的话,当我上次查看时,它还没有安装在 Windows 上。