在试图debugging局域网上的networking问题时,很明显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机器上(在virtualbox和parallels virtualbox使用docker-machine进行testing)。 它托pipe的docker-machine和容器都在他们的/etc/resolv.conf中拥有所需内部DNS服务器的正确IP地址。 所需URL的IP地址也可以从无法parsing名称的机器访问。 如上所述,地址是一个内部站点,我们的DNS服务器也是内部的。 该站点是可到达的并且可以从docker-machine安装的计算机上parsing。
这给我带来的问题是…
1)在引擎盖下, dig和host与cURL和nslookup什么不同?
2)什么可能是防止浏览器或curlparsingURL的方式host和dig都成功parsing名称?
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
我希望curl给我们parsing器库,它将依次使用/etc/nsswitch.conf hosts规范中列出的名称服务提供者。 如果这不包括DNS,DNSparsing将不会发生。 nslookup没有logging使用这个文件,但从你的经验看来,它可能。 这些数据通常由名称服务caching守护进程caching。 如果守护进程失败,即使其他configuration正确,您也可能会遇到这种问题。
host和dig是纯粹的DNS查找程序。 他们都只通过DNSparsing名称。 他们不会使用文件或其他非DNS提供者来parsing名称。 我希望他们直接使用/etc/resolv.conf的信息。