一、为什么需要 DHCP 中继?
DHCP 客户端获取 IP 的第一步,是发送 DHCP Discover 广播报文。广播只能在同一二层广播域(同一 VLAN / 同一网段)内传播,无法穿越三层设备。
当 DHCP 服务器和客户端不在同一网段时,必须有一台设备充当中继代理(Relay Agent),做两件事:
- 把客户端发来的广播报文,封装成单播报文转发给 DHCP 服务器;
- 再把服务器的应答报文转发回客户端。
华为三层交换机的 VLANIF 接口本身就是网关 + 天然的中继点:在 VLANIF 上启用 DHCP 中继,无需新增设备,客户端侧零配置即可跨网段拿地址。本实验就是最典型的企业网场景 ——"一台 DHCP 服务器,为多个 VLAN 用户统一分配 IP"。
二、实验目的
三、实验拓扑
说明:DHCP 服务器在 eNSP 中可用一台 AR2200 或另一台 S5700 模拟;生产环境用 Windows Server / 其他厂商服务器同理,只需保证与 SW1 的三层互通。
四、地址规划表
表格
| SW1 | VLAN10 | GE0/0/1(access) | — | 接入 PC1 |
| SW1 | VLAN100 | GE0/0/2(access) | — | 接入 DHCP 服务器 |
| SW1 | VLAN10 | VLANIF10 | 192.168.10.254/24 | 用户网关 + DHCP 中继 |
| SW1 | VLAN100 | VLANIF100 | 192.168.100.254/24 | 服务器网段网关 |
| AR1 | VLAN100 | GE0/0/0 | 192.168.100.253/24(固定) | DHCP 服务器,地址池 192.168.10.0/24 |
| PC1 | VLAN10 | — | DHCP 自动获取 | 最终获得 192.168.10.x 地址 |
五、详细配置步骤
步骤 1:SW1 基础配置(创建 VLAN + 接口划入 VLAN)
system-view # 进入系统视图(sys 是其简写)
sysname SW1 # 修改设备名,便于区分(可选)
vlan batch 10 100 # 批量创建 VLAN 10、VLAN 100
# VLAN10 :用户 PC 所在网段
# VLAN100 :DHCP 服务器所在网段
interface GigabitEthernet0/0/1 # 进入接 PC1 的接口视图
port link-type access # 设为 access 类型(连接终端设备)
port default vlan 10 # 该接口划分到 VLAN10
quit # 返回系统视图
interface GigabitEthernet0/0/2 # 进入接 DHCP 服务器的接口
port link-type access # access 类型
port default vlan 100 # 划分到 VLAN100
quit
步骤 2:配置 VLANIF 三层网关
interface Vlanif 10 # 进入 VLAN10 的三层逻辑接口(网关)
ip address 192.168.10.254 255.255.255.0 # 用户网关 IP,即 PC1 的网关地址
quit
interface Vlanif 100 # 服务器网段也要有网关,保证与服务器三层互通
ip address 192.168.100.254 255.255.255.0
quit
步骤 3:全局使能 DHCP 功能
dhcp enable # 全局开启 DHCP 功能
# 注意:无论做中继还是做服务器,都必须先执行这条
步骤 4:在 VLANIF10 上配置 DHCP 中继(核心步骤)
interface Vlanif 10
dhcp select relay # 将该接口的 DHCP 模式设为"中继"模式
# 含义:收到本网段客户端的 DHCP 请求后,
# 不自己分配,而是转发给下游 DHCP 服务器
dhcp relay server-ip 192.168.100.253
# 指定上游 DHCP 服务器的 IP 地址(与拓扑一致)
# 可重复执行多条,实现主备 DHCP 服务器冗余
quit
步骤 5:DHCP 服务器配置(以 eNSP 的 AR2200 为例)
system-view # 进入系统视图
sysname Server1 # 改设备名(可选)
dhcp enable # 服务器同样要先全局使能 DHCP
interface GigabitEthernet0/0/0 # 进入连接 SW1 的接口
ip address 192.168.100.253 255.255.255.0 # 服务器固定 IP(与拓扑一致)
quit
ip pool pool_vlan10 # 创建地址池,名称可自定义
network 192.168.10.0 mask 255.255.255.0 # 分配网段:必须与客户端网关同网段
gateway-list 192.168.10.254 # 下发给客户端的网关地址(就是中继接口 IP)
dns-list 202.96.134.133 # 下发给客户端的 DNS(可选)
excluded-ip-address 192.168.10.251 # 排除打印机IP地址(假设这是预留给打印机的),防止分配给客户端
lease day 1 # 地址租期为 1 天
quit
interface GigabitEthernet0/0/0
dhcp select global # 接口调用全局地址池进行分配
quit
# ★★★ 关键一步:服务器必须配置到"客户端网段"的回程路由 ★★★
# 中继转发的应答报文是单播发给 giaddr(即 192.168.10.254)的,
# 服务器没有到 192.168.10.0/24 的路由,Offer 就发不回去,客户端永远拿不到地址
ip route-static 192.168.10.0 255.255.255.0 192.168.100.254
若使用 Windows Server 做 DHCP:新建作用域选 192.168.10.0/24,在「作用域选项」中把 003 路由器设为 192.168.10.254,并确保服务器有到 192.168.10.0/24 的路由(原理同上)。
步骤 6:验证实验效果
① 先验证三层互通(链路通了再谈 DHCP)
# 在 SW1 上 ping DHCP 服务器
<SW1> ping 192.168.100.253
# 在 DHCP 服务器上 ping 中继接口(能通说明回程路由 OK)
<Server1> ping 192.168.10.254


② PC 侧验证(eNSP 操作)

# PC 命令行显示示例(伪代码示意)
C:\\> ipconfig
IPv4 Address. . . . . . . . . . : 192.168.10.2
Subnet Mask . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . : 192.168.10.254

③ 服务器侧查看租约分配情况
<Server1> display ip pool name pool_vlan10 used

④ 交换机侧查看中继转发统计
<SW1> display dhcp relay statistics

⑤ 查看接口当前生效配置
# 进入 VLANIF10 视图后执行 display this,确认中继配置已生效
<SW1> system-view
[SW1] interface Vlanif 10
[SW1-Vlanif10] display this

六、原理详解:DHCP 中继的报文流转(四步走)
表格
| 1 | Discover | PC → 广播 → 中继接口 (VLANIF10) | 客户端不知道服务器在哪,只能全广播 |
| 2 | Discover | 中继 → 单播 → 服务器 | 中继在报文中填入 giaddr = 192.168.10.254 |
| 3 | Offer | 服务器 → 单播 → giaddr (中继) | 服务器依据 giaddr 判断客户端在 192.168.10.0/24,从对应地址池选 IP |
| 4 | Offer | 中继 → 转发给 PC | 中继把应答带回客户端 |
| 5 | Request / Ack | PC ⇄ 中继 ⇄ 服务器 | 请求确认租约,流程同 2-4 反复往返 |
关键点:giaddr(网关地址)是服务器 "选地址池" 的唯一依据,所以地址池网段必须和 VLANIF10(网关)同网段;这也解释了为什么服务器必须能路由到 192.168.10.0/24。
七、常见故障排查
表格
| PC 一直显示 "无法获取 IP" | ① 先 ping 通网关 192.168.10.254;② 在 SW1 上 ping 192.168.100.253 确认中继与服务器互通 |
| 服务器能收到请求但不回 Offer | 最常见原因:服务器没有到 192.168.10.0/24 的回程路由(见步骤 5 ★),补 ip route-static 192.168.10.0 255.255.255.0 192.168.100.254 |
| 中继配置了但 PC 还是拿不到 | 检查 VLANIF10 上是否执行了 dhcp select relay,且 dhcp relay server-ip 指向 192.168.100.253 |
| 地址池疑似耗尽 | display ip pool name pool_vlan10 used 查看已分配数与剩余数 |
| 中继侧无转发记录 | display dhcp relay statistics interface Vlanif 10 看统计是否增长 |
八、总结
- DHCP 中继的本质是:广播 → 单播 → 单播 → 广播 的报文翻译过程,VLANIF 就是中继点;
- 三层交换机上只需三句话:dhcp enable + dhcp select relay + dhcp relay server-ip x.x.x.x;
- 最容易翻车的坑不在中继本身,而在 DHCP 服务器的回程路由—— 服务器必须能到达客户端网段,Offer 才能送回来;
- 本方案可直接扩展到多 VLAN 场景:每个 VLANIF 都配 dhcp select relay 指向同一台服务器,服务器为每个网段建一个地址池即可。

