温馨提示×

如何排查DHCP故障

小樊
41
2026-08-11 12:20:49
栏目: 编程语言

排查DHCP(动态主机配置协议)故障通常遵循一个由物理层到应用层的排查逻辑。以下是系统化的排查步骤和常见故障点:


第一阶段:物理链路与基础连接(最基础但最容易被忽视)

在怀疑DHCP协议之前,先确认设备能不能通信。

  1. 检查物理连接
    • 网线/光纤:确保网线已插好,端口指示灯(Link Light)是否亮起或闪烁。
    • Wi-Fi:确认设备是否已连接到正确的SSID,信号强度是否足够。
  2. 检查交换机/路由器状态
    • 确认上游交换机或路由器的端口是否处于 Up 状态。
    • 检查是否有环路或广播风暴导致网络瘫痪。

第二阶段:客户端排查(确认是谁的问题)

首先判断是单个设备有问题,还是所有设备都有问题。

1. 检查客户端IP配置

  • Windows:
    • 打开CMD,输入 ipconfig /all
    • 查看是否获取到了IP。如果IP是 169.254.x.x (APIPA地址),说明DHCP请求完全失败。
    • 查看“DHCP服务器”一栏,确认显示的服务器IP是否是预期的DHCP服务器。
  • Linux/macOS:
    • 使用 ifconfigip addr 查看IP。
    • 使用 cat /var/lib/dhcp/dhclient.leases (路径可能不同) 查看租约信息。

2. 尝试释放和续约

  • Windows: ipconfig /release -> ipconfig /renew
  • Linux: dhclient -r (释放) -> dhclient (获取)
  • 观察过程:如果卡在 DHCPREQUEST 或者一直显示 正在获取IP,说明客户端发出了请求但没收到回复。

3. 检查客户端防火墙/网卡驱动

  • 临时关闭客户端防火墙,看是否拦截了DHCP流量(虽然少见,但有可能)。
  • 检查网卡驱动是否过旧或损坏。

第三阶段:网络层排查(VLAN与中继)

如果客户端没问题,问题通常出在网络设备上。

1. 检查VLAN配置(非常常见)

  • 确认客户端所在的接入端口VLAN配置是否正确。
  • 场景:如果客户端在VLAN 10,但DHCP服务器在VLAN 20,或者接入端口被错误地划分到了没有DHCP服务的VLAN,客户端将无法获取IP。

2. 检查DHCP中继(DHCP Relay / IP Helper)

如果DHCP服务器和客户端不在同一个网段,必须在中间的三层交换机或路由器上配置DHCP中继。

  • 命令检查(以Cisco为例):
    show run interface vlan 10
    # 查看是否有 ip helper-address <DHCP服务器IP>
    
  • 常见错误:配置了错误的DHCP服务器IP,或者忘记在VLAN接口下配置中继。

3. 检查ACL(访问控制列表)

  • 检查交换机或路由器上是否有ACL(访问控制列表)阻止了UDP端口 67(服务器)和 68(客户端)的流量。

第四阶段:服务器端排查(DHCP服务本身)

如果网络连通性没问题,问题出在服务器上。

1. 服务状态

  • Windows Server: 打开“服务”(services.msc),检查 DHCP Server 服务是否正在运行。
  • Linux (ISC DHCP): 检查 systemctl status isc-dhcp-serverservice isc-dhcp-server status

2. 地址池(Scope)耗尽

这是最常见的故障原因。

  • 现象:老设备能上网,新设备无法获取IP。
  • 排查:登录DHCP服务器,查看地址池的利用率。如果显示100%或剩余为0,说明IP被耗尽了。
  • 解决:缩小租期(Lease Time),或者扩大地址池范围。

3. 作用域未激活或配置错误

  • 检查DHCP作用域(Scope)是否处于**激活(Active)**状态。
  • 检查子网掩码(Subnet Mask)和网关(Router Option 003)配置是否正确。
  • 检查排除范围(Exclusion Range)是否设置过大,导致可用IP太少。

4. IP冲突

  • 如果客户端获取到IP但无法上网,可能是IP冲突。
  • 检查DHCP服务器是否启用了“冲突检测尝试(Conflict Detection Attempts)”。
  • 检查网络中是否有设备手动配置了静态IP,且该IP正好在DHCP地址池范围内。

第五阶段:抓包分析(终极手段)

如果以上都看不出问题,需要使用抓包工具(如Wireshark)进行深度分析。

  1. 在客户端抓包
    • 过滤条件:bootpudp.port == 67 or udp.port == 68
    • 正常流程:Discover -> Offer -> Request -> ACK。
    • 故障判断
      • 只有 Discover 没有 Offer:服务器没收到请求,或者服务器没响应(网络阻断或服务器故障)。
      • Offer 但没有 ACK:服务器拒绝了请求(可能是服务器认为该IP已分配或冲突)。
  2. 在服务器抓包
    • 确认是否收到了客户端的 Discover 包。
    • 如果没收到,说明包在网络中丢失(路由/VLAN问题)。

快速排查流程图(总结)

步骤 检查点 命令/操作
1. 物理层 网线、端口灯、Wi-Fi连接 看指示灯
2. 客户端 IP是否为169.254.x.x ipconfig
3. 单点/全局 是所有设备断网还是一台? 换设备测试
4. 网络层 VLAN、DHCP中继(Helper) show ip helper-address
5. 服务器端 服务状态、地址池是否满 检查DHCP控制台
6. 深度分析 抓包看DHCP握手过程 Wireshark (bootp)

常见故障案例

  • 案例1:新部署的AP下的用户无法获取IP。
    • 原因:交换机连接AP的端口没有配置成Trunk,或者没有放通用户VLAN。
  • 案例2:办公室只有几台电脑无法上网,其他正常。
    • 原因:DHCP地址池耗尽,这几台电脑是最后尝试连接的。
  • 案例3:跨网段无法获取IP。
    • 原因:三层交换机上忘了配置 ip helper-address

0