第342篇:DHCP 网络频繁中断的根因定位

关键词:DHCP、DHCP Relay、IP地址冲突、ARP欺骗、DHCP Snooping、华为AR/S系列


一、案例背景

某大型连锁酒店的集团IT部门接到多地酒店的网络故障报告:客房WiFi频繁断连,客人需要反复断开重连才能恢复网络。故障表现为:

  1. 部分客房终端获取到的IP地址无法上网
  2. 同一房间内不同终端有时获取到相同的IP地址
  3. DHCP服务器日志显示地址池频繁耗尽
  4. 故障具有随机性,不是所有房间都受影响

网络架构: - 总部:集中DHCP服务器(华为USG6000E内置DHCP Server) - 各酒店:接入交换机(S5735)+ 无线AP(AirEngine 8760) - 连接方式:总部与酒店之间通过MPLS VPN互联 - DHCP模式:DHCP Relay(中继)

影响范围:全国35家酒店中28家出现不同程度的故障,约60%的客房WiFi受影响。

二、需求分析与方案设计

2.1 DHCP故障分类

故障类型 现象 排查方向
DHCP Server异常 所有终端无法获取IP 服务器状态、地址池容量
DHCP Relay异常 特定子网终端无法获取IP 中继配置、下一跳可达性
IP地址冲突 终端获取IP后无法通信 DHCP Snooping、非法DHCP Server
ARP欺骗 获取IP后间歇性断网 ARP检测、安全策略
地址池耗尽 新增终端无法获取IP 地址池规划、租期优化
Lease续约失败 使用一段时间后断网 DHCP Server可达性、Relay配置

2.2 DHCP中继架构

DHCP中继架构 - 图示

2.3 排查思路

排查思路 - 图示

三、技术细节与实施过程

3.1 第一阶段:DHCP Server状态检查

# 检查DHCP Server地址池状态
<USG6000E> display dhcp server pool all
Total Pools: 35

# 酒店A的地址池
Pool Name: HOTEL-A-GUEST
  Network: 10.10.1.0/24
  Start IP: 10.10.1.100
  End IP: 10.10.1.250
  Assigned: 152              <-- 152/151个地址被分配,超出范围!
  Free: -1                   <-- 地址池已耗尽
  Conflict IP: 23            <-- 23个冲突IP
  Lease Time: 24 hours

# 问题1:地址池分配的IP数超过可用范围(152>151)
# 问题2:23个IP地址存在冲突

3.2 第二阶段:DHCP Relay配置检查

# 酒店A接入交换机检查Relay配置
<S5735-Hotel-A> display dhcp relay
DHCP Relay Information:
  Interface          Server IP        Relay Agent IP
  Vlanif 100         10.0.0.1         10.10.1.1     <-- Relay指向总部DHCP Server

# 检查Relay Agent Option 82
<S5735-Hotel-A> display current-configuration interface Vlanif 100
# dhcp select relay
# dhcp relay server-ip 10.0.0.1
# dhcp relay information enable    <-- Option 82已启用
# dhcp relay information circuit-id "HOTEL-A-VLAN100"

# 检查Relay Server可达性
<S5735-Hotel-A> ping -a 10.10.1.1 10.0.0.1
PING 10.0.0.1: 56 data bytes
Reply from 10.0.0.1: bytes=56 Sequence=1 ttl=58 time=35 ms
# 可达性正常

3.3 第三阶段:非法DHCP Server检测

# 检查是否有非法DHCP Server响应
<S5735-Hotel-A> display dhcp snooping binding
DHCP Snooping Binding Table:
  MAC Address       IP Address     Lease Time    Type    Interface    VLAN
  00:11:22:33:44:55 10.10.1.101    23:45:30      normal  GE1/0/1      100
  00:11:22:33:44:66 10.10.1.102    23:40:15      normal  GE1/0/2      100
  # 正常绑定表

# 但DHCP Snooping未启用!
<S5735-Hotel-A> display current-configuration | include dhcp snooping
# 没有DHCP Snooping配置

根因确认: 1. 地址池规划不足:地址池范围100-250(151个地址),但实际分配的IP数超过151个,说明有IP地址被重复分配。 2. DHCP Snooping未启用:部分客房客人私自接入无线路由器,这些无线路由器内置DHCP Server,导致IP地址冲突。 3. 租期过长:24小时租期导致地址回收缓慢,地址池利用率过高。

3.4 故障时间线还原

故障时间线还原 - 图示

四、实战配置/案例分析

4.1 DHCP Snooping配置

# 全局启用DHCP Snooping
<S5735-Hotel-A> system-view
[S5735-Hotel-A] dhcp enable
[S5735-Hotel-A] dhcp snooping enable

# 配置信任端口(上联端口)
[S5735-Hotel-A] interface GigabitEthernet 1/0/48
[S5735-Hotel-A-GigabitEthernet1/0/48] dhcp snooping trusted
[S5735-Hotel-A-GigabitEthernet1/0/48] quit

# 配置VLAN启用DHCP Snooping
[S5735-Hotel-A] dhcp snooping vlan 100
[S5735-Hotel-A] dhcp snooping binding max-count 200  # 每VLAN最大绑定数

# 启用IP Source Guard(防止IP欺骗)
[S5735-Hotel-A] interface GigabitEthernet 1/0/1
[S5735-Hotel-A-GigabitEthernet1/0/1] ip source check user-bind enable
[S5735-Hotel-A-GigabitEthernet1/0/1] quit

# 启用DAI(动态ARP检测)
[S5735-Hotel-A] arp anti-attack check user-defined enable
[S5735-Hotel-A] interface GigabitEthernet 1/0/1
[S5735-Hotel-A-GigabitEthernet1/0/1] arp anti-attack check user-defined enable
[S5735-Hotel-A-GigabitEthernet1/0/1] quit

4.2 DHCP地址池优化

# 优化地址池配置(总部DHCP Server)
<USG6000E> system-view
[USG6000E] dhcp server pool HOTEL-A-GUEST
[USG6000E-dhcp-POOL-HOTEL-A-GUEST] network 10.10.1.0 mask 255.255.255.0
[USG6000E-dhcp-POOL-HOTEL-A-GUEST] gateway-list 10.10.1.1
[USG6000E-dhcp-POOL-HOTEL-A-GUEST] dns-list 8.8.8.8 114.114.114.114
[USG6000E-dhcp-POOL-HOTEL-A-GUEST] lease day 1 hour 4  # 租期改为4小时
[USG6000E-dhcp-POOL-HOTEL-A-GUEST] expired day 1       # 最大租期1天
[USG6000E-dhcp-POOL-HOTEL-A-GUEST] quit

# 扩展地址池范围(如果地址不足)
[USG6000E] dhcp server pool HOTEL-A-GUEST-EXT
[USG6000E-dhcp-POOL-HOTEL-A-GUEST-EXT] network 10.10.2.0 mask 255.255.255.0
[USG6000E-dhcp-POOL-HOTEL-A-GUEST-EXT] gateway-list 10.10.2.1
[USG6000E-dhcp-POOL-HOTEL-A-GUEST-EXT] dns-list 8.8.8.8 114.114.114.114
[USG6000E-dhcp-POOL-HOTEL-A-GUEST-EXT] lease day 1 hour 4
[USG6000E-dhcp-POOL-HOTEL-A-GUEST-EXT] expired day 1
[USG6000E-dhcp-POOL-HOTEL-A-GUEST-EXT] quit

4.3 批量部署脚本

# dhcp_snooping_deploy.py - 批量生成DHCP Snooping配置
hotels = [
    {"name": "HOTEL-A", "vlan": 100, "uplink": "GE1/0/48"},
    {"name": "HOTEL-B", "vlan": 200, "uplink": "GE1/0/48"},
    # ... 更多酒店
]

for hotel in hotels:
    config = f"""
# {hotel['name']} DHCP Snooping配置
dhcp enable
dhcp snooping enable
dhcp snooping vlan {hotel['vlan']}
dhcp snooping binding max-count 200

interface {hotel['uplink']}
 dhcp snooping trusted
quit

# 对所有下联接口启用IP Source Guard
# (需要根据实际接口列表生成)
"""
    with open(f"{hotel['name']}_dhcp_snooping.cfg", "w") as f:
        f.write(config)
    print(f"Generated config for {hotel['name']}")

4.4 优化效果

指标 优化前 优化后 改善
IP地址冲突数 23/酒店 0/酒店 消除
地址池利用率 152/151(溢出) 120/251 合理
DHCP获取成功率 65% 99.5% 大幅提升
WiFi断连投诉 每日20+ 每日0-1 基本消除

4.5 DHCP排障命令速查表

排查步骤 命令 关注点
DHCP Server状态 display dhcp server pool all 地址池容量、已分配数、冲突IP
DHCP Snooping绑定 display dhcp snooping binding 绑定表是否完整、是否有异常条目
DHCP Relay配置 display dhcp relay Relay指向的Server IP、Option 82
DHCP统计信息 display dhcp statistics 各种报文类型的收发计数
非法DHCP Server检测 display dhcp snooping blocked 被阻断的非法DHCP Server MAC
ARP表项 display arp all IP-MAC映射是否正确
接口DHCP配置 display current-configuration interface [IF] Snooping信任、IP Source Guard

4.6 DHCP故障排查流程图

DHCP故障排查流程图 - 图示

4.7 DHCP监控告警配置

# 配置DHCP地址池利用率告警
# 当地址池利用率超过80%时触发告警

[USG6000E] dhcp server pool HOTEL-A-GUEST
[USG6000E-dhcp-POOL-HOTEL-A-GUEST] alarm threshold 80
[USG6000E-dhcp-POOL-HOTEL-A-GUEST] alarm notify email admin@company.com
[USG6000E-dhcp-POOL-HOTEL-A-GUEST] quit

# 配置DHCP Snooping异常告警
[S5735-Hotel-A] info-center enable
[S5735-Hotel-A] info-center source dhcp snooping channel 1
[S5735-Hotel-A] info-center loghost 10.0.0.100

# 配置DHCP Server冲突检测告警
[S5735-Hotel-A] dhcp snooping enable
[S5735-Hotel-A] dhcp snooping information enable
[S5735-Hotel-A] dhcp snooping trusted-port alarm enable

五、经验总结

序号 经验类别 经验内容 适用场景
1 安全设计 DHCP Snooping必须启用,防止非法DHCP Server 所有接入网
2 地址规划 地址池容量按峰值终端数的150%规划 DHCP规划
3 租期优化 短时使用的场景(如酒店)租期不宜过长,建议1-4小时 临时接入
4 Option 82 DHCP Relay必须启用Option 82,标识终端位置 DHCP Relay
5 IP Source Guard 启用IP Source Guard防止IP地址欺骗 接入安全
6 DAI 动态ARP检测防止ARP欺骗攻击 网络安全
7 监控告警 DHCP地址池利用率必须纳入监控,超过80%告警 运维监控
8 批量部署 多站点配置使用脚本批量生成,减少人为失误 运维效率
9 用户教育 酒店等场景需告知客人不要私接路由器 用户管理
10 排错方法 DHCP故障排查遵循"Server→Relay→Snooping→终端"顺序 故障排查

思考

附录:DHCP Snooping完整配置模板

# ========== DHCP Snooping完整配置 ==========

# Step 1: 全局启用DHCP和DHCP Snooping
[Huawei] dhcp enable
[Huawei] dhcp snooping enable

# Step 2: 全局配置DHCP Snooping参数
[Huawei] dhcp snooping valid-time check disable   # 关闭租期检查(兼容模式)
[Huawei] dhcp snooping binding max-count 500      # 全局最大绑定数

# Step 3: 配置VLAN启用DHCP Snooping
[Huawei] dhcp snooping vlan 100 200 300

# Step 4: 配置信任端口(上联端口信任)
[Huawei] interface GigabitEthernet 1/0/47
[Huawei-GigabitEthernet1/0/47] port link-type trunk
[Huawei-GigabitEthernet1/0/47] port trunk allow-pass vlan 100 200 300
[Huawei-GigabitEthernet1/0/47] dhcp snooping trusted
[Huawei-GigabitEthernet1/0/47] quit

[Huawei] interface GigabitEthernet 1/0/48
[Huawei-GigabitEthernet1/0/48] port link-type trunk
[Huawei-GigabitEthernet1/0/48] port trunk allow-pass vlan 100 200 300
[Huawei-GigabitEthernet1/0/48] dhcp snooping trusted
[Huawei-GigabitEthernet1/0/48] quit

# Step 5: 配置不信任端口(下联端口)
[Huawei] interface GigabitEthernet 1/0/1
[Huawei-GigabitEthernet1/0/1] port link-type access
[Huawei-GigabitEthernet1/0/1] port default vlan 100
[Huawei-GigabitEthernet1/0/1] dhcp snooping limit rate 5   # 限速:每秒5个DHCP报文
[Huawei-GigabitEthernet1/0/1] quit

# Step 6: 配置Option 82(标识终端位置)
[Huawei] dhcp snooping user-bind maximum 500               # 用户绑定表最大条目
[Huawei] interface Vlanif 100
[Huawei-Vlanif100] dhcp relay information enable
[Huawei-Vlanif100] dhcp relay information circuit-id "HOTEL-A-F3"
[Huawei-Vlanif100] dhcp relay information remote-id "SW-HOTEL-A"
[Huawei-Vlanif100] quit

# Step 7: 配置IP Source Guard(防止IP欺骗)
[Huawei] interface GigabitEthernet 1/0/1
[Huawei-GigabitEthernet1/0/1] ip source check user-bind enable
[Huawei-GigabitEthernet1/0/1] quit

# Step 8: 配置DAI(动态ARP检测)
[Huawei] arp anti-attack check user-defined enable
[Huawei] interface GigabitEthernet 1/0/1
[Huawei-GigabitEthernet1/0/1] arp anti-attack check user-defined enable
[Huawei-GigabitEthernet1/0/1] quit

# Step 9: 配置绑定表Flash备份
[Huawei] dhcp snooping binding save flash

# 验证命令
display dhcp snooping binding           # 查看DHCP Snooping绑定表
display dhcp snooping statistics        # 查看DHCP Snooping统计
display dhcp snooping trusted-port      # 查看信任端口列表

附录:DHCP风暴防护方案

DHCP风暴通常由广播风暴、非法DHCP服务器或配置错误引起,以下为分级防护方案:

防护级别 防护措施 配置要点 效果
接入层限速 端口DHCP报文限速 dhcp snooping limit rate 5 单端口最多5个DHCP报文/秒
VLAN级限制 VLAN最大绑定数限制 dhcp snooping binding max-count 200 超限时丢弃新请求
信任端口管控 仅上联端口信任 仅trunk口配置trusted 非法DHCP报文被丢弃
风暴抑制 广播风暴抑制 storm-control broadcast suppressed-threshold 20 超过阈值丢弃广播
DAI检测 动态ARP检测 arp anti-attack check user-defined enable 非法ARP被丢弃
IP Source Guard IP源地址检查 ip source check user-bind enable 未绑定IP的报文被丢弃
# DHCP报文限速(按端口)
[Huawei] interface GigabitEthernet 1/0/1
[Huawei-GigabitEthernet1/0/1] dhcp snooping limit rate 5
[Huawei-GigabitEthernet1/0/1] quit

# 广播风暴抑制(按端口)
[Huawei] interface GigabitEthernet 1/0/1
[Huawei-GigabitEthernet1/0/1] storm-control broadcast suppressed-threshold 20
[Huawei-GigabitEthernet1/0/1] storm-control broadcast enabled
[Huawei-GigabitEthernet1/0/1] quit

# 非法DHCP Server阻断告警
[Huawei] dhcp snooping enable
[Huawei] info-center enable
[Huawei] info-center source dhcp channel 1
[Huawei] info-center loghost 10.0.0.100

附录:DHCP排错命令速查表(扩展版)

排查项 命令 关键字段
DHCP Server地址池 display dhcp server pool all Assigned/Free/Conflict IP
DHCP Snooping绑定表 display dhcp snooping binding MAC/IP/VLAN/Interface/Lease
DHCP Relay配置 display dhcp relay Server IP/Circuit-ID/Remote-ID
DHCP报文统计 display dhcp statistics Discover/Offer/Request/ACK计数
非法DHCP Server display dhcp snooping blocked Blocked MAC/Interface/Time
DHCP全局配置 display current-configuration \| include dhcp 全局参数
Option 82信息 display dhcp relay information Circuit-ID/Remote-ID
租期信息 display dhcp server pool [name] Lease/Expired时间
接口DHCP状态 display current-configuration interface [IF] Snooping/Trusted/Relay
DHCP告警日志 display logbuffer \| include dhcp 告警时间和原因
  1. DHCP Snooping绑定表丢失(如交换机重启)后,已获取IP的终端会受到什么影响?如何减轻这种影响?
  2. 在大型网络中,集中式DHCP Server vs 分布式DHCP Relay+本地Server,各有什么优缺点?
  3. 如果酒店需要使用DHCP Option来分配定制化配置(如DNS、NTP、自定义参数),如何设计Option的分配策略?

下篇预告:第343篇:防火墙策略混乱导致业务访问异常