Windows

Windows DNS 地址列表不會回退

  • January 15, 2017

我在執行 Ubuntu 的 Pine64 上設置了自己的 DNS 伺服器 (Bind9)。在我的 Windows 10 電腦上,我已將我的 DNS 的 IP 地址添加DNS server addressesAdvanced TCP/IP Settings. 我的 ISP 提供的“真實”DNS 伺服器也被添加了較低優先級,旨在作為備份(見截圖)。

Windows DNS 設置

只要我自己的 DNS 響應,一切都與此配置完美配合。

但是,如果我拔掉我自己的 DNS 伺服器上的外掛,Windows 將無法解析名稱。執行nslookup導致 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
>

但是瀏覽 Internet 和解析名稱確實有效:

Resolve-DnsName -DnsOnly -Name ubuntu.com

Name                                           Type   TTL   Section    IPAddress
----                                           ----   ---   -------    ---------
ubuntu.com                                     A      600   Answer     91.189.94.40

總結一下:使用正確的 DNS 設置!(:

nslookup 命令並不總是測試客戶端如何解決問題的最有用的工具。雖然 nslookup 命令將連接到為該客戶端配置的 DNS 伺服器之一,但它不會自動進行故障轉移。與內置的 Windows 解析器不同。

如果您使用的是最新版本的 Windows,則應打開 powershell 並使用命令行開關Resolve-DnsName來使用標準 Windows API 解析名稱。

引用自:https://serverfault.com/questions/825981