一、为什么需要 DHCP 中继?

DHCP 客户端获取 IP 的第一步,是发送 DHCP Discover 广播报文。广播只能在同一二层广播域(同一 VLAN / 同一网段)内传播,无法穿越三层设备

当 DHCP 服务器和客户端不在同一网段时,必须有一台设备充当中继代理(Relay Agent),做两件事:

  • 把客户端发来的广播报文,封装成单播报文转发给 DHCP 服务器;
  • 再把服务器的应答报文转发回客户端。

华为三层交换机的 VLANIF 接口本身就是网关 + 天然的中继点:在 VLANIF 上启用 DHCP 中继,无需新增设备,客户端侧零配置即可跨网段拿地址。本实验就是最典型的企业网场景 ——"一台 DHCP 服务器,为多个 VLAN 用户统一分配 IP"。

二、实验目的

  1. 理解 DHCP 中继的工作原理(广播转单播的过程)
  2. 掌握华为交换机 VLANIF 接口配置 DHCP 中继的方法
  3. 验证跨网段客户端能自动获取到本 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 操作)

  1. 打开 PC1 → 「IP 配置」→ 选择 DHCP → 点「应用」;
  2. 打开 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 指向同一台服务器,服务器为每个网段建一个地址池即可。
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐