第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 检查端口状态 |
八、思考
- 为什么 DHCP 广播不能跨 VLAN?DHCP 中继是怎么解决这个问题的?
- GIADDR 字段的作用是什么?谁填写的?DHCP 服务器怎么看这个字段?
- 配置 DHCP 中继时,需要先在交换机上开启什么全局命令?
- 三层交换机的一个接口配了 dhcp select relay 后,PC 能从多个 VLAN 获取 IP 吗?
- DHCP Snooping 和中继有什么关系?中继接口在 DHCP Snooping 中是信任口吗?
- 企业有 10 个 VLAN,需要给每个 VLAN 分配 IP 地址,你会用服务器模式还是中继模式?
下篇预告:第48篇《FTP与TFTP_配置文件备份与上传》——掌握FTP和TFTP在配置文件备份与上传中的应用。