Client Windows Vista e Windows 7 potrebbero rimanere senza indirizzo IP se il DHCP server è indisponibile
Ciao a tutti!
Consideriamo il seguente scenario: infrastruttura enterprise con DHCP server centralizzato. Tutti i clients nei vari branch office ottengono un indirizzo IP da questo server. Il collegamento via WAN è unreliable.
Cosa succede nel caso che il DHCP server ha un problema ed è offline, oppure I link WAN sono giù e quindi il server è comunque irraggiungibili per I client? Il comportamento di default è il seguente: by design, se il DHCP server è indisponibile, in fase di avvio di sistema I clients Windows 7 mantengono l’indirizzo IP precedentemente assegnatogli se il lease è ancora valido.
Nello specifico, il comportamento è:
1) In fase di boot, client assume indirizzo APIPA (della classe 169.254.0.0/16) e performa Duplicate Address Detection
2) Client tenta di contattare DHCP server per 3 volte
3) Se DHCP server risponde, client rinnova il lease. Se DHCP server non risponde, client ritenta altre 3 DHCP requests
4) Se DHCP server non risponde, client tenta di contattare il suo gateway (nell’esempio, 10.0.0.2)
5) Se gateway risponde, client assume di trovarsi della stessa subnet di prima e ripristina il suo indirizzo IP funzionante (nell’esempio 10.0.0.33)
6) Se gateway non risponde, client assume che non si trova più nella stessa subnet e che quindi I suoi settings siano invalidi: decide quindi di scartare l’indirizzo IP configurato e mantenere l’APIPA
Ci sono però alcuni scenari in cui il comportamento può essere differente. Vale la pena a questo punto introdurre due chiavi di registro nella discussione (entrambe sotto HKLM\System\CurrentControlSet\Services\Tcpip\Parameters)
- DontPingGateway indica se il client effettuerà oppure no il “ping” verso il gateway.
- IPAutoconfigurationEnabled indica se il client, in assenza di indirizzo IP primario, utilizzerà un IP della classe APIPA (169.254.0.0/16) oppure non utilizzerà alcuni IP configurandosi con 0.0.0.0
Di default in Windows 7 I valori delle chiavi sono DontPingGateway = 0 e IPAutoconfigurationEnabled = 1
Che cosa si intende esattamente per “ping” verso il gateway? Ai tempi di Windows XP, la procedura prevedeva un vero e proprio ICMP request verso il default gateway. Nel passaggio a Vista/2008 si è pensato di modificare questo comportamento e passare ad utilizzare una ARP request. Il motivo è che al giorno d’oggi molti router/gateways moderni per motivi di sicurezza non rispondono più all’ICMP e quindi non permettevano a questo meccanismo di funzionare correttamente, costringendo I client a mantenere un indirizzo APIPA. è bene sottolineare che purtroppo:
- su Windows Vista è presente un problema noto (che è stato fissato in Windows 7) e quindi la procedura fallisce senza contattare il gateway costringendo il client all’APIPA
- alcuni dispositivi di rete di terze parti non rispondono alle ARP request quando l’indirizzo sorgente è in una subnet differente (Ad esempio un client con indirizzo APIPA 169.254.0.0/16 che cerca di contattare 10.0.0.2)
Per risolvere entrambi questi problemi è indispensabile settare la chiave di registro DontPingGateway = 1 per “saltare” il check con il gateway del punto 4) e suggerire al client di mantenere l’indirizzo IP valido.
Un ulteriore problema si verifica quando gli amministratori hanno deciso di disabilitare l’APIPA deployando la chiavie di registro IPAutoconfigurationEnabled = 0. In questo scenario purtroppo, non avendo alcun indirizzo IP (nemmeno APIPA) il client non può performare il test con ARP del punto 4) e quindi siccome il Gateway di conseguenza non risponderà, il client rimarrà definitivamente senza indirizzo IP. Anche in questo caso quindi, per risolvere il problema, è necessario settare DontPingGateway = 1
Riassumendo:
Info aggiuntive:
- Nota per Windows 7 RTM: è necessaria una ulteriore hotfix per garantire il corretto funzionamento
A DHCP client computer that has multiple network adapters and that is running Windows 7 or Windows Server 2008 R2 cannot renew a DHCP lease when the computer wakes
http://support.microsoft.com/kb/2393659
This hotfix is included with Windows 7 Service Pack 1 and with Windows Server 2008 R2 Service Pack 1. - Anche se APIPA è disattivato (IPAutoconfigurationEnabled=0), il comando ipconfig/all potrebbe riportare:
”Autoconfiguration Enabled . . . . : Yes"
Questo perchè in Windows 7 l’autoconfigurazione avviene sempre tramite IPv6 - Windows Vista does not keep its DHCP IP address if a DHCP server is not available
http://support.microsoft.com/kb/958336 - Windows Vista Client releases its DHCP Lease during reboot unexpectedly
http://support.microsoft.com/kb/2276930 - DHCP Architecture
http://technet.microsoft.com/en-us/library/dd183602(WS.10).aspx
Grazie a tutti e alla prossima!
Stefano Gagliardi
Support Engineer
Microsoft Enterprise Platform Support