Timeout di risoluzione dei server d'inoltro e dei server d'inoltro condizionali
Questo articolo descrive il comportamento di fallback e timeout esistente quando uno o più indirizzi IP dei server DNS sono configurati come server d'inoltro o server d'inoltro condizionale in un server DNS.
Numero KB originale: 2834250
Riepilogo
Analogamente ai client DNS, la configurazione dei server DNS con più server d'inoltro o server d'inoltro condizionale aggiunge ulteriore tolleranza di errore all'infrastruttura DNS. L'aggiunta di più server DNS come server d'inoltro o server d'inoltro condizionale consente di continuare a risolvere i nomi DNS in caso di errori dell'unico server configurato, del collegamento di rete sottostante o dell'infrastruttura di rete di supporto.
Tuttavia, l'aggiunta della tolleranza di errore nei server è ancora più critica perché esiste potenzialmente un'operazione transitiva che alcuni server stanno eseguendo per conto di una pluralità di client che sono ora in sospeso. Le risorse vengono quindi utilizzate per tempi più lunghi in modo incrementale.
Assicurarsi di ottimizzare correttamente i parametri se si vogliono usare tre o più server d'inoltro/server d'inoltro condizionale perché le impostazioni predefinite potrebbero non essere ottimizzate per questa quantità elevata di server.
Qual è il comportamento predefinito di un server DNS quando più di due server DNS sono configurati come server d'inoltro
Per comprendere il funzionamento, le variabili chiave sono:
RecursionTimeout : per quanto tempo il DNS (Domain Name System) attende che i server remoti rispondano a una query client ricorsiva prima di terminare la ricerca.
Viene salvato nel Registro di sistema
HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters\RecursionTimeout
in e configurabile tramitednscmd /config /RecursionTimeout <value>
. Questa operazione può essere verificata tramite il cmdletGet-DnsServerRecursion
di PowerShell .Il valore predefinito è 8 secondi in Windows Server 2012, Windows Server 2012 R2, Windows Server 2016, Windows Server 2019 e Windows Server 2022.
RecursionTimeout viene definito a livello di server DNS ed è indipendente dalla zona specifica su cui viene eseguita una query.
ForwardingTimeout : per quanto tempo il dns (Domain Name System) attende che ogni server nell'elenco in Server d'inoltro risponda a una query.
Viene salvato nel Registro di sistema in
HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters\ForwardingTimeout
e configurabile tramitednscmd /config /ForwardingTimeout <value>
. Questa operazione può essere verificata anche tramite il cmdletGet-DnsServerForwarder
di PowerShell .Il valore predefinito è 3 secondi in Windows Server 2012, Windows Server 2012 R2, Windows Server 2016, Windows Server 2019 e Windows Server 2022.
ForwardingTimeout viene definito a livello di server DNS ed è indipendente dalla zona specificata su cui viene eseguita una query.
Quando il server DNS riceve una query per un record in una zona per cui non è autorevole e deve usare server d'inoltro, il comportamento predefinito è il seguente:
Ora (secondi dall'inizio) | Azione |
---|---|
0 | Il client esegue una query sul server DNS. Il server DNS inoltra immediatamente la query al primo server d'inoltro. |
<forwarding_timeout> | Dopo <forwarding_timeout> secondi, se il primo server d'inoltro non ha risposto, il server DNS esegue una query sul secondo server d'inoltro. |
2 * <forwarding_timeout> +1 | Dopo <forwarding_timeout> +1 altri secondi, se il secondo server d'inoltro non ha risposto, il server DNS esegue una query sul terzo server d'inoltro. |
... | ... |
N * <forwarding_timeout> +(N-1) | Dopo <forwarding_timeout> + 1 secondo, se il N° server d'inoltro non ha risposto, il server DNS esegue una query sul server d'inoltro (N+1).th forwarder. |
Note
Oltre al ritardo configurato, può verificarsi un ritardo aggiuntivo di metà secondo a causa del sovraccarico del sistema.
L'algoritmo si arresta quando il tempo trascorso ha superato il valore RecursionTimeout
Se recursionTimeout scade, il server DNS risponderà al client con un errore del server.
Note
Non viene inviato l'errore del server immediatamente dopo la scadenza di RecursionTimeout , ma solo quando è il momento di provare il server d'inoltro successivo.
Se il server riesce a contattare tutti i server d'inoltro prima della scadenza di RecursionTimeout senza ottenere risposte, tenterà di usare gli hint radice per la risoluzione dei nomi (impostazione predefinita, a meno che la ricorsione non sia stata disabilitata a livello di server).
Ciò significa che con le impostazioni predefinite, un server DNS Windows sarà in grado di eseguire query al massimo tre server d'inoltro. Non ci sarà abbastanza tempo per arrivare per usare il quarto server d'inoltro. Infatti, con le impostazioni predefinite, il server DNS Windows:
- Eseguire una query sul primo server d'inoltro dopo 0 secondi
- Eseguire una query sul secondo server d'inoltro dopo 3,5 secondi
- Eseguire una query sul terzo server d'inoltro dopo 3,5 + 4 = 7,5 secondi
All'ottavo secondo, RecursionTimeout scade, quindi non raggiungeremo il punto in cui viene eseguita la query del quarto server d'inoltro (che sarebbe successo dopo 3,5 + 4 + 4 = 11,5 secondi).
La risposta dell'errore server verrà inviata dopo 11,5 secondi.
Esempio:
Il server DNS con indirizzo IP 192.168.0.1 è configurato con cinque server d'inoltro (10.0.0.1-10.0.0.5).
Il client ha l'indirizzo IP 10.0.0.31 ed esegue una query per Microsoft.com
.
In un'acquisizione di rete verrà visualizzato l'output di Monitoraggio di rete seguente (nota 10.0.0.4 e 10.0.0.5 mai sottoposto a query):
Time Time Offset TimeDelta Source Destination Details
6:33:51.7507293 0.2731738 0.0000000 10.0.0.31 192.168.0.1 DNS:QueryId = 0xF03, QUERY (query standard), Query permicrosoft.com
tipo Host Addr nella classe Internet
6:33:51.7510021 0.2734466 0.0002728 192.168.0.1 10.0.0.1 DNS:QueryId = 0xBD57, QUERY (query standard), Query permicrosoft.com
tipo Host Addr sulla classe Internet
6:33:55.2997074 3.8221519 3.5487053 192.168.0.1 10.0.0.2 DNS:QueryId = 0xBD57, QUERY (query standard), Query permicrosoft.com
tipo Host Addr nella classe Internet
6:33:59.2931644 7.8156089 3.9934570 192.168.0.1 10.0.0.3 DNS:QueryId = 0xBD57, QUERY (query standard), Query per tipomicrosoft.com
Host Addr nella classe Internet
6:34:03.3112753 11.8337198 4.0181109 192.168.0.1 10.0.0.31 DNS:QueryId = 0xF03, QUERY (query standard), Risposta - Errore del server
Qual è il comportamento predefinito di un server DNS quando più di due server DNS sono configurati come server d'inoltro condizionale
Analogamente ai server d'inoltro, esistono due variabili chiave per i server d'inoltro condizionale. È ancora disponibile RecursionTimeout (che funziona a livello di server), ma in questo scenario si usa ForwarderTimeout anziché ForwardingTimeout. In particolare, si noti che ForwarderTimeout funziona su base di zona e ha valori predefiniti diversi:
RecursionTimeout : per quanto tempo il DNS (Domain Name System) attende che i server remoti rispondano a una query client ricorsiva prima di terminare la ricerca.
Viene salvato nel Registro di sistema in
HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters\RecursionTimeout
.È configurabile tramite
dnscmd /config /RecursionTimeout <value>
.Il valore predefinito è 8 secondi in Windows Server 2012, Windows Server 2012 R2, Windows Server 2016, Windows Server 2019 e Windows Server 2022.
RecursionTimeout viene definito a livello di server DNS ed è indipendente dalla zona specifica su cui viene eseguita una query.
ForwarderTimeout : per quanto tempo il dns (Domain Name System) attende ogni server nell'elenco di server d'inoltro condizionale per rispondere a una query.
Poiché i server d'inoltro condizionale sono configurati per zone specifiche, anche ForwarderTimeout dipende dalla zona.
Viene salvato nel Registro di sistema in
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DNS Server\Zones\ <zone_name>\ForwarderTimeout
.Il valore predefinito è 5 secondi in Windows Server 2012, Windows Server 2012 R2, Windows Server 2016, Windows Server 2019 e Windows Server 2022.
Questa è anche l'impostazione che è possibile visualizzare nell'interfaccia utente grafica dei server di inoltro condizionale.
Quando il server DNS riceve una query per un record in una zona per cui non è autorevole ed è configurato per l'uso di server d'inoltro condizionale, il comportamento predefinito è il seguente:
Ora (secondi dall'inizio) | Azione |
---|---|
0 | Il client esegue una query sul server DNS. Il server DNS inoltra immediatamente la query al primo server d'inoltro condizionale. |
<forwarder_timeout> | Dopo <forwarder_timeout> secondi, se il primo server d'inoltro condizionale non risponde, il server DNS esegue una query sul secondo server d'inoltro condizionale. |
2 * <forwarder_timeout> +1 | Dopo <forwarder_timeout> +1 altri secondi, se il secondo server d'inoltro condizionale non risponde, il server DNS esegue una query sul terzo server d'inoltro condizionale. |
... | ... |
N * <forwarder_timeout> +(N-1) | Dopo <forwarder_timeout> +1 altri secondi, se il N° server d'inoltro condizionale non ha risposto, il server DNS esegue una query sul server d'inoltro condizionale (N+1). |
Note
Oltre al ritardo configurato, può verificarsi un ritardo aggiuntivo di metà secondo a causa del sovraccarico del sistema.
L'algoritmo si arresta quando il tempo trascorso ha superato il valore RecursionTimeout
Se recursionTimeout scade, il server DNS risponderà al client con un errore del server.
Note
Non viene inviato l'errore del server immediatamente dopo la scadenza di RecursionTimeout , ma solo quando è il momento di provare il successivo server d'inoltro condizionale.
Ciò significa che con le impostazioni predefinite, un server DNS Windows sarà in grado di eseguire query al massimo due server d'inoltro condizionale. Non ci sarà abbastanza tempo per arrivare per usare il terzo server d'inoltro condizionale. Infatti, con le impostazioni predefinite, il server DNS Windows:
- Eseguire una query sul primo server d'inoltro dopo 0 secondi
- Eseguire una query sul secondo server d'inoltro dopo 5,5 secondi
All'ottavo secondo, RecursionTimeout scade, quindi non raggiungeremo il punto in cui viene eseguita la query del terzo server d'inoltro condizionale (che sarebbe successo dopo 5,5 + 6 = 11,5 secondi).
La risposta dell'errore server verrà inviata dopo 11,5 secondi.
Esempio:
Il server DNS con indirizzo IP 192.168.0.1 è configurato con cinque server d'inoltro condizionale (10.0.0.1-10.0.0.5) per la zona Microsoft.com
.
Il client ha l'indirizzo IP 10.0.0.31 ed esegue una query per Microsoft.com
.
In un'acquisizione di rete verrà visualizzato l'output di Monitoraggio di rete seguente (nota 10.0.0.3, 10.0.0.4 e 10.0.0.5 mai sottoposto a query):
Time Time Offset TimeDelta Source Destination Details
6:50:32.5481816 0.4306857 0.0000000 10.0.0.33 192.168.0.1 DNS:QueryId = 0x245A, QUERY (query standard), Query permicrosoft.com
tipo Host Addr nella classe Internet
6:50:32.5484341 0.4309382 0.0002525 192.168.0.1 10.0.0.1 DNS:QueryId = 0x252B, QUERY (query standard), Query permicrosoft.com
tipo Host Addr nella classe Internet
6:50:38.1695163 6.0520204 5.6210822 192.168.0.1 10.0.0.2 DNS:QueryId = 0x252B, QUERY (query standard), Query permicrosoft.com
tipo Host Addr nella classe Internet
6:50:44.1856567 12.0681608 6.0161404 192.168.0.1 10.0.0.33 DNS:QueryId = 0x245A, QUERY (query standard), Risposta - Errore del server