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

一、写在前面

DHCP 使用广播(Discover/Request)进行交互,而广播不能跨 VLAN 传播。这意味着:

  • VLAN 10 的 DHCP 服务器 → 只能给 VLAN 10 的设备分配 IP
  • VLAN 20 的设备 → 收不到 DHCP 服务器的广播响应

但现实中,企业不会在每个 VLAN 都部署一台 DHCP 服务器——成本高、管理麻烦。

DHCP 中继(DHCP Relay) 就是解决方案:让位于一个 VLAN 的 DHCP 服务器,能为所有 VLAN 的客户端分配 IP 地址。


二、DHCP 中继的原理

2.1 中继的角色

PC(VLAN 20)          三层交换机(中继)          DHCP Server(VLAN 10)
    │                        │                          │
    │  1. DHCP Discover      │                          │
    │  (广播)               │                          │
    │──────────────────────> │                          │
    │                        │  2. 中继将广播转为单播    │
    │                        │  添加 GIADDR=10.0.20.254 │
    │                        │─────────────────────────>│
    │                        │                          │
    │                        │  3. DHCP Offer           │
    │                        │  (单播回复给中继)        │
    │                        │<─────────────────────────│
    │                        │                          │
    │  4. 中继转发 Offer      │                          │
    │  (单播/广播给 PC)      │                          │
    │<────────────────────── │                          │

2.2 GIADDR 字段的关键作用

中继设备在转发 DHCP 报文时,会在 GIADDR 字段填入接收客户端请求的接口 IP 地址(即中继接口的 IP)。

GIADDR = 10.0.20.254(VLAN 20 的网关 IP)

DHCP 服务器看到 GIADDR=10.0.20.254
→ 知道客户端属于 10.0.20.0/24 网段
→ 从该网段对应的地址池中分配 IP
→ 回复给 10.0.20.254
→ 中继再转发给客户端

三、配置华为 DHCP 中继

3.1 拓扑

DHCP Server: 10.0.10.100/24(VLAN 10)
三层交换机:
  VLANIF 10: 10.0.10.254/24
  VLANIF 20: 10.0.20.254/24
PC 在 VLAN 20 需要获取 10.0.20.x 的 IP

3.2 配置 DHCP 服务器端

DHCP 服务器可以是路由器、Windows Server 或 Linux。这里以华为路由器为例:

# DHCP 服务器配置(和普通 DHCP 一样)
[DHCP-Server] dhcp enable
[DHCP-Server] ip pool vlan20
[DHCP-Server-ip-pool-vlan20] network 10.0.20.0 mask 255.255.255.0
[DHCP-Server-ip-pool-vlan20] gateway-list 10.0.20.254
[DHCP-Server-ip-pool-vlan20] dns-list 114.114.114.114
[DHCP-Server-ip-pool-vlan20] lease day 1
[DHCP-Server-ip-pool-vlan20] quit
[DHCP-Server] interface vlanif 10
[DHCP-Server-Vlanif10] ip address 10.0.10.100 255.255.255.0
[DHCP-Server-Vlanif10] dhcp select global

3.3 配置三层交换机(中继)

# 三层交换机配置
[Relay-SW] dhcp enable                              ← 必须开启
[Relay-SW] interface vlanif 10
[Relay-SW-Vlanif10] ip address 10.0.10.254 255.255.255.0
[Relay-SW-Vlanif10] quit

[Relay-SW] interface vlanif 20
[Relay-SW-Vlanif20] ip address 10.0.20.254 255.255.255.0

# 关键:开启 DHCP 中继,指向 DHCP 服务器
[Relay-SW-Vlanif20] dhcp select relay
[Relay-SW-Vlanif20] dhcp relay server-ip 10.0.10.100
[Relay-SW-Vlanif20] quit

3.4 验证

# 查看 DHCP 中继配置
[Relay-SW] display dhcp relay interface vlanif 20
DHCP Relay agent is Running on Interface Vlanif20
Server IP address: 10.0.10.100

# 在 PC 上测试(PC 在 VLAN 20)
C:\> ipconfig /renew
IPv4 Address: 10.0.20.2      ← 获取到了正确网段的 IP
Subnet Mask: 255.255.255.0
Default Gateway: 10.0.20.254

四、多中继服务器

生产环境下,DHCP 服务器通常有两台做高可用:

[Relay-SW-Vlanif20] dhcp select relay
[Relay-SW-Vlanif20] dhcp relay server-ip 10.0.10.100     ← 主
[Relay-SW-Vlanif20] dhcp relay server-ip 10.0.10.101     ← 备

五、DHCP Snooping 与中继配合

DHCP Snooping 是交换机上的安全功能,用于防止私设 DHCP 服务器。

开启 DHCP Snooping 后,非信任端口的 DHCP 回复(Offer/ACK)会被丢弃。

# 在接入交换机上开启 DHCP Snooping
[Access-SW] dhcp snooping enable

# 将上连中继交换机的端口设为信任口
[Access-SW] interface gigabitethernet 0/0/24
[Access-SW-GigabitEthernet0/0/24] dhcp snooping trusted

# 连接 PC 的端口不用配置,默认不信任
# 如果私接了一台家用路由器(开启了 DHCP),该路由器发的 DHCP Offer 会被丢弃

无中继 + DHCP Snooping 的典型配置:

[三层交换机]
  配置了 DHCP 中继的 interface → 自动为信任口(无需手动配)
  PC 端口 → 非信任 → 只能收 Discover/Request,不收 Offer/ACK
  → 防止内网私接路由器导致 IP 分配混乱

六、中继 vs 服务器模式对比

对比项 DHCP 服务器模式 DHCP 中继模式
DHCP 服务位置 在接口所在设备上 在远端独立服务器上
配置复杂度 简单 稍复杂
管理集中度 分散(每个 VLAN 都要配) 集中
高可用部署 每个 VLAN 都做双机 只需要对服务器做双机
适用规模 小型网络 中到大型网络

七、常见故障

故障 原因 排查
PC 获取到 169.254.x.x 中继没配或指向错了 display dhcp relay interface 检查
获取到错误的网段 GIADDR 不对 检查中继接口的 IP 地址
时通时不通 DHCP 服务器不可达 ping DHCP 服务器 IP
DHCP Snooping 拦截 信任口没配 display dhcp snooping 检查端口状态

八、思考

  1. 为什么 DHCP 广播不能跨 VLAN?DHCP 中继是怎么解决这个问题的?
  2. GIADDR 字段的作用是什么?谁填写的?DHCP 服务器怎么看这个字段?
  3. 配置 DHCP 中继时,需要先在交换机上开启什么全局命令?
  4. 三层交换机的一个接口配了 dhcp select relay 后,PC 能从多个 VLAN 获取 IP 吗?
  5. DHCP Snooping 和中继有什么关系?中继接口在 DHCP Snooping 中是信任口吗?
  6. 企业有 10 个 VLAN,需要给每个 VLAN 分配 IP 地址,你会用服务器模式还是中继模式?

下篇预告:第48篇《FTP与TFTP_配置文件备份与上传》——掌握FTP和TFTP在配置文件备份与上传中的应用。