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

image

2) Client tenta di contattare DHCP server per 3 volte

image

3) Se DHCP server risponde, client rinnova il lease. Se DHCP server non risponde, client ritenta altre 3 DHCP requests

image

4) Se DHCP server non risponde, client tenta di contattare il suo gateway (nell’esempio, 10.0.0.2)

image

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)

image

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:

image

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