![了解 DNS 解析器之间的差异](https://linux22.com/image/708291/%E4%BA%86%E8%A7%A3%20DNS%20%E8%A7%A3%E6%9E%90%E5%99%A8%E4%B9%8B%E9%97%B4%E7%9A%84%E5%B7%AE%E5%BC%82.png)
介绍
在尝试调试我们内部网本地的网络问题时,很明显和的curl
host
nslookup
行为dig
有所不同。其中dig
和host
返回相关 URL 的 IP 地址,curl
并nslookup
返回:
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 服务器也是内部的。可以从安装 的计算机访问和解析该站点。 virtualbox
parallels
docker-machine
/etc/resolv.conf
docker-machine
问题
这让我想到了以下问题...
1)从本质上讲,dig
和与host
有何不同?cURL
nslookup
2)什么可能阻止浏览器curl
解析 URL 以及是否host
能dig
成功解析名称?
设置
dig -v
:DiG 9.11.1
host -v
:host 9.11.1
curl -V
:curl 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
没有记录使用此文件,但根据您的经验,似乎可以使用。通常,此数据由名称服务缓存守护程序缓存。如果守护程序失败,即使其他配置正确,您也可能会遇到此类问题。
host
和dig
都是纯 DNS 查找程序。它们都只通过 DNS 解析名称。它们不会使用文件或其他非 DNS 提供商来解析名称。我希望它们直接使用这些信息/etc/resolv.conf
。