我在运行 Ubuntu 的 Pine64 上设置了自己的 DNS 服务器 (Bind9)。在我的 Windows 10 电脑上,我将 DNS 的 IP 地址添加到了 的顶部DNS server addresses
。Advanced TCP/IP Settings
我的 ISP 提供的“真实”DNS 服务器也以较低的优先级添加,旨在作为后备(见屏幕截图)。
只要我自己的 DNS 响应,一切都可以按照此配置完美运行。
但是,如果我关闭自己的 DNS 服务器,Windows 将无法解析名称。这会导致nslookup
DNS 请求超时。
根据微软的文档,如果第一个 DNS 不起作用,它应该尝试列表中的下一个:
在大多数情况下,客户端计算机会联系并使用其首选 DNS 服务器,即其本地配置列表中的第一个 DNS 服务器。当首选服务器不可用时,将联系并使用列出的备用 DNS 服务器。
我的问题是为什么当第一个 DNS 失败时,Windows 不使用第二个 DNS?
在这种情况下,我期望第二个 DNS(83.255.229.23)能够成功响应,但它甚至没有发出请求。
更新/解决:
感谢 Zoredache 的回答,我发现我的 DNS 列表(在 Windows 中)不正确。屏幕截图中的 DNS 服务器名为“ns1.comhem.se”,属于我的 ISP。但是,显然它们不能直接使用:
Resolve-DnsName -DnsOnly -Name ubuntu.com -Server 83.255.229.23
Resolve-DnsName : ubuntu.com : DNS operation refused
At line:1 char:1
+ Resolve-DnsName -DnsOnly -Name ubuntu.com -Server 83.255.229.23
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ResourceUnavailable: (ubuntu.com:String) [Resolve-DnsName], Win32Exception
+ FullyQualifiedErrorId : RCODE_REFUSED,Microsoft.DnsClient.Commands.ResolveDnsName
我查看了我的路由器从 ISP 获得的 DNS,结果发现它们的名称是“anyresolver1.comhem.se”(IP 83.255.255.1)。当我将它们放入列表中时,一切都按预期运行!
好吧,几乎所有功能都如此。正如下面的评论中所述,nslookup
仍然不起作用:
nslookup
DNS request timed out.
timeout was 2 seconds.
Default Server: UnKnown
Address: 192.168.0.18
> set d2
> ubuntu.com
Server: UnKnown
Address: 192.168.0.18
------------
SendRequest(), len 33
HEADER:
opcode = QUERY, id = 2, rcode = NOERROR
header flags: query, want recursion
questions = 1, answers = 0, authority records = 0, additional = 0
QUESTIONS:
ubuntu.com.home, type = A, class = IN
------------
DNS request timed out.
timeout was 2 seconds.
timeout (2 secs)
SendRequest failed
------------
SendRequest(), len 33
HEADER:
opcode = QUERY, id = 3, rcode = NOERROR
header flags: query, want recursion
questions = 1, answers = 0, authority records = 0, additional = 0
QUESTIONS:
ubuntu.com.home, type = AAAA, class = IN
------------
DNS request timed out.
timeout was 2 seconds.
timeout (2 secs)
SendRequest failed
------------
SendRequest(), len 28
HEADER:
opcode = QUERY, id = 4, rcode = NOERROR
header flags: query, want recursion
questions = 1, answers = 0, authority records = 0, additional = 0
QUESTIONS:
ubuntu.com, type = A, class = IN
------------
DNS request timed out.
timeout was 2 seconds.
timeout (2 secs)
SendRequest failed
------------
SendRequest(), len 28
HEADER:
opcode = QUERY, id = 5, rcode = NOERROR
header flags: query, want recursion
questions = 1, answers = 0, authority records = 0, additional = 0
QUESTIONS:
ubuntu.com, type = AAAA, class = IN
------------
DNS request timed out.
timeout was 2 seconds.
timeout (2 secs)
SendRequest failed
*** Request to UnKnown timed-out
>
但浏览互联网和解析名称却有效:
Resolve-DnsName -DnsOnly -Name ubuntu.com
Name Type TTL Section IPAddress
---- ---- --- ------- ---------
ubuntu.com A 600 Answer 91.189.94.40
把它们加起来:使用正确的 DNS 设置!(:
答案1
nslookup 命令并非总是测试客户端如何解析事物的最有用工具。虽然 nslookup 命令将连接到为该客户端配置的 DNS 服务器之一,但它不会自动进行故障转移。与内置的 Windows 解析器不同。
如果您使用的是较新版本的 Windows,则应该打开 powershell 并使用命令行Resolve-DnsName
来使用标准 Windows API 来解析名称。