Introduction

When a DHCP scope runs out of available IP addresses, new devices cannot join the network and existing devices may lose connectivity when their lease expires. This is common in environments with high device turnover (conference rooms, guest networks, BYOD) where the default 8-day lease duration holds addresses long after devices have left. The DHCP event log shows Event ID 1020: Scope X.X.X.X is 100 percent full.

Symptoms

  • New devices receive APIPA address (169.254.x.x) instead of DHCP address
  • ipconfig shows DHCP Enabled: Yes but Autoconfiguration IP: 169.254.x.x
  • DHCP console shows In Use count equal to Scope Size
  • Event ID 1020: Scope is 100% full and 100% active
  • Users report No internet access despite working network infrastructure

Common Causes

  • Lease duration too long for the environment (8-day default)
  • Scope size too small for the number of connecting devices
  • Expired leases not being reclaimed due to DHCP service issue
  • Rogue devices consuming addresses (IoT, unauthorized devices)
  • Reservations consuming addresses that could otherwise be dynamic

Step-by-Step Fix

  1. 1.Check current scope utilization:
  2. 2.```powershell
  3. 3.Get-DhcpServerv4Scope -ScopeId 192.168.1.0 | Get-DhcpServerv4Lease |
  4. 4.Group-Object AddressState | Select-Object Name, Count
  5. 5.`
  6. 6.Delete expired leases to free up addresses:
  7. 7.```powershell
  8. 8.# Clean up expired and inactive leases
  9. 9.$leases = Get-DhcpServerv4Lease -ScopeId 192.168.1.0 |
  10. 10.Where-Object {$_.AddressState -eq "Expired" -or $_.AddressState -eq "Inactive"}
  11. 11.foreach ($lease in $leases) {
  12. 12.Remove-DhcpServerv4Lease -ScopeId 192.168.1.0 -IPAddress $lease.IPAddress
  13. 13.}
  14. 14.`
  15. 15.Reduce lease duration to reclaim addresses faster:
  16. 16.```powershell
  17. 17.Set-DhcpServerv4Scope -ScopeId 192.168.1.0 -LeaseDuration 1.00:00:00
  18. 18.# Changes from 8 days to 1 day
  19. 19.# For high-turnover environments (guest WiFi), consider 4 hours:
  20. 20.# Set-DhcpServerv4Scope -ScopeId 192.168.1.0 -LeaseDuration 0.04:00:00
  21. 21.`
  22. 22.Expand the scope if the subnet supports more addresses:
  23. 23.```powershell
  24. 24.# If currently /24 (254 addresses), expand to /23 (510 addresses)
  25. 25.Set-DhcpServerv4Scope -ScopeId 192.168.1.0 -EndRange 192.168.2.254
  26. 26.# Ensure the subnet mask is also updated on the network
  27. 27.`
  28. 28.Add an additional scope for overflow:
  29. 29.```powershell
  30. 30.Add-DhcpServerv4Scope -Name "Overflow" -StartRange 192.168.100.1 -EndRange 192.168.100.254 -SubnetMask 255.255.255.0
  31. 31.`
  32. 32.Monitor scope utilization going forward:
  33. 33.```powershell
  34. 34.# Get utilization percentage
  35. 35.$scope = Get-DhcpServerv4Scope -ScopeId 192.168.1.0
  36. 36.$leases = Get-DhcpServerv4Lease -ScopeId 192.168.1.0 | Where-Object {$_.AddressState -eq "Active"}
  37. 37.$utilization = ($leases.Count / ($scope.EndRange[3] - $scope.StartRange[3] + 1)) * 100
  38. 38.Write-Host "DHCP Scope Utilization: $utilization%"
  39. 39.`

Prevention

  • Set lease duration to match device turnover patterns (4 hours for guest, 1 day for corporate)
  • Monitor DHCP scope utilization with alerts at 70% and 90% thresholds
  • Plan scope sizes with 30-50% headroom for growth
  • Use reservations sparingly - each reservation permanently consumes an address
  • Implement NAP (Network Access Policy) to limit unauthorized device connections