Dela via


Tidsgränser för lösning av vidarebefordrare och villkorsstyrda vidarebefordrare

Den här artikeln beskriver det återställnings- och timeoutbeteende som finns när en eller flera IP-adresser för DNS-servrar konfigureras som vidarebefordrare eller villkorliga vidarebefordrare på en DNS-server.

Ursprungligt KB-nummer: 2834250

Sammanfattning

På samma sätt som DNS-klienter ger konfiguration av DNS-servrar med mer än en vidarebefordrare eller villkorsstyrd vidarebefordrare ytterligare feltolerans i DNS-infrastrukturen. Genom att lägga till flera DNS-servrar som vidarebefordrare eller villkorsstyrda vidarebefordrare kan DNS-namn fortsätta att matchas i händelse av fel på den enda konfigurerade servern, den underliggande nätverkslänken eller den stödjande nätverksinfrastrukturen.

Att lägga till feltolerans på servrar är dock ännu mer kritiskt eftersom det kan finnas en transitiv åtgärd som vissa servrar utför för en mängd klienter som nu hänger sig. Resurser förbrukas sedan inkrementellt längre tider.

Se till att justera parametrarna korrekt om du vill använda tre eller flera vidarebefordrare/villkorliga vidarebefordrare eftersom standardinställningarna kanske inte är optimerade för den här stora mängden servrar.

Vad är standardbeteendet för en DNS-server när fler än två DNS-servrar konfigureras som vidarebefordrare

För att förstå hur detta fungerar är nyckelvariablerna:

  • RecursionTimeout – hur länge DNS (Domain Name System) väntar på att fjärrservrar ska svara på en rekursiv klientfråga innan sökningen avslutas.

    Det sparas i registret under HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters\RecursionTimeoutoch kan konfigureras via dnscmd /config /RecursionTimeout <value>. Detta kan verifieras via PowerShell-cmdleten Get-DnsServerRecursion.

    Standardvärdet är 8 sekunder i Windows Server 2012, Windows Server 2012 R2, Windows Server 2016, Windows Server 2019 och Windows Server 2022.

    RecursionTimeout definieras på DNS-servernivå och är oberoende av den specifika zon som efterfrågas.

  • ForwardingTimeout – hur länge DNS(Domain Name System) väntar på att varje server i listan i Vidarebefordrare ska svara på en fråga.

    Det sparas i registret under HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters\ForwardingTimeout och kan konfigureras via dnscmd /config /ForwardingTimeout <value>. Detta kan också verifieras via PowerShell-cmdleten Get-DnsServerForwarder.

    Standardvärdet är 3 sekunder i Windows Server 2012, Windows Server 2012 R2, Windows Server 2016, Windows Server 2019 och Windows Server 2022.

    ForwardingTimeout definieras på DNS-servernivå och är oberoende av den specifika zon som efterfrågas.

När DNS-servern tar emot en fråga för en post i en zon som den inte är auktoritativ för och behöver använda vidarebefordrare, är standardbeteendet följande:

Tid (sekunder sedan start) Åtgärd
0 Klienten frågar DNS-servern. DNS-servern vidarebefordrar omedelbart frågan till sin första vidarebefordrare.
<forwarding_timeout> Om <den första vidarebefordraren inte svarade efter forwarding_timeout> sekunder frågar DNS-servern den andra vidarebefordraren.
2 * <forwarding_timeout> +1 Om <den andra vidarebefordraren inte svarade efter forwarding_timeout> +1 sekunder till frågar DNS-servern den tredje vidarebefordraren.
... ...
N * <forwarding_timeout> +(N-1) Om <Nth-vidarebefordraren inte svarade efter forwarding_timeout> + 1 sekunder till frågar DNS-servern vidarebefordraren (N+1).

Kommentar

Förutom den konfigurerade fördröjningen kan det uppstå ytterligare en halv sekunds fördröjning på grund av systemets omkostnader.

Algoritmen stoppas när tiden som förflutit har överskridit RecursionTimeout-värdet

Om RecursionTimeout upphör att gälla svarar DNS-servern tillbaka till klienten med ett serverfel.

Kommentar

Vi skickar inte serverfelet omedelbart efter att RecursionTimeout upphör att gälla, utan bara när det är dags att prova nästa vidarebefordrare.

Om servern lyckas kontakta alla vidarebefordrare innan RecursionTimeout upphör att gälla utan att få svar, försöker den använda rottipsen för namnmatchningen (standardinställningen, såvida inte rekursion inaktiverades på servernivå).

Det innebär att med standardinställningarna kan en Windows DNS-server köra frågor mot högst tre vidarebefordrare. Det kommer inte att finnas tillräckligt med tid för att komma fram för att använda den fjärde vidarebefordraren. I själva verket med standardinställningar kommer Windows DNS-servern att:

  • Fråga den första vidarebefordraren efter 0 sekunder
  • Fråga den andra vidarebefordraren efter 3,5 sekunder
  • Fråga den tredje vidarebefordraren efter 3,5 + 4 = 7,5 sekunder

Vid den åttonde sekunden upphör RecursionTimeout att gälla, så vi når inte den punkt där den fjärde vidarebefordraren efterfrågas (vilket skulle ha inträffat efter 3,5 + 4 + 4 = 11,5 sekunder).

Vi skickar svaret serverfel efter 11,5 sekunder.

Exempel:

DNS-servern med IP-adressen 192.168.0.1 har konfigurerats med fem vidarebefordrare (10.0.0.1-10.0.0.5).

Klienten har IP-adressen 10.0.0.31 och frågar efter Microsoft.com.

På en nätverksinsamling skulle vi se följande network monitor-utdata (not 10.0.0.4 och 10.0.0.5 som aldrig efterfrågades):

Tidsförskjutning timeDelta källmålinformation
6:33:51.7507293 0.2731738 0.0000000 10.0.0.31 192.168.0.1 DNS:QueryId = 0xF03, QUERY (Standard query), Query for microsoft.com of type Host Addr on class Internet
6:33:51.7510021 0.2734466 0.0002728 192.168.0.1 10.0.0.1 DNS:QueryId = 0xBD57, QUERY (Standard query), Query for microsoft.com of type Host Addr on class Internet
6:33:55.2997074 3.8221519 3.5487053 192.168.0.1 10.0.0.2 DNS:QueryId = 0xBD57, QUERY (Standard query), Query for microsoft.com of type Host Addr on class Internet
6:33:59.2931644 7.8156089 3.9934570 192.168.0.1 10.0.0.3 DNS:QueryId = 0xBD57, QUERY (Standard query), Query for microsoft.com of type Host Addr on class Internet
6:34:03.3112753 11.8337198 4.0181109 192.168.0.1 10.0.0.31 DNS:QueryId = 0xF03, QUERY (Standard query), Response – Server failure

Vad är standardbeteendet för en DNS-server när fler än två DNS-servrar konfigureras som villkorliga vidarebefordrare

Precis som vidarebefordrare finns det två nyckelvariabler för villkorliga vidarebefordrare. Vi har fortfarande RecursionTimeout (som fungerar på servernivå) men i det här scenariot använder vi ForwarderTimeout i stället för ForwardingTimeout. Observera specifikt att ForwarderTimeout fungerar på zonbasis och har olika standardvärden:

  • RecursionTimeout – hur länge DNS (Domain Name System) väntar på att fjärrservrar ska svara på en rekursiv klientfråga innan sökningen avslutas.

    Det sparas i registret under HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters\RecursionTimeout.

    Det kan konfigureras via dnscmd /config /RecursionTimeout <value>.

    Standardvärdet är 8 sekunder i Windows Server 2012, Windows Server 2012 R2, Windows Server 2016, Windows Server 2019 och Windows Server 2022.

    RecursionTimeout definieras på DNS-servernivå och är oberoende av den specifika zon som efterfrågas.

  • ForwarderTimeout – hur länge DNS (Domain Name System) väntar på att varje server i listan över villkorsstyrda vidarebefordrare ska svara på en fråga.

    Eftersom villkorliga vidarebefordrare har konfigurerats för specifika zoner är Även ForwarderTimeout zonberoende.

    Det sparas i registret under HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DNS Server\Zones\ <zone_name>\ForwarderTimeout.

    Standardvärdet är 5 sekunder i Windows Server 2012, Windows Server 2012 R2, Windows Server 2016, Windows Server 2019 och Windows Server 2022.

    Det här är också den inställning som du kan se i GUI för villkorliga vidarebefordrare.

När DNS-servern tar emot en fråga för en post i en zon som den inte är auktoritativ för och är konfigurerad för att använda villkorsstyrda vidarebefordrare för den, är standardbeteendet följande:

Tid (sekunder sedan start) Åtgärd
0 Klienten frågar DNS-servern. DNS-servern vidarebefordrar omedelbart frågan till den första villkorliga vidarebefordraren.
<forwarder_timeout> Om <den första villkorliga vidarebefordraren inte svarade efter forwarder_timeout> sekunder frågar DNS-servern den andra villkorliga vidarebefordraren.
2 * <forwarder_timeout> +1 Om <den andra villkorliga vidarebefordraren inte svarade efter forwarder_timeout> +1 sekunder till frågar DNS-servern den tredje villkorliga vidarebefordraren.
... ...
N * <forwarder_timeout> +(N-1) Om <den villkorsstyrda vidarebefordraren Nth inte svarade efter forwarder_timeout> +1 sekunder till frågar DNS-servern den (N+1):e villkorliga vidarebefordraren.

Kommentar

Förutom den konfigurerade fördröjningen kan det uppstå ytterligare en halv sekunds fördröjning på grund av systemets omkostnader.

Algoritmen stoppas när tiden som förflutit har överskridit RecursionTimeout-värdet

Om RecursionTimeout upphör att gälla svarar DNS-servern tillbaka till klienten med ett serverfel.

Kommentar

Vi skickar inte serverfelet omedelbart efter att RecursionTimeout upphör att gälla, utan bara när det är dags att prova nästa villkorsstyrda vidarebefordrare.

Det innebär att med standardinställningarna kan en Windows DNS-server köra frågor mot högst två villkorliga vidarebefordrare. Det kommer inte att finnas tillräckligt med tid för att använda den tredje villkorliga vidarebefordraren. I själva verket med standardinställningar kommer Windows DNS-servern att:

  • Fråga den första vidarebefordraren efter 0 sekunder
  • Fråga den andra vidarebefordraren efter 5,5 sekunder

Vid den åttonde sekunden upphör RecursionTimeout att gälla, så vi når inte den punkt där den tredje villkorliga vidarebefordraren efterfrågas (vilket skulle ha inträffat efter 5,5 + 6 = 11,5 sekunder).

Vi skickar svaret serverfel efter 11,5 sekunder.

Exempel:

DNS-servern med IP-adressen 192.168.0.1 har konfigurerats med fem villkorliga vidarebefordrare (10.0.0.1-10.0.0.5) för zonen Microsoft.com.

Klienten har IP-adressen 10.0.0.31 och frågar efter Microsoft.com.

På en nätverksinsamling skulle vi se följande network monitor-utdata (not 10.0.0.3, 10.0.0.4 och 10.0.0.5 frågade aldrig):

Tidsförskjutning timeDelta källmålinformation
6:50:32.5481816 0.4306857 0.0000000 10.0.0.33 192.168.0.1 DNS:QueryId = 0x245A, QUERY (Standard query), Query for microsoft.com of type Host Addr on class Internet
6:50:32.5484341 0.4309382 0.0002525 192.168.0.1 10.0.0.1 DNS:QueryId = 0x252B, QUERY (Standard query), Query for microsoft.com of type Host Addr on class Internet
6:50:38.1695163 6.0520204 5.6210822 192.168.0.1 10.0.0.2 DNS:QueryId = 0x252B, QUERY (Standard query), Query for microsoft.com of type Host Addr on class Internet
6:50:44.1856567 12.0681608 6.0161404 192.168.0.1 10.0.0.33 DNS:QueryId = 0x245A, QUERY (Standard query), Response – Server failure

Referenser