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.

image

 

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:

image

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):

image

 

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:

image

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):

 

image

 

Per ulteriori informazioni:

Teoria

Configurazione

Best Practice

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.