共用方式為


針對 DNS 用戶端名稱解析問題進行疑難解答

本文可協助針對功能變數名稱系統 (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 用戶端解析名稱時會使用下列順序:

  1. 檢查快取。
  2. 檢查 Hosts 檔案。
  3. 將查詢傳送至 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 不以默示或其他方式,提供與這些產品的效能或可靠性有關的擔保。