一、为什么需要 DHCP 中继?
DHCP 客户端获取 IP 的第一步,是发送DHCP Discover 广播报文。广播只能在同一二层广播域(同一 VLAN / 同一网段)内传播,无法穿越三层设备。
当 DHCP 服务器和客户端不在同一网段时,必须有一台设备充当中继代理(Relay Agent),做两件事:
- 把客户端发来的广播报文,封装成单播报文转发给 DHCP 服务器;
- 再把服务器的应答报文转发回客户端。
华为三层交换机的VLANIF 接口本身就是网关 + 天然的中继点:在 VLANIF 上启用 DHCP 中继,无需新增设备,客户端侧零配置即可跨网段拿地址。本实验就是最典型的企业网场景 ——"一台 DHCP 服务器,为多个 VLAN 用户统一分配 IP"。
二、实验目的
- 理解 DHCP 中继的工作原理(广播转单播的过程)
- 掌握华为交换机 VLANIF 接口配置 DHCP 中继的方法
- 验证跨网段客户端能自动获取到本 VLAN 网段的 IP 地址
三、实验拓扑![]()
说明:DHCP 服务器在 eNSP 中可用一台 AR2200 或另一台 S5700 模拟;生产环境用 Windows Server / 其他厂商服务器同理,只需保证与 SW1 的三层互通。
四、地址规划表
表格
| 设备 | VLAN | 接口 | IP 地址 | 角色说明 |
|---|---|---|---|---|
| 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 操作)
- 打开 PC1 → 「IP 配置」→ 选择DHCP→ 点「应用」;
- 打开 PC 命令行,输入
ipconfig,看到192.168.10.x段地址即成功。
# 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指向同一台服务器,服务器为每个网段建一个地址池即可。