Windows server 2003 e 2008 - DHCP client possono non ottenere correttamente settings del default gateway

Ciao a tutti!

Oggi parleremo di una feature “nascosta” del DHCP in Windows Server; è proprio il caso di dire nascosta, perchè non è una impostazione che l’utente può visualizzare in modo immediato dalla console, ma che può generare diversi problemi se non configurata correttamente. Ve ne parlerò tramite un esempio reale, partendo dal problema per arrivare alla sua causa.

Sintomo: I clients DHCP ottengono come indirizzo IP del Default Gateway lo stesso indirizzo che viene loro assegnato dal DHCP server.

Immaginiamo due diversi scopes sul DHCP, configurati in modo identico, con Default gateway specificato nell’opzione 003Router con indirizzo IP pari al secondo IP disponibile nella subnet dello scope (dove il primo è il DNS server).

image

image

Il problema è che i clients del primo scope (East) non ottengono correttamente le impostazioni del Default Gateway, mentre quelli del secondo (North) non hanno alcun problema.

Sorprendentemente lo stesso client, se migrato da una subnet all’altra, ha il problema solo se connesso alla rete East. Quando ottiene l’indirizzo IP 10.0.0.24 dallo Scope North, ottiene il corretto default gateway – 10.0.0.2. Mentre se connesso all’altra rete ottiene indirizzo IP 192.168.0.31 e default gateway anch’esso 192.168.0.31. In tale situazaione, il client sarà impossibilitato a contattare qualsiasi macchina al di fuori della sua subnet.

Potremmo essere indotti a pensare che ci sia un problema di rete, che impatti in modo diverso le due subnet. Se analizziamo il traffico generato dal DHCP ci accorgiamo però che è il server stesso a popolare in partenza i campi del pacchetto in modo errato.

image

Apro una piccola parentesi qui. Sebbene l’errore si presenti nello stesso modo, se il client è una macchina Windows XP leggerà il campo Router: 192.168.0.31 e lo porrà così com’è nei suei settings del default gateway. I client Windows 7 invece hanno una feature in più, in pratica si accorgono che l’indirizzo è uguale, quindi pur ricevendo 192.168.0.31, settano come default gateway il valore 0.0.0.0.

La sostanza non cambia: indifferentemente dal sistema operativo del client, il valore del default gateway è errato.

Perchè allora il DHCP server “sbaglia” a costruire i pacchetti??

La soluzione va ricercata andando a leggere la configurazione del DHCP server da riga di comando, anzichè leggerla dall’interfaccia grafica. Il comando per farlo è

netsh dhcp server dump

Di seguito vi mostro l’output del comando (omesse porzioni non rilevanti). La differenza tra I due scopes verrà subito notata dall’occhio più attento!

image

Il parametro “state” può avere quattro diversi valori, come indicato nella documentazione ufficiale a questo link:

0 - Deactivates the scope

1 - Activates the scope (default)

2 - Deactivates the scope and marks the scope as "Switched"

3 - Activates the scope and marks the scope as "Switched."

Lo scope correttamente funzionante è impostato in modalità normale, mentre quello con problemi è “Switched”. La modalità Switched è definita “per l’utilizzo in reti dove sono presenti più reti logiche all’interno della stessa rete fisica”. I lettori più esperti potranno assimilare questo concetto a quello di Superscoping, che però è definito in un parametro diverso che non implica nessuna modifica allo state precedentemente definito.

By design, Windows non assegna nessun default gateway alle reti di tipo “Switched” perchè a livello teorico per tali reti è impossibile definire un default gateway univoco.

Qualsiasi valore impostiamo, quindi, non verrà comunicato ai clients. Per risolvere il problema bisogna quindi resettare lo stato dello scope al valore di default con il comando

netsh dhcp server scope <nome_scope> set state 1

Ciao e alla prossima!

Stefano Gagliardi
Support Engineer
Microsoft Enterprise Platform Support