第342篇:DHCP 网络频繁中断的根因定位
关键词:DHCP、DHCP Relay、IP地址冲突、ARP欺骗、DHCP Snooping、华为AR/S系列
一、案例背景
某大型连锁酒店的集团IT部门接到多地酒店的网络故障报告:客房WiFi频繁断连,客人需要反复断开重连才能恢复网络。故障表现为:
- 部分客房终端获取到的IP地址无法上网
- 同一房间内不同终端有时获取到相同的IP地址
- DHCP服务器日志显示地址池频繁耗尽
- 故障具有随机性,不是所有房间都受影响
网络架构: - 总部:集中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中继架构

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故障排查流程图

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 |
告警时间和原因 |
- DHCP Snooping绑定表丢失(如交换机重启)后,已获取IP的终端会受到什么影响?如何减轻这种影响?
- 在大型网络中,集中式DHCP Server vs 分布式DHCP Relay+本地Server,各有什么优缺点?
- 如果酒店需要使用DHCP Option来分配定制化配置(如DNS、NTP、自定义参数),如何设计Option的分配策略?
下篇预告:第343篇:防火墙策略混乱导致业务访问异常