第47篇:DHCP 中继:跨网段分配 IP 地址

关键词:DHCP中继、Relay Agent、giaddr、Option 82、跨网段、华为配置、IP地址分配


一、引言

在上一篇中,我们详细学习了 DHCP 的 DORA 四步交互过程。但 DHCP 有一个关键限制:Discover 报文是广播包(目的地址 255.255.255.255),广播包无法跨越路由器(三层边界)。这意味着 DHCP 服务器必须与客户端在同一个广播域(同一个 VLAN)内才能正常工作。

在企业网络中,通常将 DHCP 服务器集中部署在核心层或数据中心,而客户端分布在不同的 VLAN 中。DHCP 中继(DHCP Relay Agent)就是为了解决跨网段 DHCP 地址分配问题而设计的。

二、核心概念

2.1 DHCP 中继的作用

场景 无中继 有中继
DHCP 服务器与客户端同网段 广播可达,正常工作 不需要中继
DHCP 服务器与客户端不同网段 广播被路由器阻断,无法工作 中继将广播转为单播转发
集中化管理 每个 VLAN 需部署一台 DHCP 服务器 只需一台集中 DHCP 服务器

2.2 DHCP 中继工作原理

DHCP 中继部署在客户端所在网段的三层接口(通常是 VLANIF 接口)上。当客户端发送 DHCP 广播报文时,中继设备截获该报文,将其封装为单播报文,发送到指定的 DHCP 服务器。

核心机制: 1. 中继将 DHCP 报文的源地址改为中继接口 IP 2. 中继将 giaddr(Gateway IP Address)字段填入中继接口 IP 3. 中继将报文以单播方式发送到 DHCP 服务器(目的地址为服务器 IP) 4. DHCP 服务器根据 giaddr 判断客户端所属网段,从对应地址池分配 IP 5. 服务器的回复报文单播给中继接口,再由中继转发给客户端

2.3 Option 82(Relay Agent Information Option)

Option 82 是 DHCP 中继在转发报文时插入的额外信息,用于帮助 DHCP 服务器精确识别客户端的位置。

Option 82 子选项 说明
Circuit ID 标识客户端接入的物理端口(如 GigabitEthernet0/0/1)
Remote ID 标识客户端接入的设备(如交换机 MAC 地址或名称)

作用:通过 Option 82,DHCP 服务器可以根据客户端接入的交换机和端口,分配不同网段的 IP 地址或不同策略,实现精细化的地址分配。

三、技术细节

3.1 DHCP 中继基本配置

# 场景拓扑:
# 客户端(VLAN 10, 192.168.10.0/24)→ 接入交换机 → 核心交换机(中继)→ 核心路由器(DHCP服务器)
#
# 核心交换机 VLANIF 10 接口 IP: 192.168.10.1
# DHCP 服务器 IP: 10.0.0.100

# Step 1: 在核心交换机上启用 DHCP 中继
[HUAWEI] dhcp enable

# Step 2: 在 VLANIF 接口上配置 DHCP 中继
[HUAWEI] interface Vlanif10
[HUAWEI-Vlanif10] ip address 192.168.10.1 24
[HUAWEI-Vlanif10] dhcp select relay
[HUAWEI-Vlanif10] dhcp relay server-ip 10.0.0.100

# Step 3: 在 DHCP 服务器上配置对应地址池
# (DHCP 服务器根据 giaddr = 192.168.10.1 来匹配地址池)
[SERVER] ip pool VLAN10_POOL
[SERVER-ip-pool-VLAN10_POOL] network 192.168.10.0 mask 24
[SERVER-ip-pool-VLAN10_POOL] gateway-list 192.168.10.1
[SERVER-ip-pool-VLAN10_POOL] dns-list 114.114.114.114

3.2 DHCP 服务器如何处理 giaddr

当 DHCP 服务器收到中继转发的 Discover 报文时:

  1. 检查 giaddr 字段
  2. 如果 giaddr 非零,说明报文经过中继,服务器根据 giaddr 确定客户端网段
  3. 在地址池中查找与 giaddr 网段匹配的池
  4. 从匹配的池中分配 IP 地址
  5. 将分配的 IP 写入 Offer 报文的 yiaddr 字段
  6. 将 Offer 单播发送给 giaddr(中继接口 IP)
# DHCP 服务器配置示例(华为设备作为 DHCP 服务器)
[HUAWEI] ip pool RELAY_VLAN10
[HUAWEI-ip-pool-RELAY_VLAN10] network 192.168.10.0 mask 24
[HUAWEI-ip-pool-RELAY_VLAN10] gateway-list 192.168.10.1

# 如果 giaddr 是 192.168.10.1,服务器自动匹配此地址池
# 因为 192.168.10.1 属于 192.168.10.0/24 网段

3.3 多 VLAN 中继配置

# 场景:核心交换机连接多个 VLAN,统一由 10.0.0.100 的 DHCP 服务器分配 IP

[HUAWEI] dhcp enable

# VLAN 10: 192.168.10.0/24
[HUAWEI] interface Vlanif10
[HUAWEI-Vlanif10] ip address 192.168.10.1 24
[HUAWEI-Vlanif10] dhcp select relay
[HUAWEI-Vlanif10] dhcp relay server-ip 10.0.0.100

# VLAN 20: 192.168.20.0/24
[HUAWEI] interface Vlanif20
[HUAWEI-Vlanif20] ip address 192.168.20.1 24
[HUAWEI-Vlanif20] dhcp select relay
[HUAWEI-Vlanif20] dhcp relay server-ip 10.0.0.100

# VLAN 30: 192.168.30.0/24
[HUAWEI] interface Vlanif30
[HUAWEI-Vlanif30] ip address 192.168.30.1 24
[HUAWEI-Vlanif30] dhcp select relay
[HUAWEI-Vlanif30] dhcp relay server-ip 10.0.0.100

# DHCP 服务器需要为每个网段配置地址池
[SERVER] ip pool VLAN10_POOL
[SERVER-ip-pool-VLAN10_POOL] network 192.168.10.0 mask 24
[SERVER-ip-pool-VLAN10_POOL] gateway-list 192.168.10.1

[SERVER] ip pool VLAN20_POOL
[SERVER-ip-pool-VLAN20_POOL] network 192.168.20.0 mask 24
[SERVER-ip-pool-VLAN20_POOL] gateway-list 192.168.20.1

[SERVER] ip pool VLAN30_POOL
[SERVER-ip-pool-VLAN30_POOL] network 192.168.30.0 mask 24
[SERVER-ip-pool-VLAN30_POOL] gateway-list 192.168.30.1

3.4 DHCP 中继配置 Option 82

# 在 DHCP 中继上配置 Option 82

# Step 1: 使能中继对 Option 82 的解析并插入
[HUAWEI] interface Vlanif10
[HUAWEI-Vlanif10] dhcp relay information enable     # 使能中继支持 Option 82
[HUAWEI-Vlanif10] dhcp relay information strategy replace    # 插入(替换)Option 82,缺省即为 replace
# 处理策略:replace = 无则插入、有则替换;keep = 保留原有;drop = 删除
# (命令是 dhcp relay information strategy,关键字为 replace/keep/drop,没有
#   dhcp relay information insert/replace 的独立形式;部分产品线另有
#   dhcp option82 insert enable / rebuild enable,以设备版本手册为准)
# 如需自定义 Circuit ID / Remote ID 的内容格式,使用
# dhcp option82 circuit-id / remote-id 相关配置命令,具体语法以设备版本手册为准

# Step 2: DHCP 服务器根据 Option 82 做精细化分配
# 华为 DHCP 服务器支持基于 Option 82 的策略
[SERVER] ip pool VLAN10_POOL
[SERVER-ip-pool-VLAN10_POOL] network 192.168.10.0 mask 24
[SERVER-ip-pool-VLAN10_POOL] gateway-list 192.168.10.1
[SERVER-ip-pool-VLAN10_POOL] dns-list 114.114.114.114

# Step 3: 验证 Option 82
<HUAWEI> display dhcp relay statistics

3.5 中继指向多个 DHCP 服务器(冗余与负载分担)

# 场景:配置两台 DHCP 服务器,提高可用性

# DHCP 服务器 1: 10.0.0.100
# DHCP 服务器 2: 10.0.0.101

[HUAWEI] interface Vlanif10
[HUAWEI-Vlanif10] dhcp select relay
[HUAWEI-Vlanif10] dhcp relay server-ip 10.0.0.100
[HUAWEI-Vlanif10] dhcp relay server-ip 10.0.0.101
# dhcp relay server-ip 没有 priority 参数:多台服务器重复执行该命令追加即可

说明:中继转发 DHCP Discover 时不检测服务器状态——缺省向所有配置的服务器转发(每次调整转发顺序以均衡各服务器地址池的使用),客户端采用最先收到的 Offer。因此不存在"主服务器优先、不可达时切换到备服务器"的机制;多服务器主要提供冗余与负载分担。若希望每次只向一台服务器转发(轮询),部分版本支持 ip relay address cycle 命令,以设备版本手册为准。

3.6 DHCP 中继 vs DHCP 服务器在同一台设备上

# 场景:核心交换机既是 DHCP 中继(为其他 VLAN),又是 DHCP 服务器(为本 VLAN)

# VLAN 10 使用本地 DHCP 服务器
[HUAWEI] ip pool LOCAL_VLAN10
[HUAWEI-ip-pool-LOCAL_VLAN10] network 192.168.10.0 mask 24
[HUAWEI-ip-pool-LOCAL_VLAN10] gateway-list 192.168.10.1
[HUAWEI] interface Vlanif10
[HUAWEI-Vlanif10] dhcp select global

# VLAN 20 使用中继指向远端 DHCP 服务器
[HUAWEI] interface Vlanif20
[HUAWEI-Vlanif20] dhcp select relay
[HUAWEI-Vlanif20] dhcp relay server-ip 10.0.0.100

四、实战配置/案例分析

4.1 案例一:DHCP 中继跨三层交换机完整方案

背景:某园区网络结构如下: - 接入层:多台 S5735 交换机,每个楼层一个 VLAN - 汇聚层:S6730 交换机,配置 DHCP 中继 - 核心层:AR 路由器,运行 DHCP 服务器

# ===== 汇聚层 S6730(DHCP 中继)配置 =====

# 启用 DHCP
[S6730] dhcp enable

# 配置各 VLAN 的 DHCP 中继
[S6730] interface Vlanif10
[S6730-Vlanif10] ip address 192.168.10.254 24
[S6730-Vlanif10] dhcp select relay
[S6730-Vlanif10] dhcp relay server-ip 10.1.1.100
[S6730-Vlanif10] dhcp relay information enable

[S6730] interface Vlanif20
[S6730-Vlanif20] ip address 192.168.20.254 24
[S6730-Vlanif20] dhcp select relay
[S6730-Vlanif20] dhcp relay server-ip 10.1.1.100
[S6730-Vlanif20] dhcp relay information enable

# ===== 核心层 AR(DHCP 服务器)配置 =====

[AR] dhcp enable

[AR] ip pool FLOOR1
[AR-ip-pool-FLOOR1] network 192.168.10.0 mask 24
[AR-ip-pool-FLOOR1] gateway-list 192.168.10.254
[AR-ip-pool-FLOOR1] dns-list 114.114.114.114 8.8.8.8
[AR-ip-pool-FLOOR1] lease day 1
[AR-ip-pool-FLOOR1] excluded-ip-address 192.168.10.1 192.168.10.50

[AR] ip pool FLOOR2
[AR-ip-pool-FLOOR2] network 192.168.20.0 mask 24
[AR-ip-pool-FLOOR2] gateway-list 192.168.20.254
[AR-ip-pool-FLOOR2] dns-list 114.114.114.114 8.8.8.8
[AR-ip-pool-FLOOR2] lease day 1
[AR-ip-pool-FLOOR2] excluded-ip-address 192.168.20.1 192.168.20.50

# ===== 验证 =====
[AR] display dhcp server ip-in-use
[S6730] display dhcp relay statistics

4.2 案例二:DHCP 中继不通故障排查

故障现象:VLAN 20 的客户端无法获取 IP 地址,但 VLAN 10 正常。

# 排查步骤:

# Step 1: 检查 VLAN 20 的 DHCP 中继配置
<HUAWEI> display current-configuration interface Vlanif20
# 确认有 dhcp select relay 和 dhcp relay server-ip

# 可能问题:遗漏了 relay server-ip 配置
# 修复:
[HUAWEI] interface Vlanif20
[HUAWEI-Vlanif20] dhcp relay server-ip 10.0.0.100

# Step 2: 检查中继到 DHCP 服务器的连通性
<HUAWEI> ping 10.0.0.100
# 如果不通,检查路由:display ip routing-table
# 添加指向 DHCP 服务器的路由
[HUAWEI] ip route-static 10.0.0.100 255.255.255.255 10.1.1.1

# Step 3: 检查 DHCP 服务器端是否有对应网段的地址池
<HUAWEI> display ip pool all
# 确认存在 192.168.20.0/24 的地址池

# Step 4: 检查 DHCP 中继统计
<HUAWEI> display dhcp relay statistics
# 关注 "DHCP packets received from clients"(从客户端收到的报文数)
# 关注 "DHCP packets sent to servers"(中继发给服务器的报文数)
# 若 sent to servers 为 0 → 中继未将请求转发给服务器
# (字段以设备实际回显为准;可先 reset dhcp relay statistics 清空计数后复测)

# Step 5: 抓包验证
# 在 VLANIF 20 上抓包,确认是否收到客户端的 Discover
# 在指向 DHCP 服务器的链路上抓包,确认中继是否发送了单播 Discover

4.3 案例三:Option 82 导致 DHCP 分配失败

故障背景:启用 Option 82 后,部分客户端无法获取 IP。

# 根因分析:
# 某些老旧 DHCP 服务器不支持 Option 82
# 当发现报文携带 Option 82 时,直接丢弃或回复 NAK

# 解决方案1:DHCP 服务器启用 Option 82 支持
# (在 DHCP 服务器端配置)

# 解决方案2:中继剥离 Option 82 后再转发(对症)
[HUAWEI] interface Vlanif10
[HUAWEI-Vlanif10] dhcp relay information strategy drop
# drop:删除报文中已有的 Option 82 后转发,服务器不再丢弃报文
# (配置前提:接口已执行 dhcp relay information enable)

# 解决方案3:关闭 Option 82
[HUAWEI] interface Vlanif10
[HUAWEI-Vlanif10] undo dhcp relay information enable
# 如果不依赖 Option 82 做精细化分配,可以关闭

# 解决方案4:替换 Option 82(覆盖下游设备插入的内容)
[HUAWEI] interface Vlanif10
[HUAWEI-Vlanif10] dhcp relay information strategy replace
# replace:删除原 Option 82 并插入本设备的信息,这也是中继的缺省策略
# (该方案适合下游设备插入的 Option 82 有误、需统一为当前中继信息的场景)

五、总结

对比维度 无中继(本地) 有中继(跨网段)
部署位置 每个 VLAN 一台 DHCP 服务器 集中部署一台/多台
管理复杂度 高(分布式管理) 低(集中管理)
报文转发 广播(同网段) 单播(中继代理转发)
giaddr 字段 0.0.0.0 中继接口 IP
扩展性 差 好
DHCP 中继最佳实践 说明
确保中继到服务器的路由可达 否则中继无法转发报文
配置多个 DHCP 服务器实现冗余 中继向所有服务器转发,客户端取先到的应答(无主备优先级)
合理启用 Option 82 需要精细化分配时启用
监控中继统计信息 通过 display dhcp relay statistics 检查转发状态
DHCP 服务器地址池与 giaddr 匹配 确保每个网段都有对应的地址池
中继与本地 DHCP 互斥 同一 VLANIF 不能同时 select relay 和 select global

思考

  1. DHCP 中继将广播转为单播发送,如果 DHCP 服务器宕机,中继会如何处理?客户端会看到什么现象?
  2. giaddr 字段在 DHCP 服务器地址分配中扮演什么角色?如果 giaddr 为零会怎样?
  3. 为什么不建议在同一台 VLANIF 接口上同时配置 DHCP 中继和 DHCP 服务器?

下篇预告:第48篇:FTP 与 TFTP:配置文件备份与上传