Ciao a tutti! Recentemente ho avuto la possibilità di lavorare su un caso molto particolare riguardo a problemi sul DHCP server e per evitare di incorrere in situazioni simili in futuro, potrebbe essere utile ed interessante condividere la soluzione. Coglieremo l’occasione anche per illustrare brevemente come personalizzare l’audit logging del Servizio DHCP e di come meglio adattarlo alle proprie esigenze.

Tutti i parametri di cui parleremo in questo articolo sono configurabili modificando i settings presenti nella chiave di registro:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DHCPServer\Parameters

image

Nel caso specifico, il cliente aveva appena migrato un DHCP server da Windows 2003 a 2008R2. I settings per i DNS Dynamic Updates erano configurati in modo che il DHCP server stesso fosse incaricato di aggiornare i record A e PTR per conto di tutti i clients. Tuttavia, non appena messo in piedi il nuovo server, queste operazioni hanno cominciato a fallire drasticamente. Controllando il DHCP log, possiamo trovare messaggi di errore del tipo

“DNS update request failed as the DNS update requests queue limit exceeded" 

Forse non tutti sanno che il processo di update dei record DNS da parte del DHCP non viene eseguito ogni volta per ogni record, ma per migliorare le performance l’algoritmo è progettato per bufferizzare tutte le operazioni in una “coda di lavoro” ed eseguirle in un momento unico, ad intervalli regolari. Tale coda si chiama DynamicDNSQueueLength ed il suo valore è memorizzato nel dword omonimo della chiave di registro Parameters sopraindicata.

Quello che è successo nel nostro caso è che causa migrazione, il nuovo DHCP server si è trovato a dover gestire in un colpo solo un numero di operazioni di update (per tutti i clients dell’infrastruttura!) che è molto più grande della dimensione massima della coda, causandone l’overflow e quindi il fallimento dell’operazione. La semplice soluzione è quindi aumentare la grandezza della DynamicDNSQueueLength (che su Windows 2008 e 2008R2 può avere un valore massimo di 65535).

Per lo stesso motivo, cioè quando si ha un elevato picco di operazioni da svolgere sul DHCP server, può succedere che le operazioni effettuate non vengano più registrate nei log di auditing. Per capirne la causa, andiamo a descrivere come vengono creati questi logs.

I logs del DHCP server (di default in C:\Windows\system32\dhcp) sono suddivisi per giorno. Troveremo quindi 7 differenti files.

image

Ad ogni startup, e comunque al cominciare di un nuovo giorno (mezzanotte ora locale) il server apre un handle sul file opportuno: se il file non è stato modificato nelle ultime 24 ore, verrà sovrascritto. Altrimenti, i nuovi logs verranno aggiunti in modalità “append”. In condizioni normali quindi cominceremo a sovrascrivere e cancellare i dati vecchi dopo sette giorni. Un ottimo workaround, se abbiamo necessità di mantenere uno “storico” che vada più indietro di una settimana, è modificare i files ogni 24 ore.

Tuttavia, possiamo incorrere nel problema opposto: non poter tracciare i DHCP logs causa problemi di spazio. Esiste un meccanismo per il quale ad intervalli regolari viene fatto un controllo dello spazio su disco. La frequenza di queste azioni è specificata nel parametro DhcpLogDiskSpaceCheckInterval (espresso in numero di righe di log aggiunte) e il disco viene considerato pieno se il limite minimo di spazio specificato in DhcpLogMinSpaceOnDisk è raggiunto, o se i filesdi log raggiungono una certa grandezza: la dimensione massima dei files è specificata nel parametro DhcpLogFilesMaxSize. Il valore di default è 70, quindi potranno essere utilizzati al massimo 70 Megabytes per tutti i files di logging: ogni file di conseguenza sarà limitato a 70 / 7 = 10 Mb. Nel caso in cui abbiamo moltissime operazioni svolte sul DHCP server in un solo giorno, può succedere che questo limite risulti troppo basso, e che quindi il logging venga sospeso fino a mezzanotte (dopo aver tracciato un ultimo messaggio di “Audit Log Paused”). Possiamo incorrere in questo rischio di limitarci a loggare pochi Megabytes anche se abbiamo ancora molto spazio libero sul disco! E’ quindi opportuno dimensionare correttamente il valore di DhcpLogFilesMaxSize in base alle risorse di storage che si hanno a disposizione.

E’ infine possibile personalizzare i valori di BackupInterval (ogni quanti minuti viene effettuato un backup del database DHCP) e di DatabaseCleanupInterval (ogni quanti minuti viene effettuato un ciclo di “pulizia” dei record DHCP obsoleti) che vanno dimensionati in relazione alla durata del lease DHCP.

Ciao a tutti e alla prossima!

Stefano Gagliardi
Support Engineer
Microsoft Enterprise Platform Support