轉寄站和條件式轉寄站解析逾時
本文說明當一或多個 DNS 伺服器 IP 設定為 DNS 伺服器上的轉寄站或條件式轉寄站時,存在的後援和逾時行為。
原始 KB 編號: 2834250
摘要
與 DNS 用戶端類似,使用多個轉寄站或條件式轉寄站來設定 DNS 伺服器,會將額外的容錯功能新增至您的 DNS 基礎結構。 將多個 DNS 伺服器新增為轉寄站或條件轉寄站,可讓 DNS 名稱在唯一設定的伺服器、基礎網路連結或支援的網路基礎結構失敗時繼續解析。
不過,在伺服器上新增容錯更為重要,因為可能會有一些伺服器代表目前停止的多個客戶端執行的可轉移作業。 接著會耗用資源,以累加較長的時間。
如果您想要使用三個或多個轉寄站/條件式轉寄站,請務必正確調整參數,因為預設設定可能未針對如此大量的伺服器進行優化。
當兩部以上的 DNS 伺服器設定為轉寄站時,DNS 伺服器的預設行為為何
為了瞭解其運作方式,主要變數如下:
RecursionTimeout - 功能變數名稱系統 (DNS) 在終止搜尋之前,等待遠端伺服器回應遞歸客戶端查詢的時間長度。
它會儲存在 的登錄底下
HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters\RecursionTimeout
,並可透過 進行dnscmd /config /RecursionTimeout <value>
設定。 這可透過PowerShell CmdletGet-DnsServerRecursion
進行驗證。Windows Server 2012、Windows Server 2012 R2、Windows Server 2016、Windows Server 2019 和 Windows Server 2022 中的預設值為 8 秒。
RecursionTimeout 是在 DNS 伺服器層級定義,且與查詢的特定區域無關。
ForwardingTimeout - 功能變數名稱系統 (DNS) 等候轉寄站清單中每個伺服器回應查詢的時間長度。
它會儲存在 登錄的 下方
HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters\ForwardingTimeout
,並可透過 進行dnscmd /config /ForwardingTimeout <value>
設定。 這也可以透過PowerShell CmdletGet-DnsServerForwarder
進行驗證。默認值為 Windows Server 2012、Windows Server 2012 R2、Windows Server 2016、Windows Server 2019 和 Windows Server 2022 中的 3 秒。
ForwardingTimeout 是在 DNS 伺服器層級定義,且與查詢的特定區域無關。
當 DNS 伺服器在區域收到記錄的查詢時,該記錄不具權威性,且需要使用轉寄站時,預設行為如下:
時間(開始後的秒數) | 動作 |
---|---|
0 | 用戶端會查詢 DNS 伺服器。 DNS 伺服器會立即將查詢轉送至其第一個轉寄站。 |
<forwarding_timeout> | >forwarding_timeout秒之後<,如果第一個轉寄站未回復,DNS 伺服器會查詢第二個轉寄站。 |
2 * <forwarding_timeout> +1 | 再forwarding_timeout> +1 秒之後<,如果第二個轉寄站沒有回復,DNS 伺服器會查詢第三個轉寄站。 |
... | ... |
N * <forwarding_timeout> +(N-1) | 在再forwarding_timeout> + 1 秒之後<,如果第 N 個轉寄站未回復,DNS 伺服器會查詢第 N+1 個轉寄站。 |
注意
除了設定的延遲之外,由於系統額外負荷,可能會有額外的半秒延遲。
演算法會在經過的時間超過 RecursionTimeout 值時停止
如果 RecursionTimeout 過期,DNS 伺服器會回復給用戶端,並出現伺服器失敗。
注意
我們不會在 RecursionTimeout 到期之後立即傳送伺服器失敗,但前提是是時候嘗試下一個轉寄站了。
如果伺服器設法在 RecursionTimeout 到期之前連絡所有轉寄站,但未取得答案,它會嘗試使用名稱解析的根提示(除非伺服器層級停用遞歸,否則預設設定除外)。
這表示使用預設設定,Windows DNS 伺服器最多可以查詢三個轉寄站。 到達時沒有足夠的時間使用第四個轉寄站。 事實上,使用預設設定,Windows DNS 伺服器會:
- 在 0 秒後查詢第一個轉寄站
- 在 3.5 秒之後查詢第二個轉寄站
- 在 3.5 + 4 = 7.5 秒之後查詢第三個轉寄站
在第八秒, RecursionTimeout 到期,因此我們不會到達查詢第四個轉寄站的點(這發生在 3.5 + 4 + 4 = 11.5 秒之後)。
我們會在 11.5 秒之後傳送伺服器失敗回應。
例如:
IP 位址為 192.168.0.1 的 DNS 伺服器設定為五個轉寄站(10.0.0.1-10.0.0.0.5)。
用戶端具有IP位址10.0.0.0.31,並正在 Microsoft.com
查詢 。
在網路擷取上,我們會看到下列網路監視器輸出(注意 10.0.0.4 和 10.0.0.5 從未查詢):
時間時差時間Delta 來源目的地詳細數據
6:33:51.7507293 0.2731738 0.0000000 10.0.31 192.168.0.1 DNS:QueryId = 0xF03,QUERY (標準查詢),在類別因特網上查詢microsoft.com
類型 Host Addr 的查詢
6:33:51.7510021 0.2734466 0.0002728 192.168.0.1 10.0.0.1 DNS:QueryId = 0xBD57, QUERY (標準查詢), 類別因特網上主機附加元件類型的查詢microsoft.com
6:33:55.2997074 3.8221519 3.5487053 192.168.0.1 10.0.0.2 DNS:QueryId = 0xBD57,QUERY (標準查詢), 類別因特網上主機附加元件類型的查詢microsoft.com
6:33:59.2931644 7.8156089 3.9934570 192.168.0.1 10.0.0.3 DNS:QueryId = 0xBD57,QUERY (標準查詢),在類別因特網上查詢microsoft.com
類型 Host Addr 的查詢
6:34:03.3112753 11.8337198 4.0181109 192.168.0.1 10.0.0.31 DNS:QueryId = 0xF03,QUERY (標準查詢),回應 - 伺服器失敗
當兩部以上的 DNS 伺服器設定為條件式轉寄站時,DNS 伺服器的預設行為為何
與轉寄站類似,條件式轉寄站有兩個主要變數。 我們仍然有 RecursionTimeout (這是在伺服器層級運作),但在此案例中,我們使用 ForwarderTimeout 而不是 ForwardingTimeout。 具體來說, ForwarderTimeout 是以區域為基礎運作,且具有不同的預設值:
RecursionTimeout - 功能變數名稱系統 (DNS) 在終止搜尋之前,等待遠端伺服器回應遞歸客戶端查詢的時間長度。
它儲存在 登錄的 下
HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters\RecursionTimeout
。可透過來設定
dnscmd /config /RecursionTimeout <value>
。Windows Server 2012、Windows Server 2012 R2、Windows Server 2016、Windows Server 2019 和 Windows Server 2022 中的預設值為 8 秒。
RecursionTimeout 是在 DNS 伺服器層級定義,且與查詢的特定區域無關。
ForwarderTimeout - 功能變數名稱系統 (DNS) 在條件式轉寄站清單中等候每部伺服器回應查詢的時間長度。
由於已針對特定區域設定條件式轉寄站, 因此 ForwarderTimeout 也是區域相依的。
它儲存在 登錄的 下
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DNS Server\Zones\ <zone_name>\ForwarderTimeout
。Windows Server 2012、Windows Server 2012 R2、Windows Server 2016、Windows Server 2019 和 Windows Server 2022 中的預設值為 5 秒。
這也是您可以在條件式轉寄站 GUI 中看到的設定。
當 DNS 伺服器在區域收到記錄的查詢,且該記錄不是授權的,且設定為使用條件式轉寄站時,預設行為如下:
時間(開始後的秒數) | 動作 |
---|---|
0 | 用戶端會查詢 DNS 伺服器。 DNS 伺服器會立即將查詢轉送至其第一個條件式轉寄站。 |
<forwarder_timeout> | >forwarder_timeout秒之後<,如果第一個條件式轉寄站未回復,DNS 伺服器會查詢第二個條件式轉寄站。 |
2 * <forwarder_timeout> +1 | 再forwarder_timeout> +1 秒之後<,如果第二個條件式轉寄站未回復,DNS 伺服器會查詢第三個條件式轉寄站。 |
... | ... |
N * <forwarder_timeout> +(N-1) | 在再forwarder_timeout> +1 秒之後<,如果第 N 個條件式轉寄站未回復,DNS 伺服器會查詢第 N+1 個條件式轉寄站。 |
注意
除了設定的延遲之外,由於系統額外負荷,可能會有額外的半秒延遲。
演算法會在經過時間超過 RecursionTimeout 值時停止
如果 RecursionTimeout 過期,DNS 伺服器會回復給用戶端,並出現伺服器失敗。
注意
我們不會在 RecursionTimeout 到期之後立即傳送伺服器失敗,但前提是現在是嘗試下一個條件式轉寄站的時候。
這表示使用預設設定,Windows DNS 伺服器最多可以查詢兩個條件式轉寄站。 到達時沒有足夠的時間使用第三個條件式轉寄站。 事實上,使用預設設定,Windows DNS 伺服器會:
- 在 0 秒後查詢第一個轉寄站
- 在 5.5 秒之後查詢第二個轉寄站
在第八秒, RecursionTimeout 到期,因此我們不會到達查詢第三個條件式轉寄站的點(這發生在 5.5 + 6 = 11.5 秒之後)。
我們會在 11.5 秒之後傳送伺服器失敗回應。
例如:
具有IP位址192.168.0.1的 DNS 伺服器會針對區域 Microsoft.com
設定五個條件式轉寄站(10.0.0.0.1-10.0.0.0.5)。
用戶端具有IP位址10.0.0.0.31,並正在 Microsoft.com
查詢 。
在網路擷取上,我們會看到下列網路監視器輸出(附注 10.0.0.3、10.0.0.4 和 10.0.0.5 從未查詢):
時間時差時間Delta 來源目的地詳細數據
6:50:32.5481816 0.4306857 0.0000000 10.0.33 192.168.0.1 DNS:QueryId = 0x245A,QUERY (標準查詢),在類別因特網上查詢類型主機附加元件查詢microsoft.com
6:50:32.5484341 0.4309382 0.0002525 192.168.0.1 10.0.0.1 DNS:QueryId = 0x252B,QUERY (標準查詢),在類別因特網上查詢microsoft.com
類型 Host Addr 的查詢
6:50:38.1695163 6.0520204 5.6210822 192.168.0.1 10.0.0.2 DNS:QueryId = 0x252B,QUERY (標準查詢),在類別因特網上查詢microsoft.com
類型 Host Addr 的查詢
6:50:44.1856567 12.0681608 6.0161404 192.168.0.1 10.0.0.33 DNS:QueryId = 0x245A,QUERY (標準查詢),回應 - 伺服器失敗