Windows DNS 地址列表不會回退
我在執行 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 伺服器。
我的問題是為什麼 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 解析名稱。