了解 DNS 解析器之间的区别

Dan*_*Cat 7 domain-name-system linux-networking curl dig docker-machine

介绍

在尝试调试网络问题本地我们的内联网,很明显,curl host nslookupdig不同的表现。凡dighost返回有问题的URL,IP地址curlnslookup回报:

 curl: (6) Could not resolve host: internal.site.company.com
Run Code Online (Sandbox Code Playgroud)

 nslookup: can't resolve 'internal.site.company.com`
Run Code Online (Sandbox Code Playgroud)

语境

虽然这不应该的事情,在多予方面的问题的本质,这个问题上和后面发生的docker-machine(使用泊坞窗机上都进行测试virtualbox,并parallels要准确)。在docker-machine和容器它的主机都在他们所需的内部DNS服务器的正确IP地址/etc/resolv.conf。无法解析名称的机器也可以访问所需 URL 的 IP 地址。如上所述,地址是内部站点,我们的 DNS 服务器也是内部站点。该站点可从docker-machine安装的计算机访问和解析。

问题

这让我想到了这些问题......

1) 在幕后,有什么dighost做的与两者cURL和和不同nslookup

2)什么可能阻止浏览器或curl以两种方式解析 URLhostdig成功解析名称?

设置

dig -vDiG 9.11.1

host -vhost 9.11.1

curl -Vcurl 7.49.1

码头工人版本: Version 17.06.0-ce-mac19 (18663) Channel: stable

 Boot2Docker version 17.06.0-ce, build HEAD : 0672754
Run Code Online (Sandbox Code Playgroud)

Bil*_*hor 11

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

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

  • 你一开始的意思是“curl”吗? (9认同)
  • @HåkanLindqvist 是的,我已相应更新。 (2认同)