本文可協助針對功能變數名稱系統 (DNS) 用戶端名稱解析問題進行疑難解答。
下列三個主要原因可能會發生域名系統 (DNS) 解決問題:
- DNS 用戶端問題或設定。
- DNS 伺服器問題或設定。
- DNS 用戶端與 DNS 伺服器之間的中繼裝置或組態,或 DNS 伺服器與外部解析程式之間(例如根提示、轉寄站和條件轉寄站),這可能需要進一步調查。
注意
本文著重於 DNS 用戶端問題或設定所造成的 DNS 解析問題。 如需 DNS 伺服器問題的相關信息,請參閱 針對 DNS 伺服器進行疑難解答。
DNS 解析問題可能發生在下列案例中:
案例 1:防火牆規則會封鎖 UDP 埠 53 上的輸出連線
假設有輸出防火牆規則會封鎖用戶數據報通訊協定 (UDP) 埠 53 上的輸出連線。
在此情況下,當您執行 Resolve-DnsName contoso.com
PowerShell Cmdlet 並執行 Wireshark 時,您會收到下列錯誤:
resolve-dnsname : contoso.com : This operation returned because the timeout period expired
At line:1 char:1
+ resolve-dnsname contoso.com
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationTimeout: (contoso.com:String) [Resolve-DnsName], Win32Exception
+ FullyQualifiedErrorId : ERROR_TIMEOUT,Microsoft.DnsClient.Commands.ResolveDnsName
當您檢查Wireshark追蹤時,域控制器沒有輸出 DNS 流量。
在此情況下,請檢閱 Windows 防火牆規則,並檢查任何第三方安全性產品是否有 UDP 或傳輸控制通訊協定 (TCP) 埠 53 上的封包捨棄。
如果您注意到 DNS 解析要求沒有回應,使用埠鏡像從交換器收集 Wireshark 追蹤會很有説明,以確認 DNS UDP 封包已離開客戶端電腦。 要求如下所示:
139 3.149039 10.0.1.10 10.0.1.2 DNS 71 Standard query 0xcdc6 A contoso.com
140 3.149192 10.0.1.10 10.0.1.2 DNS 71 Standard query 0x8168 AAAA contoso.com
這些是主機 A 和主機 AAAA 沒有回應的標準查詢要求。 檢查追蹤可以隔離問題。 如果您在交換器上看到 UDP 封包,表示封包已經離開用戶端電腦,而且問題超出客戶端電腦。
案例 2:主機檔案中有功能變數名稱的專案
假設位於 C:\Windows\System32\drivers\etc 的 Hosts 檔案具有您想要解析的域名專案。 例如:
192.168.1.10
contoso.com
在此情況下,當您使用Wireshark執行解析功能變數名稱 contoso.com
時,您會收到下列輸出:
PS C:\Windows\System32\drivers\etc> Resolve-DnsName contoso.com
Name Type TTL Section IPAddress
---- ---- --- ------- ---------
contoso.com A 60440 Answer 192.168.1.10
此外,在Wireshark中無法偵測到任何流量。
這是因為 DNS 用戶端解析名稱時會使用下列順序:
- 檢查快取。
- 檢查 Hosts 檔案。
- 將查詢傳送至 DNS 伺服器。
由於主機檔案中有一個專案,因此 DNS 用戶端服務不會查詢 DNS 伺服器。
案例 3:用戶端指向不正確的或無法連線的 DNS 伺服器
假設 DNS 用戶端的網路適配器 (NIC) 上的 DNS 伺服器已設定為無法連線 DNS 伺服器的 IP。 用戶端 IP 組態看起來像下列範例:
IPv4 Address. . . . . . . . . . . : 10.0.1.10<Preferred>
Default Gateway . . . . . . . . . : 10.0.1.1
DNS Servers . . . . . . . . . . . : 192.168.0.1
由於 DNS 伺服器無法連線,因此用戶端不會收到回應,導致查詢逾時。在Wireshark中可以觀察到這次逾時。 沒有回應的 DNS 標準查詢:
439 14.482923 10.0.1.10 192.168.0.1 DNS 71 Standard query 0xa384 A contoso.com
440 14.482923 10.0.1.10 192.168.0.1 DNS 71 Standard query 0x4fe0 AAAA contoso.com
在此情況下,當您執行 Resolve-DnsName contoso.com
PowerShell Cmdlet 時,會收到下列輸出:
PS C:\Windows\System32\drivers\etc> Resolve-DnsName contoso.com
Resolve-DnsName : contoso.com : This operation returned because the timeout period expired
At line:1 char:1
+ Resolve-DnsName contoso.com
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationTimeout: (contoso.com:String) [Resolve-DnsName], Win32Exception
+ FullyQualifiedErrorId : ERROR_TIMEOUT,Microsoft.DnsClient.Commands.ResolveDnsName
案例 4:NIC 上已設定數部 DNS 伺服器,其中有些無法連線
假設用戶端 DNS 設定是以一些無法連線的 DNS 伺服器設定,如下所示:
DNS Servers . . . . . . . . . . . : 192.168.0.1
172.16.1.1
192.168.1.20
10.0.1.2
在此情況下,當您使用 Resolve-DnsName contoso.com
PowerShell Cmdlet執行 DNS 解析時,除了無法連線以外的 10.0.1.2
所有 DNS 伺服器位址。
根據設計,DNS 用戶端會開始將此查詢傳送至以特定順序設定的 DNS 伺服器,並等候特定寬限期內的回應。
您可以在Wireshark中使用篩選 dns.qry.name == contoso.com
來查看此程式。
Wireshark 輸出顯示查詢需要近四秒的時間才能完成。 從網路的觀點來看,此持續時間可能很長,而且可能會導致某些應用程式逾時。
30 03:56:58.634623 10.0.1.10 192.168.0.1 DNS 71 Standard query 0x9f32 A contoso.com
33 03:56:59.643171 10.0.1.10 172.16.1.1 DNS 71 Standard query 0x9f32 A contoso.com
38 03:57:02.646443 10.0.1.10 192.168.0.1 DNS 71 Standard query 0x9f32 A contoso.com
42 03:57:02.646556 10.0.1.10 172.16.1.1 DNS 71 Standard query 0x9f32 A contoso.com
43 03:57:02.646573 10.0.1.10 192.168.1.20 DNS 71 Standard query 0x9f32 A contoso.com
47 03:57:02.646684 10.0.1.10 10.0.1.2 DNS 71 Standard query 0x9f32 A contoso.com
注意
在此案例中,使用 nslookup
不適用,且一律會失敗。 這是因為 nslookup
使用 nslookup.exe 只連絡設定的主要 DNS 伺服器,在此情況下為 192.168.0.1
。
案例 5:長 DNS 後綴搜尋清單
假設 DNS 用戶端上的 DNS 後綴搜尋清單已設定如下:
注意
contoso.com
是正確的 DNS 後綴。
DNS Suffix Search List. . . . . . : microsoft.com
ms.com
azure.com
ms.local
contoso.local
contoso.com
在此情況下,當您使用 Resolve-DnsName internal
PowerShell Cmdlet執行名稱解析時,DNS 用戶端會依序附加 DNS 後綴,如果清單上所需的查詢較低,可能會導致延遲。 藉由在Wireshark中使用篩選 dns.qry.name contains internal
,查詢會顯示如下:
116 04:33:38.164251 10.0.1.10 10.0.1.2 DNS 82 Standard query 0xc557 A internal.microsoft.com
120 04:33:38.177186 10.0.1.10 10.0.1.2 DNS 75 Standard query 0x0a4b A internal.ms.com
124 04:33:38.453625 10.0.1.10 10.0.1.2 DNS 78 Standard query 0x4245 A internal.azure.com
128 04:33:38.466154 10.0.1.10 10.0.1.2 DNS 77 Standard query 0xfaca A internal.ms.local
131 04:33:38.471033 10.0.1.10 10.0.1.2 DNS 82 Standard query 0xa9d6 A internal.contoso.local
136 04:33:38.476248 10.0.1.10 10.0.1.2 DNS 80 Standard query 0x611f A internal.contoso.com
注意
如果您需要測試特定查詢,您可以在結尾新增尾端句點 (..)。 例如,internal.contoso.com.
測量 DNS 解析查詢所花費的時間長度
若要測量 DNS 解析查詢完成所花費的時間,請執行下列 PowerShell Cmdlet:
注意
在一秒以下的結果會被視為可接受的。
(Measure-Command {Resolve-DnsName -Name contoso.com -Server <IP Address> -DnsOnly}).TotalMilliseconds
協力廠商資訊免責聲明
本文提及的協力廠商產品是由與 Microsoft 無關的獨立廠商所製造。 Microsoft 不以默示或其他方式,提供與這些產品的效能或可靠性有關的擔保。