DHCP 故障排除

DHCP 服务器 · 第 10 篇 · 适用于 Windows Server 2019 / 2022 / 2025

📖 目录

  1. 故障排除思路
  2. 客户端获取不到 IP(169.254.x.x)
  3. 获取到错误的 IP
  4. IP 地址冲突
  5. DHCP 服务无法启动
  6. PowerShell 诊断工具
  7. 常见问题

1. 故障排除思路

DHCP 故障排除遵循从底向上的原则:物理层 → 网络层 → 应用层。

检查项命令/方法关注点
DHCP 服务状态Get-Service DHCPServer是否 Running
作用域状态DHCP 管理器是否激活(绿色)
地址池余量Get-DhcpServerv4ScopeStatistics%InUse 是否接近 100%
客户端租约ipconfig /allDHCP 是否启用
防火墙Get-NetFirewallRuleUDP 67/68 是否放行
事件日志事件查看器 → DHCP-Server错误和警告

2. 客户端获取不到 IP(169.254.x.x)

169.254.x.x 是 Windows 的 APIPA 地址,表示 DHCP 获取失败。

排查步骤

1

在客户端运行 ipconfig /release 然后 ipconfig /renew

2

检查网线/无线连接是否正常

3

在 DHCP 服务器上检查服务是否运行:服务器管理器 → 角色 → DHCP

4

检查作用域是否激活(绿色图标)

5

检查地址池是否有余量:展开作用域 → 地址池

6

如果跨网段,检查中继代理配置

7

检查服务器防火墙是否放行 UDP 67/68

PowerShell - 诊断无 IP
# 1. 检查 DHCP 服务状态
Get-Service DHCPServer

# 2. 检查作用域状态
Get-DhcpServerv4Scope -ComputerName "dc1.iehang.cn" |
  Select-Object ScopeId, Name, State, @{N="Free";E={$_.Free -as [int]}}, @{N="Total";E={$_.AddressesTotal -as [int]}}, @{N="Usage%";E={if($_.AddressesTotal -gt 0){[Math]::Round(($_.AddressesInUse/$_.AddressesTotal)*100,1)}else{0}}}

# 3. 检查租约数量
(Get-DhcpServerv4Lease -ComputerName "dc1.iehang.cn" -ScopeId 192.168.10.0).Count

3. 获取到错误的 IP

客户端获取到的 IP 不在预期网段,可能原因:

PowerShell - 检测 Rogue DHCP
# 查看授权的 DHCP 服务器
Get-DhcpServerInDC

# 查看 DHCP 事件日志中的警告
Get-WinEvent -LogName "Dhcp-Server-Operational" -MaxEvents 20 |
  Where-Object {$_.LevelDisplayName -eq "Warning"} |
  Format-Table TimeCreated, Id, Message -Wrap

4. IP 地址冲突

DHCP 服务器在分配地址前会检测冲突,但仍可能出现冲突:

PowerShell - 冲突检测
# 查看 DHCP 事件日志中的冲突记录
Get-WinEvent -FilterHashtable @{LogName="Dhcp-Server-Operational"; ID=15} -MaxEvents 10 |
  Format-Table TimeCreated, Message -Wrap

# 查看所有冲突的 IP 和 MAC
Get-DhcpServerv4AuditLog -ComputerName "dc1.iehang.cn" | Where-Object {$_.EventID -eq 15}

5. DHCP 服务无法启动

1

打开服务管理器(services.msc)→ 找到 DHCP Server

2

检查启动类型是否为「自动」

3

查看事件查看器 → Windows 日志 → 系统,筛选 DHCP 相关错误

PowerShell - 服务诊断
# 尝试启动服务
Start-Service DHCPServer

# 查看详细错误
Get-WinEvent -LogName "System" -MaxEvents 20 |
  Where-Object {$_.ProviderName -match "DhcpServer"} |
  Format-Table TimeCreated, Id, LevelDisplayName, Message -Wrap

# 检查服务启动类型
Get-Service DHCPServer | Select-Object Name, Status, StartType

6. PowerShell 诊断工具箱

PowerShell - 综合诊断脚本
# DHCP 综合诊断
Write-Host "=== DHCP 诊断报告 ===" -ForegroundColor Cyan

# 服务状态
$svc = Get-Service DHCPServer
Write-Host "服务状态: $($svc.Status)"

# 作用域统计
Get-DhcpServerv4ScopeStatistics -ComputerName "dc1.iehang.cn" |
  Format-Table ScopeId, @{N="Usage%";E={[Math]::Round(($_.PercentageInUse),1)}}

# 检查租约分布
Get-DhcpServerv4Lease -ComputerName "dc1.iehang.cn" -ScopeId 192.168.10.0 |
  Sort-Object IPAddress |
  Format-Table IPAddress, ClientId, LeaseExpiryTime -AutoSize

7. 常见问题

Q1:ipconfig /renew 报错"找不到媒体"?

网卡未连接。检查网线、交换机端口指示灯。无线网络确认已连接 Wi-Fi。

Q2:DHCP 管理器打不开?

以管理员身份运行。检查 DHCP 服务是否运行。重建 DHCP 数据库:netsh dhcp server delete database 后重启服务。

Q3:数据库损坏怎么办?

停止 DHCP 服务 → 备份 %windir%\System32\dhcp\dhcp.mdb → 使用 jetpack 工具修复数据库。