DHCP Relay
即 DHCP 中继,它是为解决 DHCP 服务器和 DHCP 客户端不在同一广播域而提出的,提供了对 DHCP 广播报文的中继转发功能,能够把 DHCP 客户端的广播报文 “透明地” 传送到其它广播域的 DHCP 服务器上,同时也能够把 DHCP 服务器端的应答报文 “透明地” 传送到其它广播域的 DHCP 客户端。
# 实验网络拓扑图
R1 为 DHCP 服务器,SW1 为三层交换机,SW2 和 SW3 为二层交换机。

# 实验组网
根据上述拓扑结构,配置 DHCP 中继的思路如下:
1、配置 IP 和路由,交换机 access 和 trunk 口
2、R1 开启 DHCP,配置全局地址池,接口使能 DHCP
3、SW1 配置 DHCP 中继
# 配置 IP 和路由
# R1 配置
<R1>sys | |
[R1] int GigabitEthernet 0/0/0 | |
[R1-GigabitEthernet0/0/0] ip add 1.1.1.2 30 | |
[R1-GigabitEthernet0/0/0] q | |
[R1] ip route-static 192.168.1.0 255.255.255.0 1.1.1.1 | |
[R1] ip route-static 192.168.2.0 255.255.255.0 1.1.1.1 |
# SW1 配置
<SW1>sys | |
[SW1] vlan batch 5 10 20 | |
[SW1] int Vlanif 5 | |
[SW1-Vlanif5] ip address 1.1.1.1 255.255.255.252 | |
[SW1-Vlanif5] q | |
[SW1] int Vlanif 10 | |
[SW1-Vlanif10] ip address 192.168.1.254 255.255.255.0 | |
[SW1-Vlanif10] q | |
[SW1] int Vlanif 20 | |
[SW1-Vlanif20] ip address 192.168.2.254 255.255.255.0 | |
[SW1-Vlanif20] q | |
[SW1-GigabitEthernet0/0/1] port link-type trunk | |
[SW1-GigabitEthernet0/0/1] port trunk allow-pass vlan all | |
[SW1-GigabitEthernet0/0/1] q | |
[SW1] int GigabitEthernet 0/0/2 | |
[SW1-GigabitEthernet0/0/2] port link-type trunk | |
[SW1-GigabitEthernet0/0/2] port trunk allow-pass vlan all | |
[SW1-GigabitEthernet0/0/2] q | |
[SW1] int g0/0/3 | |
[SW1-GigabitEthernet0/0/3] port link-type access | |
[SW1-GigabitEthernet0/0/3] port default vlan 5 |
# SW2 配置
[SW2] vlan 10 | |
[SW2-vlan10] int g 0/0/1 | |
[SW2-GigabitEthernet0/0/1] port link-type access | |
[SW2-GigabitEthernet0/0/1] port default vlan 10 | |
[SW2-GigabitEthernet0/0/1] int g0/0/2 | |
[SW2-GigabitEthernet0/0/2] port link-type access | |
[SW2-GigabitEthernet0/0/2] port default vlan 10 | |
[SW2-GigabitEthernet0/0/2] int g0/0/23 | |
[SW2-GigabitEthernet0/0/3] port link-type trunk | |
[SW2-GigabitEthernet0/0/3] port trunk allow-pass vlan all |
# SW3 配置
[SW2] vlan 20 | |
[SW2-vlan10] int g 0/0/1 | |
[SW2-GigabitEthernet0/0/1] port link-type access | |
[SW2-GigabitEthernet0/0/1] port default vlan 20 | |
[SW2-GigabitEthernet0/0/1] int g0/0/2 | |
[SW2-GigabitEthernet0/0/2] port link-type access | |
[SW2-GigabitEthernet0/0/2] port default vlan 20 | |
[SW2-GigabitEthernet0/0/2] int g0/0/23 | |
[SW2-GigabitEthernet0/0/3] port link-type trunk | |
[SW2-GigabitEthernet0/0/3] port trunk allow-pass vlan all |
# 配置全局地址池
在 R1 上配置 vlan 10 和 vlan 20 的两个全局地址池
<R1>sys | |
[R1] dhcp enable // 开启 DHCP 功能 | |
[R1] int g0/0/0 | |
[R1-GigabitEthernet0/0/0] dhcp select global // 接口使能 DHCP | |
[R1-GigabitEthernet0/0/0] q | |
[R1] ip pool vlan10 // 创建地址池,命名为 vlan10 | |
[R1-ip-pool-vlan10] network 192.168.1.0 mask 255.255.255.0 // 地址池范围 | |
[R1-ip-pool-vlan10] gateway-list 192.168.1.254 // 网关地址 | |
[R1-ip-pool-vlan10] dns-list 114.114.114.114 //DNS 地址 | |
[R1-ip-pool-vlan10] lease day 2 hour 2 minute 0 // 租约时长 | |
[R1-ip-pool-vlan10] ip pool vlan20 | |
[R1-ip-pool-vlan20] network 192.168.2.0 mask 255.255.255.0 | |
[R1-ip-pool-vlan20] gateway-list 192.168.2.254 | |
[R1-ip-pool-vlan20] dns-list 114.114.114.114 | |
[R1-ip-pool-vlan20] lease day 2 hour 2 minute 0 |
# 开启 DHCP 中继
在 SW1 上开启 DHCP 中继功能,使用两种配置方法:
- 在接口 vlan10 下直接指定 DHCP 服务器 IP 地址
- 在接口 vlan20 下调用 DHCP 服务器组
[SW1] dhcp enable | |
[SW1] int Vlanif 10 | |
[SW1-Vlanif10] dhcp select relay | |
[SW1-Vlanif10] dhcp relay server-ip 1.1.1.2 | |
[SW1-Vlanif10] |
[SW1] dhcp server group vlan20 | |
[SW1-dhcp-server-group-vlan20] dhcp-server 1.1.1.2 0 // 索引号,0-19 | |
[SW1-dhcp-server-group-vlan20] q | |
[SW1] int vlan | |
[SW1] int Vlanif 20 | |
[SW1-Vlanif20] dhcp select relay | |
[SW1-Vlanif20] dhcp relay server-select vlan20 |
# 实验验证
在 PC 上查看获取到的 DHCP 信息
R1 上查看 nat 会话表
<R1>dis ip pool | |
----------------------------------------------------------------------- | |
Pool-name : vlan10 | |
Pool-No : 0 | |
Position : Local Status : Unlocked | |
Gateway-0 : 192.168.1.254 | |
Mask : 255.255.255.0 | |
VPN instance : -- | |
----------------------------------------------------------------------- | |
Pool-name : vlan20 | |
Pool-No : 1 | |
Position : Local Status : Unlocked | |
Gateway-0 : 192.168.2.254 | |
Mask : 255.255.255.0 | |
VPN instance : -- | |
IP address Statistic | |
Total :506 | |
Used :4 Idle :502 | |
Expired :2 Conflict :0 Disable :0 |
# F & Q
# 一、为什么二层交换机不配中继?
DHCP 客户端发送的 DHCP 请求是广播报文,这些广播报文只能在同一个广播域内传播,二层交换机 SW2 和 SW3 不需要配置 DHCP 中继,因为它们只需要在各自的 VLAN 内转发帧,而跨 VLAN 的 DHCP 请求转发由三层交换机 SW1 负责。SW1 配置了 DHCP 中继功能,可以正确地将 DHCP 请求从二层交换机上的客户端转发到 R1(DHCP 服务器),并处理服务器的响应。
# 二、DHCP 服务器怎么判断使用哪一个地址池?
当 DHCP 请求到达 R1 时,R1 会根据 DHCP 请求中的 GIADDR 字段来判断应该分配哪个地址池的 IP 地址:
- DHCP 请求报文中的 GIADDR(Gateway IP Address)字段用于标识 DHCP 中继代理的 IP 地址。当 DHCP 客户端发送广播请求时,如果请求通过 DHCP 中继代理(如 SW1),中继代理会将自身的 IP 地址填入 GIADDR 字段。
- R1 会查看 GIADDR 字段,以确定哪个子网的 DHCP 服务器应该响应这个请求。如果 GIADDR 是 VLAN 10 的 IP 地址,R1 会从地址池 1(192.168.1.0/24)分配 IP;如果 GIADDR 是 VLAN 20 的 IP 地址,R1 会从地址池 2(192.168.2.0/24)分配 IP。
假设 VLAN 10 的 IP 地址范围是 192.168.1.0/24,VLAN 20 的 IP 地址范围是 192.168.2.0/24。
当 SW1 作为 DHCP 中继代理接收到 VLAN 10 的 DHCP 请求时,它会将自身的 VLAN 10 接口的 IP 地址(例如 192.168.1.254)填入 GIADDR 字段,并将请求中继到 R1。
R1 接收到请求后,会查看 GIADDR 字段,发现是 192.168.1.254,于是知道这个请求来自 VLAN 10,从而从地址池 1(192.168.1.0/24)分配 IP 地址。
同理,当 SW1 接收到 VLAN 20 的 DHCP 请求时,它会将自身的 VLAN 20 接口的 IP 地址(例如 192.168.2.254)填入 GIADDR 字段,并将请求中继到 R1。R1 则会从地址池 2(192.168.2.0/24)分配 IP 地址。