了解 DNS 解析器之间的差异

了解 DNS 解析器之间的差异

介绍

在尝试调试我们内部网本地的网络问题时,很明显和的curl host nslookup行为dig有所不同。其中dighost返回相关 URL 的 IP 地址,curlnslookup返回:

 curl: (6) Could not resolve host: internal.site.company.com

 nslookup: can't resolve 'internal.site.company.com`

语境

虽然这应该不重要,但本质上,为了给问题提供更多背景信息,这个问题发生在(确切地说,docker-machine在和上使用 docker-machine 进行测试)。它托管的和容器都在其 中具有所需内部 DNS 服务器的正确 IP 地址。所需 URL 的 IP 地址也可以从无法解析名称的计算机访问。如上所述,该地址是一个内部站点,我们的 DNS 服务器也是内部的。可以从安装 的计算机访问和解析该站点。 virtualboxparallelsdocker-machine/etc/resolv.confdocker-machine

问题

这让我想到了以下问题...

1)从本质上讲,dig和与host有何不同?cURLnslookup

2)什么可能阻止浏览器curl解析 URL 以及是否hostdig成功解析名称?

设置

dig -vDiG 9.11.1

host -vhost 9.11.1

curl -Vcurl 7.49.1

Docker 版本:Version 17.06.0-ce-mac19 (18663) Channel: stable

 Boot2Docker version 17.06.0-ce, build HEAD : 0672754

答案1

我希望curl使用解析器库,它将按顺序使用主机规范中列出的名称服务提供商/etc/nsswitch.conf。如果其中不包含 DNS,则不会发生 DNS 解析。 nslookup没有记录使用此文件,但根据您的经验,似乎可以使用。通常,此数据由名称服务缓存守护程序缓存。如果守护程序失败,即使其他配置正确,您也可能会遇到此类问题。

hostdig都是纯 DNS 查找程序。它们都只通过 DNS 解析名称。它们不会使用文件或其他非 DNS 提供商来解析名称。我希望它们直接使用这些信息/etc/resolv.conf

相关内容