前言:
DHCP Relay即DHCP中继,它是为解决DHCP服务器和DHCP客户端不在同一个广播域而提出的
DHCP中继
DHCP协议依赖广播通信(如客户端发送DHCP Discover
报文),但广播报文无法跨越子网,因为:
-
路由器的隔离作用:路由器作为不同子网的边界设备,默认会阻断广播流量(广播域仅限于同一子网)
-
客户端与服务器跨子网时的通信障碍:如果客户端和DHCP服务器位于不同子网,客户端的广播请求无法直接到达服务器,导致无法获取IP地址
示例:
假设客户端在子网A(192.168.1.0/24),而DHCP服务器在子网B(10.0.0.0/24),客户端广播的DHCP Discover
会被路由器拦截,无法传递到子网B
于是便产生了DHCP中继
中继的作用:DHCP中继代理(通常部署在路由器或三层交换机)充当中间人,将客户端的广播请求转换为单播报文,转发到远程DHCP服务器,并反向传递服务器的响应,实现跨VLAN、跨路由通信
DHCP中继(DHCP Relay)是一种网络功能,用于在跨子网的场景中转发DHCP请求和响应,使得客户端能够从远程DHCP服务器获取IP地址配置
DHCP中继的工作原理
1. 客户端发送广播请求(DHCP Discover)
-
行为:客户端开机后,发送
DHCP Discover
广播报文(目标MAC:FF:FF:FF:FF:FF:FF
)
不是目标IP是因为客户端开机时尚未分配IP地址,无法在IP层指定目标地址
-
限制:广播只能在本子网内传播,无法穿过路由器到其他子网
2. 中继代理“拦截”并改造请求
-
接收请求:路由器/三层交换机的接口(连接客户端子网)收到广播报文
-
关键改造:
-
单播转发:将广播报文改为单播,目标地址设为预先配置的DHCP服务器IP
-
添加“地址标签”:在DHCP报文中插入
giaddr
字段(Gateway IP Address),值为中继代理接收请求的接口IP(即客户端子网的网关IP) -
可选标记:添加
Option 82
(记录客户端的物理位置,如交换机端口、VLAN号)
-
比喻:中继代理像快递员,把你的包裹(请求)贴上“寄件人地址”(giaddr),再寄给远方的服务台(服务器)
3. DHCP服务器分配IP地址
-
识别子网:服务器根据
giaddr
字段判断客户端属于哪个子网(例如giaddr=192.168.1.1
对应子网192.168.1.0/24
) -
选择地址池:从匹配该子网的地址池中分配IP、网关、DNS等信息
-
响应方式:服务器将
DHCP Offer
报文以单播形式发送到giaddr
地址(即中继代理的接口IP)
4. 中继代理将响应送回客户端
-
接收响应:中继代理收到服务器的单播报文(Offer/ACK)
-
转发方式:根据客户端是否已获取IP,选择广播或单播将响应送回客户端子网
-
客户端未获取IP时:广播响应(因为客户端可能没有IP,无法单播)
-
客户端已获取IP时:单播响应(提高效率)
-
Giaddr字段,DHCP服务器会根据此字段来判断出客户端所在的网段地址,从而选择合适的 地址池,为客户端分配该网段的IP地址
基本命令的配置:
interface GigabitEthernet0/0/1
进入连接客户端的接口(如GigabitEthernet0/0/1)进入接口后配置以下命令
ip address 192.168.1.1 255.255.255.0
配置接口IP(即客户端的网关地址)
dhcp select relay
启用DHCP中继模式
dhcp relay server-ip 10.0.0.100
指定DHCP服务器的IP地址(可配置多个服务器)
剩下的是在DHCP服务器上创建地址池
配置全局DHCP即可
多跳中继:
客户端请求需经过多个中继设备才能到达DHCP服务器
Hops字段的作用是限制DHCP报文所经过的DHCP中继数目。服务器和客户端之间的DHCP中继数目不能超过16个,也就是Hops值不能大于16,否则DHCP报文将被丢弃
即:客户端 → 中继代理R1 → 中继代理R2 → DHCP服务器
客户端(VLAN 10, 192.168.1.0/24)
↓
中继代理R1(接口IP: 192.168.1.1,下一跳指向R2的接口IP 10.0.0.1)
↓ 服务器设的网关必须与客户端子网网关(R1的接口IP)一致
中继代理R2(接口IP: 10.0.0.1,下一跳指向服务器IP 172.16.0.100)
↓ 确保R1→R2→服务器的路径互通(通过静态路由或动态路由协议)
DHCP服务器(172.16.0.100)
中继R1的配置
dhcp enable
# 进入客户端侧接口(连接客户端子网)
interface GigabitEthernet0/0/1
ip address 192.168.1.1 255.255.255.0
dhcp select relay
dhcp relay server-ip 10.0.0.1 # 指向下一跳中继代理R2的接口IP
中继R2的配置
dhcp enable
# 进入连接R1的接口
interface GigabitEthernet0/0/2
ip address 10.0.0.1 255.255.255.0
dhcp select relay
dhcp relay server-ip 172.16.0.100 # 指向最终DHCP服务器IP
# 确保R2到服务器的路由可达
ip route-static 172.16.0.0 255.255.255.0 10.0.0.254 # 假设下一跳为10.0.0.254
服务器端的配置
dhcp enable
# 创建客户端子网的地址池
ip pool vlan10
gateway-list 192.168.1.1 # 必须与客户端子网网关(R1的接口IP)一致
network 192.168.1.0 mask 24
多子网独立中继:
多个子网各自配置中继代理,直接指向同一台DHCP服务器
即:子网A(客户端) → 中继代理R1 → DHCP服务器
子网B(客户端) → 中继代理R2 → DHCP服务器
子网A(192.168.1.0/24) → 中继代理R1 → DHCP服务器(172.16.0.100)
子网B(192.168.2.0/24) → 中继代理R2 → DHCP服务器(172.16.0.100)
服务器需为每个子网配置独立的地址池,匹配对应中继接口的网关
各中继代理独立工作,仅处理本子网的请求
R1的配置
dhcp enable
interface GigabitEthernet0/0/1
ip address 192.168.1.1 255.255.255.0
dhcp select relay
dhcp relay server-ip 172.16.0.100 # 直连服务器IP
R2的配置
dhcp enable
interface GigabitEthernet0/0/1
ip address 192.168.2.1 255.255.255.0
dhcp select relay
dhcp relay server-ip 172.16.0.100
服务器端的配置
dhcp enable
ip pool vlan10 # 子网A的地址池
gateway-list 192.168.1.1
network 192.168.1.0 mask 24
ip pool vlan20 # 子网B的地址池
gateway-list 192.168.2.1
network 192.168.2.0 mask 24
验证命令:
display dhcp relay interface GigabitEthernet0/0/1
# 检查中继是否生效
display dhcp relay statistics
# 查看报文转发计数
display ip pool name vlan10 used
# 查看地址池分配情况
display ip routing-table
# 检查路由表