windows dhcp服务器默认租约到期后不自动释放ip,需启用“自动清理过期租约”、设合理阈值、定期压缩dhcp.mdb,并用powershell筛查删除僵尸active租约。
windows dhcp 服务器默认会在租约到期后自动回收 ip 地址,但实际中常出现“过期未释放”现象——即客户端早已离线或断电,租约状态仍显示为 active,导致地址池虚假耗尽。这并非设计缺陷,而是机制依赖客户端主动行为与服务端清理策略的协同;若两者脱节,就会卡在“expired 应该释放却没释放”或“active 实际已失效”的中间态。
租约过期的真实状态逻辑
DHCP 租约生命周期不是简单的“到期即删”。Windows Server 中租约有明确状态标识:
- Active:客户端在线且正常续租,IP 正在使用中
- Expired:租约时间已过,客户端未续租也未主动释放,但服务器尚未执行回收动作
- Released:客户端主动发送 DHCPRELEASE 报文,IP 立即归还池中
关键点在于:Expired ≠ 已释放。系统只将过期记录标记为 Expired,是否从可用池中恢复,取决于是否启用了自动清理或人工干预。
确保过期地址真正释放的三项配置
仅靠默认设置无法保障地址及时回收,需主动配置服务端行为:
- 启用“自动清理过期租约”功能:在 DHCP 控制台 → 服务器属性 → 高级选项卡中勾选,并设“清理间隔”为 24 小时,“租约过期时间阈值” ≥ 实际租期(如租期设为 3 天,阈值至少填 3)
- 避免阈值小于租期:若租期是 5 天而阈值只设 3 天,系统会误删尚未真正过期的租约;若阈值设得过大(如 30 天),Expired 记录会长期滞留
- 确认数据库压缩定期执行:DHCP.mdb 文件长期不压缩会导致查询变慢、清理延迟,建议每月用
esentutl /d dhcp.mdb压缩一次
识别并处理“僵尸 Active”租约
有些租约明明已过期,却仍被标记为 Active —— 这类是典型“幽灵租约”,常见于设备异常断电、网卡更换或防火墙拦截 DHCP 报文。它们不会被自动清理机制捕获,必须主动筛查:
- 用 PowerShell 找出超期未通信的租约:
Get-DhcpServerv4Lease -ComputerName "DHCP-SRV" | Where-Object { $_.LeaseExpiryTime -lt (Get-Date).AddDays(-7) -and $_.AddressState -eq "Active" } - 导出后人工核验设备是否存在,再执行
Remove-DhcpServerv4Lease删除 - 可配合 MAC 地址前缀或客户端 ID 筛选,例如排除已知 IoT 设备(租期长),聚焦办公终端异常记录
客户端侧的释放行为不可控,但可引导
Windows 客户端本身不主动释放地址,除非执行 ipconfig /release 或关机前触发优雅释放(非强制)。因此不能依赖客户端行为来腾出地址:
- 笔记本休眠/快速启动模式下,DHCPRELEASE 很可能未发出,下次唤醒仍尝试用原 IP,易引发冲突
- 建议在组策略中配置“关闭快速启动”,并在登录脚本加入
ipconfig /renew强制刷新,避免旧租约残留 - 对无管理能力的终端(如打印机、摄像头),应设较长租期(如 7 天)并配 DHCP 保留,减少续租失败失联风险











