Il tuo scope DHCP su Windows Server 2019 è arrivato a zero indirizzi? In questa guida trovi un piano d’azione pratico per liberare rapidamente IP, prevenire nuove saturazioni e ristrutturare il pool senza downtime, con esempi concreti in GUI e PowerShell.
Capire il problema: quando e perché uno scope DHCP si satura
Un scope saturo è una condizione in cui il server DHCP non ha più indirizzi liberi da assegnare ai client. I sintomi tipici includono:
- Nuovi client che non ottengono un IP (o ricevono un APIPA 169.254.x.x).
- Eventi e log che riportano offerte fallite o rifiutate.
- Picchi di richieste su reti Wi‑Fi, guest o BYOD, spesso legati a MAC randomizzati (smartphone/IoT) che consumano molti lease.
- Lease troppo lunghi rispetto al turnover dei dispositivi.
- Conflitti di indirizzo o IP statici “fuori policy”.
- Scope ridimensionati nel tempo senza adeguare esclusioni, riserve e subnet mask.
La buona notizia è che Windows Server 2019 gestisce già la pulizia automatica: un lease scaduto torna disponibile, se il client non lo rinnova e non esistono conflitti. Se però la rete è dinamica (laboratori, open space, guest, aule, fiere, IoT) i tempi di rilascio possono non stare al passo con il churn dei dispositivi. Qui sotto trovi le azioni più efficaci, ordinate da “pronto intervento” a “progettazione”.
Checklist rapida: ripristinare l’erogazione di IP senza fermare la produzione
Azione | Obiettivo | Dove | Impatto | Note |
---|---|---|---|---|
Verificare i lease correnti | Capire chi occupa gli IP e quali sono già scaduti | DHCP Manager → IPv4 → <Scope> → Address Leases | Nullo | Ordina per Expiration e Active; identifica macchine “zombie”. |
Ridurre la durata del lease | Accelerare il rientro degli IP inattivi | Proprietà dello scope → General → Lease duration | Nullo | Passa da 8 giorni a 1–3 giorni nelle LAN dinamiche. |
Forzare pulizia scaduti | Rilasciare subito gli IP marked Expired | PowerShell o riavvio servizio | Bassissimo | Vedi comandi sotto; i lease validi restano. |
Eliminare lease specifici | Recuperare IP bloccati da device noti | PowerShell | Mirato | Filtra per State, MAC o IP. |
Allineare DHCP‑DNS | Rimuovere nomi obsoleti che ostacolano il riciclo | DNS Manager / dnscmd | Basso | Abilita Aging/Scavenging, avvia Scavenge. |
Aumentare il pool | Aggiungere indirizzi disponibili | Routing, VLAN, DHCP | Medio | /23, superscope, o nuovo scope con failover. |
Prevenire sprechi | Ridurre “lease fantasma” e conflitti | Policy, switch, DHCP settings | Medio | Conflict detection, NAC, inventario IP statici. |
Operazioni in DHCP Manager (GUI) che danno subito risultati
Verificare rapidamente i lease
- Apri dhcpmgmt.msc → IPv4 → <Scope> → Address Leases.
- Attiva le colonne Active, Expiration, Unique ID (MAC).
- Ordina per Expiration e identifica:
- Lease Expired non ancora rilasciati.
- Lease “Active = No”.
- Dispositivi con MAC casuali (spesso smartphone e IoT).
- Controlla Reservations: troppe riserve possono “ingessare” il pool.
- Rivedi le Exclusions: una excluderange ampia può mascherare un pool in realtà sufficiente.
Ridurre la durata del lease (senza riavviare nulla)
Nel nodo dello scope → Properties → General imposta Lease duration a 1‑3 giorni per le reti con alto turnover. I client rinnoveranno più spesso e gli IP torneranno disponibili prima. In reti stabili (server, desktop fissi) 4–7 giorni sono generalmente adeguati.
Riconciliare e “rinfrescare” lo scope
Dal nodo Address Leases puoi usare Reconcile per riallineare database e registrazioni. Se molti lease risultano già scaduti, un riavvio controllato del servizio (senza riavviare il server) libera rapidamente gli IP marcati come Expired.
# Opzione rapida (cmd)
net stop dhcpserver && net start dhcpserver
PowerShell equivalente
Restart-Service -Name dhcpserver
Questo non interrompe i client che già possiedono un lease valido: continueranno a usarlo fino alla scadenza; i client in discovery riceveranno nuove offerte immediatamente dopo il riavvio del servizio.
PowerShell: kit essenziale per sbloccare e analizzare
PowerShell offre visibilità e controllo granulare. Ecco i cmdlet più utili su Windows Server 2019:
# Elenco e statistiche di utilizzo per uno scope
Get-DhcpServerv4ScopeStatistics -ScopeId 192.168.1.0
Visualizza tutti i lease di uno scope
Get-DhcpServerv4Lease -ScopeId 192.168.1.0 |
Select-Object IPAddress, ClientId, HostName, State, ExpirationTime |
Format-Table -AutoSize
Rimuove in blocco i lease già scaduti
Get-DhcpServerv4Lease -ScopeId 192.168.1.0 |
Where-Object { $\_.State -eq 'Expired' } |
Remove-DhcpServerv4Lease -Confirm:\$false
Rimuove un lease specifico per IP
Remove-DhcpServerv4Lease -ScopeId 192.168.1.0 -IPAddress 192.168.1.150 -Confirm:\$false
Riduce la durata del lease a 1 giorno (formato d.hh\:mm\:ss)
Set-DhcpServerv4Scope -ScopeId 192.168.1.0 -LeaseDuration 1.00:00:00
Trova lease duplicati per MAC (utile con MAC randomizzati)
Get-DhcpServerv4Lease -ScopeId 192.168.1.0 |
Group-Object ClientId | Where-Object { $\_.Count -gt 1 } |
Select-Object Count, Name </code></pre>
<p><strong>Suggerimento:</strong> se usi più scope, puoi iterare la riduzione del lease su tutti i pool in un colpo solo:</p>
<pre><code>Get-DhcpServerv4Scope |
ForEach-Object { Set-DhcpServerv4Scope -ScopeId $_.ScopeId -LeaseDuration 2.00:00:00 }
</code></pre>
<h2>Sincronizzare DHCP e DNS dinamico (DDNS)</h2>
<p>DDNS tiene allineati IP e nomi, ma record obsoleti possono intralciare il riuso degli indirizzi. Agisci su due fronti:</p>
<ol>
<li><strong>Credenziali DHCP per aggiornamenti DNS sicuri:</strong> in <em>DHCP Manager → Server → Properties → Advanced → Credentials</em> configura un account dedicato (es. <code>svcdhcpdns</code>) per creare/eliminare record A/PTR nelle zone AD‑integrated.</li>
<li><strong>Aging & Scavenging in DNS:</strong> in <em>DNS Manager</em>, abilita l’<em>aging</em> sulle zone interessate e usa <em>Action → Scavenge Stale Resource Records</em> per ripulire i record scaduti. Se necessario, forza via CLI:
<pre><code>dnscmd /ageallrecords # contrassegna tutti i record per l'aging
dnscmd /startscavenging # avvia subito lo scavenging
Nota: l’opzione “Scavenge” può essere meno evidente nelle interfacce più recenti; la CLI rimane affidabile per eseguire una pulizia immediata durante la gestione dell’emergenza.
Ampliare o ristrutturare il pool di indirizzi
Estendere la subnet (es. /24 → /23)
Quando il consumo medio è stabilmente oltre il 70–80%, valuta l’aumento degli indirizzi disponibili:
- Coordina il cambio di subnet mask con router, firewall e VLAN.
- Allinea Scope Options (gateway, DNS, NTP) e Reservations.
- Evita esclusioni superflue: in un /23, rivedi le excluderange ereditate dal vecchio /24.
Aggiungere un secondo scope e configurare il failover
Il failover DHCP (introdotto da tempo in Windows Server) offre due modalità:
- Load Balance (50/50 tipico): entrambi i server rispondono alle richieste ripartendo gli indirizzi.
- Hot Standby: un server primario eroga, il partner subentra in caso di guasto, con una percentuale di riserva.
Esempi PowerShell:
# Load Balance su uno scope
Add-DhcpServerv4Failover -Name "LB-LAN" -ComputerName DHCP1 -PartnerServer DHCP2 `
-ScopeId 192.168.1.0 -LoadBalancePercent 50 -MaxClientLeadTime 01:00:00
Hot Standby con riserva 5%
Add-DhcpServerv4Failover -Name "HS-LAN" -ComputerName DHCP1 -PartnerServer DHCP2 \`
-ScopeId 192.168.1.0 -Mode HotStandby -ReservePercent 5 -MaxClientLeadTime 01:00:00 </code></pre>
<h3>Superscope su una singola LAN fisica</h3>
<p>Se hai bisogno di più reti logiche nello stesso dominio di broadcast (es. 192.168.10.0/24 e 192.168.11.0/24 sulla medesima LAN), crea un <strong>superscope</strong> e associa i due scope. Attenzione a default gateway e routing: i client devono ricevere l’<em>option 003</em> coerente con la loro VLAN/segmento.</p>
<pre><code># Crea un superscope con due scope esistenti
Add-DhcpServerv4Superscope -Name "LAN-Super" -ScopeId 192.168.10.0,192.168.11.0
</code></pre>
<h2>Prevenire conflitti e sprechi</h2>
<h3>Conflict Detection Attempts</h3>
<p>Abilita 1–2 <em>Conflict Detection Attempts</em> nelle <em>Properties</em> del server DHCP (tab <em>Advanced</em>) oppure via PowerShell:</p>
<pre><code>Set-DhcpServerSetting -ConflictDetectionAttempts 2
</code></pre>
<p>Il server invia ARP prima di assegnare l’IP. <em>Trade‑off:</em> ogni tentativo aggiunge un piccolo ritardo; non superare 2 su reti con latenza elevata.</p>
<h3>Individuare IP statici fuori policy</h3>
<ul>
<li>Confronta <em>Address Leases</em> con gli inventari CMDB e <em>Reservations</em>.</li>
<li>Scansiona ARP sul core switch per identificare host con IP “fissi” dentro il pool dinamico.</li>
<li>Insegna la policy: statici <em>solo</em> in range riservati e documentati.</li>
</ul>
<h3>MAC randomizzati e IoT “rumorosi”</h3>
<p>Smartphone moderni usano <strong>MAC privati</strong> per SSID, generando molti lease; access point e alcuni IoT cambiano MAC dopo ogni riavvio. Mitigazioni:</p>
<ul>
<li>Per SSID gestiti, disabilita la randomizzazione via MDM o imposta un SSID “enterprise” con 802.1X.</li>
<li>Riduci la durata del lease nelle WLAN ad alto churn (12–24 ore).</li>
<li>Isola IoT in un scope dedicato con lease molto brevi.</li>
</ul>
<h2>Log, audit e manutenzione del database DHCP</h2>
<h3>Audit e log</h3>
<p>Abilita il <strong>DHCP Audit Log</strong> (in genere attivo per default) in <em>DHCP Manager → Server → Properties → General</em>. I log si trovano in <code>C:\Windows\System32\dhcp\DhcpSrvLog-*.log</code> e aiutano a scoprire:</p>
<ul>
<li>Client che saturano il pool con richieste frequenti.</li>
<li>Dispositivi non autorizzati.</li>
<li>Rinnovi anomali o NACK ripetuti.</li>
</ul>
<p>Controlla anche il <em>Registro eventi</em> → <em>Applications and Services Logs → Microsoft → Windows → DHCP‑Server</em> (canali <em>Operational/Audit</em>).</p>
<h3>Backup e compattazione JET</h3>
<p>Il database DHCP (<code>dhcp.mdb</code>) è un archivio JET. Il servizio esegue backup automatici nella cartella configurata (default sotto <code>System32\dhcp\backup</code>). In ambienti molto attivi, una compattazione offline può migliorare le prestazioni:</p>
<ol>
<li>Programma una finestra di manutenzione breve.</li>
<li>Arresta il servizio DHCP: <code>net stop dhcpserver</code>.</li>
<li>Vai nella cartella del database (tipicamente <code>C:\Windows\System32\dhcp</code>).</li>
<li>Esegui:
<pre><code>jetpack.exe dhcp.mdb tmp.mdb
Riavvia il servizio: net start dhcpserver
.
Consiglio: tieni sempre un export della configurazione prima di interventi strutturali:
# Backup in chiaro della configurazione e dei lease
Export-DhcpServer -ComputerName DHCP1 -File "C:\Backup\dhcp-backup.xml" -Leases -Force
Ripristino (da usare con cautela)
Import-DhcpServer -ComputerName DHCP1 -File "C:\Backup\dhcp-backup.xml" -Leases -BackupPath "C:\Backup" -Force
Errori comuni da evitare
- Contare solo sui lease “Expired” nel database: se un client rimane online con IP statico o collisione ARP, l’indirizzo non tornerà disponibile finché il conflitto non è risolto.
- Ridurre il lease a pochi minuti: aumenta il chatter DHCP, carica gli AP e non risolve i conflitti sottostanti.
- Dimenticare le esclusioni quando si estende la subnet: vecchie excluderange possono “tagliare” il nuovo spazio.
- Delegare a DNS non scavengiante: senza aging, nomi obsoleti complicano il troubleshooting.
Piano di intervento consigliato (T+60 minuti, T+24 ore, T+7 giorni)
Entro 60 minuti
- Riduci la lease duration dello scope (1–3 giorni in LAN/WLAN dinamiche).
- Riavvia il servizio DHCP per liberare gli Expired già marcati.
- Elimina con PowerShell i lease scaduti di massa o per cluster di MAC randomizzati.
- Verifica e riduci eventuali excluderange superflue.
Entro 24 ore
- Abilita o verifica DNS Aging/Scavenging, avvia uno scavenge mirato.
- Imposta Conflict Detection Attempts = 1–2.
- Segmenta le WLAN “rumorose” con lease brevi e, se possibile, SSID separati.
- Esegui Export-DhcpServer e pianifica backup periodici.
Entro 7 giorni
- Valuta estensione subnet, nuovo scope o superscope.
- Implementa DHCP Failover (Load Balance o Hot Standby).
- Allinea il piano IP: statici documentati fuori dal pool, riserve essenziali, esclusioni minimali.
- Monitora con job schedulati (Get-DhcpServerv4ScopeStatistics) e avvisi quando l’utilizzo supera l’80%.
Tabella operativa dettagliata
Passaggio | Descrizione operativa | Comandi utili | Note / Varianti |
---|---|---|---|
Verificare i lease correnti | Controlla stato, scadenza, MAC e host nei Address Leases. | Get-DhcpServerv4Lease -ScopeId 192.168.1.0 | Filtra State = Expired o Active = No per pulizia mirata. |
Comprendere la pulizia automatica | Il servizio libera gli IP allo scadere del lease; se ciò non avviene, indaga conflitti o lease eccessivi. | — | Lease predefinito 8 giorni; per LAN dinamiche 1–3 giorni è più adeguato. |
Ridurre la durata del lease | Applica una durata più breve allo scope in saturazione. | Set-DhcpServerv4Scope -LeaseDuration 2.00:00:00 | Effetto immediato senza riavviare il servizio. |
Forzare la pulizia manuale | Elimina in blocco gli expired, quindi riavvia il servizio per riconciliare. | Remove-DhcpServerv4Lease ... Restart-Service dhcpserver | I lease validi non vengono toccati. |
Eliminare lease specifici | Rimuovi IP bloccati da device noti (per IP o MAC). | Remove-DhcpServerv4Lease -IPAddress ... | Usare con cautela; preferire indirizzi già scaduti. |
Sincronizzare DHCP‑DNS | Abilita aging/scavenging e credenziali DHCP per DDNS sicuro. | dnscmd /ageallrecords dnscmd /startscavenging | In server recenti l’opzione è nel DNS Manager; la CLI resta disponibile. |
Ampliare o ristrutturare il pool | Estendi subnet, aggiungi scope con failover o crea un superscope. | Add-DhcpServerv4Failover ... Add-DhcpServerv4Superscope ... | Richiede allineamento con router/VLAN. |
Prevenire conflitti e sprechi | Abilita conflict detection, individua IP statici fuori policy, limita MAC randomizzati. | Set-DhcpServerSetting -ConflictDetectionAttempts 2 | Riduce i “lease fantasma”. |
Monitoraggio e alert proattivi
- Statistiche scope: pianifica un job che esegua
Get-DhcpServerv4ScopeStatistics
e invii un alert e‑mail se InUse supera l’80%. - Contatori (PerfMon): osserva Discovers/sec, Offers/sec, Declines, picchi coincidenti con orari di ingresso/uscita.
- IPAM (se disponibile): trend d’uso, conflitti e saturazione a colpo d’occhio.
Script d’esempio: sblocco rapido dello scope
Questo snippet riduce il lease, rimuove gli expired e produce un report sintetico:
$ScopeId = '192.168.1.0'
1) Riduci la lease duration a 2 giorni
Set-DhcpServerv4Scope -ScopeId \$ScopeId -LeaseDuration 2.00:00:00
2) Libera i lease scaduti senza prompt
Get-DhcpServerv4Lease -ScopeId \$ScopeId |
Where-Object { $\_.State -eq 'Expired' } |
Remove-DhcpServerv4Lease -Confirm:\$false
3) Riavvia il servizio per pulizia e riconciliazione
Restart-Service -Name dhcpserver
4) Report di utilizzo
Get-DhcpServerv4ScopeStatistics -ScopeId \$ScopeId
Domande frequenti
Devo “cancellare” manualmente ogni IP inattivo? No. Il meccanismo di lease lo fa nativamente. Agisci manualmente solo in emergenza o per casi anomali (conflitti, MAC randomizzati, dispositivi fuori policy).
Ridurre il lease non sovraccarica il server? Con valori realistici (12–72 ore su WLAN dinamiche) l’impatto è trascurabile e di solito migliora l’esperienza utente.
Conviene 80/20 o Failover? Il failover nativo è preferibile: sincronizza gli stati e gestisce meglio i guasti. Lo split 80/20 è un retaggio compatibile ma meno flessibile.
Serve reinventare la rete? Non sempre. Spesso bastano lease più corti, conflict detection e pulizia DDNS. L’estensione di subnet o nuovi scope diventano necessari quando il profilo d’uso è stabilmente alto.
In sintesi
Il server DHCP non richiede di “cancellare” manualmente ogni IP inattivo: il ciclo di lease già lo fa. Se il pool risulta comunque esaurito, le azioni più efficaci sono:
- Ridurre la durata del lease per accelerare il riciclo.
- Rimuovere/forzare i lease scaduti via PowerShell o restart del servizio.
- Allineare DHCP‑DNS con aging/scavenging e credenziali corrette.
- Ampliare o ristrutturare lo scope (nuova subnet, superscope, failover).
- Prevenire conflitti e sprechi (IP statici, MAC randomizzati, conflict detection).
Seguendo questi passaggi il server riprenderà rapidamente a distribuire indirizzi senza tempi di fermo estesi e con una base più solida per evitare future saturazioni.
Appendice: comandi “pronti all’uso”
Riduzione lease su tutti gli scope
Get-DhcpServerv4Scope | ForEach-Object {
Set-DhcpServerv4Scope -ScopeId $_.ScopeId -LeaseDuration 2.00:00:00
}
Pulizia lease scaduti su tutti gli scope
Get-DhcpServerv4Scope | ForEach-Object {
Get-DhcpServerv4Lease -ScopeId $_.ScopeId |
Where-Object { $_.State -eq 'Expired' } |
Remove-DhcpServerv4Lease -Confirm:$false
}
Restart-Service dhcpserver
Elenco rapido degli scope con % utilizzo
Get-DhcpServerv4Scope | ForEach-Object {
$s = Get-DhcpServerv4ScopeStatistics -ScopeId $_.ScopeId
[PSCustomObject]@{
Scope = $_.ScopeId
Pool = "$($.StartRange)-$($.EndRange)"
InUse = "$($s.AddressesInUse)/$($s.ScopeSize)"
Percent = [math]::Round(($s.AddressesInUse*100.0)/$s.ScopeSize,2)
}
} | Sort-Object Percent -Descending | Format-Table -AutoSize
Configurare credenziali DDNS per DHCP
$cred = Get-Credential # utente del tipo DOMINIO\svcdhcpdns
Set-DhcpServerDnsCredential -Credential $cred
Creare failover (Load Balance) su più scope
$partner = "DHCP2"
Get-DhcpServerv4Scope | ForEach-Object {
Add-DhcpServerv4Failover -Name ("LB-" + $_.ScopeId) `
-PartnerServer $partner -ScopeId $_.ScopeId `
-LoadBalancePercent 50 -MaxClientLeadTime 01:00:00
}
Nota finale sulle versioni: l’esempio si focalizza su Windows Server 2019. In Windows Server 2022 alcune voci UI relative a DNS/aging possono apparire in posizioni differenti rispetto al 2019; in ogni caso, le operazioni CLI mostrate restano applicabili e affidabili.