DNS forwarders e Conditional forwarders
Ciao a tutti!
Nel precedente post abbiamo parlato di come funzionano i meccanismi di risoluzione DNS quando molteplici server DNS sono configurati su di un client. Oggi andremo a vedere come funziona invece quando molteplici forwarders o conditional forwarders sono configurati su di un DNS server.
Partiamo da una brevissima descrizione teorica:
Quando un client chiede ad un server DNS di risolvere un nome per una zona a lui sconosciuta, il server si deve organizzare per andare a recuperare la risposta da un ulteriore server DNS. Per questo fine possiamo utilizzare i Forwarders.
Un Forwarder non è altro che un server DNS al quale il nostro server di riferimento inoltra la query del client (passi 1-2 in figura). Il forwarder stesso poi può conoscere la risposta alla query, o può doverla richiedere ad altri in modo ricorsivo (passi 3-4). Quello che è importante è che alla fine del processo il Forwarder sia in grado di restituire la risposta al nostro server (5) che la inoltrerà al client (6).
I Conditional Forwarders funzionano in modo del tutto analogo, ma sono specifici delle zone per cui si effettuano le query. Il server quindi può indirizzare, in base a quale sia la richiesta del client, la query verso uno (o più) conditional forwarders specifici.
Ovviamente, così come per i client, anche in questi casi è bene configurare più di un singolo forwarder/conditional forwarder per evitare problemi di risoluzione in caso di problemi di connettività o di server down.
Qual è il comportamento di default di un server DNS quando due o più DNS server sono configurati come Forwarders?
è bene tenere in considerazione due importanti variabili:
- RecursionTimeout
”quanto tempo il DNS server rimane in attesa di risposte da altri server prima di terminare la ricerca”
Il parametro è salvato nel registro sotto:
HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters\RecursionTimeout
e configurabile tramite il comando:
dnscmd /config /RecursionTimeout <valore>
Il valore di default è:
15 secondi su Windows Server 2003
8 secondi su Windows Server 2008, 2008R2 e 2012
Il RecursionTimeout è definito a livello server ed è indipendente dalla specifica zona per cui si sta effettuando la query
- ForwardingTimeout
”quanto tempo il DNS server rimane in attesa di uno specifico Forwarder”
Il parametro è salvato nel registro sotto:
HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters\ForwardingTimeout
e configurabile tramite il comando:
dnscmd /config /ForwardingTimeout <valore>
Il valore di default è:
5 secondi su Windows Server 2003
3 secondi su Windows Server 2008, 2008R2 e 2012
Il ForwardingTimeout è definito a livello server ed è indipendente dalla specifica zona per cui si sta effettuando la query
Questo parametro è quello che possiamo vedere dalla interfaccia grafica dei Forwarders:
Quando il server DNS riceve una query per un record in una zona per cui non è autoritativo e necessita di usare i forwarders, il comportamento è il seguente:
Tempo (secondi dall’inizio della query) | Azione eseguita |
0 | Client effettua una query verso il server DNS. Server DNS inoltra la query immediatamente verso il primo forwarder. |
<forwarding_timeout> | Dopo <forwarding_timeout> secondi, se il primo forwarder non ha risposto, il server DNS inoltra la query verso il secondo forwarder |
2 * <forwarding_timeout> +1 | Dopo <forwarding_timeout> +1 ulteriori secondi, se il secondo forwarder non ha risposto, il server DNS inoltra la query verso il terzo forwarder |
... | ... |
N * <forwarding_timeout> +(N-1) | Dopo <forwarding_timeout> +1 ulteriori secondi, se l’N-esimo forwarder non ha risposto, il server DNS inoltra la query verso il N+1 esimo forwarder |
Nota: in aggiunta al ritardo configurato può esserci un ulteriore ritardo di 0.5 secondi
L’algoritmo si ferma quando il tempo trascorso supera il valore di RecursionTimeout.
Se scade il RecursionTimeout il DNS server risponde al client con un messaggio di “Server Failure”. Questo messaggio non è inviato immediatamente dopo la scadenza del timeout, ma solo quando arriverà il momento di contattare il forwarder successivo.
Se il server finisce di contattare tutti i forwarders prima che sia scaduto il RecursionTimeout senza ottenere risposte, proverà ad usare i Root Hints.
Questo significa che, con default settings, un DNS Windows Server 2008 R2 sarà in grado di contattare al massimo 3 forwarders. Non ci sarà tempo sufficiente per arrivare ad usare il quarto. Infatti in base ai valori di default il server:
- Contatterà il primo forwarder dopo 0 secondi
- Contatterà il secondo forwarder dopo 3.5 secondi
- Contatterà il terzo forwarder dopo 3.5 + 4 = 7.5 secondi
- Dopo 8 secondi scadrà RecursionTimeout
- Dopo 3.5 + 4 + 4 = 11.5 secondi (quando sarebbe stato tempo di contattare il quarto forwarder) il server risponderà “server failure” al client.
Esempio:
DNS server con IP address 10.10.10.10 e configurato con 5 forwarders (10.0.0.1-10.0.0.5).
Client ha IP address 10.0.0.8
In una cattura di rete vedremmo il seguente comportamento (notare 10.0.0.4 e 10.0.0.5 mai interrogati):
Qual è il comportamento di default di un server DNS quando due o più DNS server sono configurati come Conditional Forwarders?
Similmente al caso dei Forwarders, abbiamo due variabili in gioco. C’è ancora RecursionTimeout (a livello server) ma in questo caso utilizziamo ForwarderTimeout anzichè ForwardingTimeout. Oltre alla sottile differenza nel nome, la grande differenza è che ForwarderTimeout opera a livello di zona ed ha diversi valori di default.
- RecursionTimeout
”quanto tempo il DNS server rimane in attesa di risposte da altri server prima di terminare la ricerca”
Il parametro è salvato nel registro sotto:
HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters\RecursionTimeout
e configurabile tramite il comando:
dnscmd /config /RecursionTimeout <valore>
Il valore di default è:
15 secondi su Windows Server 2003
8 secondi su Windows Server 2008, 2008R2 e 2012
Il RecursionTimeout è definito a livello server ed è indipendente dalla specifica zona per cui si sta effettuando la query
- ForwarderTimeout
”quanto tempo il DNS server rimane in attesa di uno specifico Conditional Forwarder”
Poichè i Conditional Forwarders sono configurati per specifiche zone DNS, anche ForwarderTimeout è zone-dependent.
Il parametro è salvato nel registro sotto:
HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\DNS Server\Zones\ <nome_zona>\ForwarderTimeout
Il valore di default è 5 secondi su Windows Server 2003, 2008, 2008R2 e 2012
Questo parametro è quello che possiamo vedere dalla interfaccia grafica dei Conditional Forwarders:
Quando il server DNS riceve una query per un record in una zona per cui non è autoritativo e necessita di usare i conditional forwarders, il comportamento è il seguente:
Tempo (secondi dall’inizio della query) | Azione eseguita |
0 | Client effettua una query verso il server DNS. Server DNS inoltra la query immediatamente verso il primo conditional forwarder. |
<forwarder_timeout> | Dopo <forwarder_timeout> secondi, se il primo conditional forwarder non ha risposto, il server DNS inoltra la query verso il secondo conditional forwarder |
2 * <forwarder_timeout> +1 | Dopo <forwarder_timeout> +1 ulteriori secondi, se il secondo conditional forwarder non ha risposto, il server DNS inoltra la query verso il terzo conditional forwarder |
... | ... |
N * <forwarder_timeout> +(N-1) | Dopo <forwarder_timeout> +1 ulteriori secondi, se l’N-esimo conditional forwarder non ha risposto, il server DNS inoltra la query verso il N+1 esimo conditional forwarder |
Nota: in aggiunta al ritardo configurato può esserci un ulteriore ritardo di 0.5 secondi
L’algoritmo si ferma quando il tempo trascorso supera il valore di RecursionTimeout.
Se scade il RecursionTimeout il DNS server risponde al client con un messaggio di “Server Failure”. Questo messaggio non è inviato immediatamente dopo la scadenza del timeout, ma solo quando arriverà il momento di contattare il conditional forwarder successivo.
Questo significa che, con default settings, un DNS Windows Server 2008 R2 sarà in grado di contattare al massimo 2 conditional forwarders. Non ci sarà tempo sufficiente per arrivare ad usare il terzo. Infatti in base ai valori di default il server:
- Contatterà il primo conditional forwarder dopo 0 secondi
- Contatterà il secondo conditional forwarder dopo 5.5 secondi
- Dopo 8 secondi scadrà RecursionTimeout
- Dopo 5.5 + 6 = 11.5 secondi (quando sarebbe stato tempo di contattare il terzo conditional forwarder) il server risponderà “server failure” al client.
Esempio:
DNS server con IP address 10.10.10.10 e configurato con 5 conditional forwarders (10.0.0.1-10.0.0.5) per la zona Microsoft.com
Client ha IP address 10.0.0.8 ed effettua una query per Microsoft.com
In una cattura di rete vedremmo il seguente comportamento (notare 10.0.0.3, 10.0.0.4 e 10.0.0.5 mai interrogati):
Per ulteriori informazioni:
Teoria
- Understanding Forwarders
http://technet.microsoft.com/en-us/library/cc782142(v=ws.10).aspx
Configurazione
- Forwarding Timeout
http://technet.microsoft.com/en-us/library/cc940784.aspx - Recursion Timeout
http://technet.microsoft.com/en-us/library/cc940788.aspx
Best Practice
- The Recursion Timeout must be greater than the Forwarding Timeout
http://technet.microsoft.com/en-us/library/ff807363(v=ws.10).aspx - The Forwarding Timeout value should be 2 to 10 seconds
http://technet.microsoft.com/en-us/library/ff807396(v=WS.10).aspx
Grazie a tutti e alla prossima!
Stefano Gagliardi
Sr. Support Engineer
Microsoft Enterprise Platform Support
Comments
- Anonymous
April 07, 2014
interessante argomento e ottima spiegazione.