フォワーダーと条件付きフォワーダーの解決タイムアウト
この記事では、1 つ以上の DNS サーバー IP が DNS サーバーでフォワーダーまたは条件付きフォワーダーとして構成されている場合に存在するフォールバックとタイムアウトの動作について説明します。
元の KB 番号: 2834250
まとめ
DNS クライアントと同様に、複数のフォワーダーまたは条件付きフォワーダーを使用して DNS サーバーを構成すると、DNS インフラストラクチャにフォールト トレランスが追加されます。 フォワーダーまたは条件付きフォワーダーとして複数の DNS サーバーを追加すると、基になるネットワーク リンクまたはサポートネットワーク インフラストラクチャの構成済みサーバーのみの障害が発生した場合でも、引き続き DNS 名を解決できます。
ただし、サーバーにフォールト トレランスを追加することは、一部のサーバーが現在ハングしている複数のクライアントに代わって実行する推移的な操作が発生する可能性があるため、さらに重要です。 その後、リソースは増分的に長い時間消費されます。
3 つ以上のフォワーダー/条件付きフォワーダーを使用する場合は、この大量のサーバーに対して既定の設定が最適化されない可能性があるため、パラメーターを正しく調整してください。
複数の DNS サーバーがフォワーダーとして構成されている場合の DNS サーバーの既定の動作
このしくみを理解するために、主な変数は次のとおりです。
RecursionTimeout - リモート サーバーが再帰クライアント クエリに応答してから検索を終了するまでにドメイン ネーム システム (DNS) が待機する時間。
HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters\RecursionTimeout
のレジストリに保存され、dnscmd /config /RecursionTimeout <value>
を介して構成できます。 これは、PowerShell コマンドレットGet-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 コマンドレットGet-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 番目のフォワーダーに対してクエリを実行します。 |
2 * <forwarding_timeout> +1 | さらに 1 秒 <forwarding_timeout> した後、2 番目のフォワーダーが応答しなかった場合、DNS サーバーは 3 番目のフォワーダーに対してクエリを実行します。 |
... | ... |
N * <forwarding_timeout> +(N-1) | <forwarding_timeout> + 1 秒後、N 番目のフォワーダーが応答しなかった場合、DNS サーバーは (N+1) 番目のフォワーダーを照会します。 |
Note
構成された遅延に加えて、システムのオーバーヘッドにより、さらに 5 秒の遅延が発生する可能性があります。
経過時間が RecursionTimeout 値を超えると、アルゴリズムは停止します。
RecursionTimeoutの有効期限が切れると、DNS サーバーはサーバーエラーでクライアントに返信します。
Note
RecursionTimeout有効期限の直後にサーバーエラーを送信することはありませんが、次のフォワーダーを試す場合にのみ送信されます。
RecursionTimeoutが応答を取得せずに期限切れになる前にサーバーがすべてのフォワーダーに接続する場合、名前解決にルート ヒントを使用しようとします (サーバー レベルで再帰が無効にされていない限り、既定の設定)。
つまり、既定の設定では、Windows DNS サーバーは最大 3 つのフォワーダーに対してクエリを実行できます。 4 番目のフォワーダーを使用するのに十分な時間が到着しません。 実際、既定の設定では、Windows DNS サーバーでは次のことが行われます。
- 0 秒後に最初のフォワーダーにクエリを実行する
- 3.5 秒後に 2 番目のフォワーダーにクエリを実行する
- 3.5 + 4 = 7.5 秒後に 3 番目のフォワーダーにクエリを実行する
8 秒目に、 RecursionTimeout は期限切れになるため、4 番目のフォワーダーが照会される時点には到達しません (これは 3.5 + 4 + 4 = 11.5 秒後に発生します)。
11.5 秒後にサーバーエラー応答が送信されます。
例:
IP アドレス 192.168.0.1 の DNS サーバーは、5 つのフォワーダー (10.0.0.1-10.0.0.5) で構成されています。
クライアントは IP アドレス 10.0.0.31 を持ち、 Microsoft.com
のクエリを実行しています。
ネットワーク キャプチャでは、次のネットワーク モニター出力が表示されます (注 10.0.0.4 と 10.0.0.5 はクエリされません)。
タイム タイム オフセット TimeDelta ソース変換先の詳細
6:33:51.7507293 0.2731738 0.0000000 10.0.0.31 192.168.0.1 DNS:QueryId = 0xF03、QUERY (標準クエリ)、QUERY (標準クエリ)、クラス インターネット上の host Addr 型のmicrosoft.com
のクエリ
6:33:51.7510021 0.2734466 0.0002728 192.168.0.1 10.0.0.1 DNS:QueryId = 0xBD57、 QUERY (標準クエリ)、QUERY (標準クエリ)、クラス インターネット上の Host Addr 型のmicrosoft.com
のクエリ
6:33:55.2997074 3.8221519 3.5487053 192.168.0.1 10.0.0.2 DNS:QueryId = 0xBD57、QUERY (標準クエリ)、QUERY (標準クエリ)、クラス インターネット上の Host Addr 型のmicrosoft.com
のクエリ
6:33:59.2931644 7.8156089 3.9934570 192.168.0.1 10.0.0.3 DNS:QueryId = 0xBD57、 QUERY (標準クエリ)、QUERY (標準クエリ)、クラスインターネット上のホスト アドオンのmicrosoft.com
のクエリ
6:34:03.3112753 11.8337198 4.0181109 192.168.0.1 10.0.0.31 DNS:QueryId = 0xF03、 QUERY (標準クエリ)、応答 - サーバーエラー
複数の DNS サーバーが条件付きフォワーダーとして構成されている場合の DNS サーバーの既定の動作
フォワーダーと同様に、条件付きフォワーダーには 2 つの重要な変数があります。 まだ RecursionTimeout (サーバー レベルで動作) がありますが、このシナリオでは ForwardingTimeout ではなく ForwarderTimeout を使用しています。 特に、 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 番目の条件付きフォワーダーを照会します。 |
2 * <forwarder_timeout> +1 | さらに 1 秒 <forwarder_timeout> した後、2 番目の条件付きフォワーダーが応答しなかった場合、DNS サーバーは 3 番目の条件付きフォワーダーに対してクエリを実行します。 |
... | ... |
N * <forwarder_timeout> +(N-1) | さらに 1 秒 <forwarder_timeout> した後、N 番目の条件付きフォワーダーが応答しなかった場合、DNS サーバーは (N+1) 番目の条件付きフォワーダーに対してクエリを実行します。 |
Note
構成された遅延に加えて、システムのオーバーヘッドにより、さらに 5 秒の遅延が発生する可能性があります。
経過時間が RecursionTimeout 値を超えると、アルゴリズムは停止します。
RecursionTimeoutの有効期限が切れると、DNS サーバーはサーバーエラーでクライアントに返信します。
Note
RecursionTimeoutの有効期限の直後にサーバーエラーを送信することはありませんが、次の条件付きフォワーダーを試す場合にのみ送信されます。
つまり、既定の設定では、Windows DNS サーバーは最大 2 つの条件付きフォワーダーに対してクエリを実行できます。 3 番目の条件付きフォワーダーを使用するのに十分な時間がありません。 実際、既定の設定では、Windows DNS サーバーでは次のことが行われます。
- 0 秒後に最初のフォワーダーにクエリを実行する
- 5.5 秒後に 2 番目のフォワーダーにクエリを実行する
8 秒目に、 RecursionTimeout は期限切れになるため、3 番目の条件付きフォワーダーが照会される時点には到達しません (これは 5.5 + 6 = 11.5 秒後に発生します)。
11.5 秒後にサーバーエラー応答が送信されます。
例:
IP アドレス 192.168.0.1 の DNS サーバーは、ゾーン Microsoft.com
の 5 つの条件付きフォワーダー (10.0.0.1-10.0.0.5) で構成されます。
クライアントは IP アドレス 10.0.0.31 を持ち、 Microsoft.com
のクエリを実行しています。
ネットワーク キャプチャでは、次のネットワーク モニター出力が表示されます (注 10.0.0.3、10.0.0.4、10.0.0.5 はクエリされません)。
タイム タイム オフセット TimeDelta ソース変換先の詳細
6:50:32.5481816 0.4306857 0.0000000 10.0.0.33 192.168.0.1 DNS:QueryId = 0x245A、QUERY (標準クエリ)、QUERY (標準クエリ)、クラス インターネット上の host Addr 型のmicrosoft.com
のクエリ
6:50:32.5484341 0.4309382 0.0002525 192.168.0.1 10.0.0.1 DNS:QueryId = 0x252B、 QUERY (標準クエリ)、QUERY (標準クエリ)、クラス インターネット上の host Addr 型のmicrosoft.com
のクエリ
6:50:38.1695163 6.0520204 5.6210822 192.168.0.1 10.0.0.2 DNS:QueryId = 0x252B、QUERY (標準クエリ)、クラス インターネット上の Host Addr 型のmicrosoft.com
のクエリ
6:50:44.1856567 12.0681608 6.0161404 192.168.0.1 10.0.0.33 DNS:QueryId = 0x245A、 QUERY (標準クエリ)、応答 - サーバーエラー