前言:DHCP请求报文是以广播包方式发送的,当DHCP服务器与DHCP客户端不在同一网段时,就需要在三层网关设备配置DHCP中继功能 。
为能更好理解DHCP Relay功能,建议先看看DHCP Server的内容
https://blog.csdn.net/weixin_58574637/article/details/137583174?spm=1001.2014.3001.5502
工作原理:
1、 DHCP中继收到DHCP DISCOVER报文后,处理规则为:
▫ 检查DHCP报文中的Giaddr字段。如果是0,将Giaddr字段设置为接收DHCP DISCOVER报文的接口IP地址。如果不是0,则不修改该字段,继续下面的操作。
▫ 将DHCP报文的目的IP地址改为DHCP服务器或下一跳中继的IP地址,源地址改为中继连接客户端的接口地址,通过路由转发将DHCP报文单播发送到DHCP服务器或下一跳中继。
2、DHCP服务器接收到DHCP DISCOVER报文后,处理规则为:
▫选择与报文中Giaddr字段为同一网段的地址池,并为客户端分配IP地址等参数。
▫向Giaddr字段标识的DHCP中继单播发送DHCP OFFER报文。
3、DHCP中继收到DHCP OFFER报文后,处理规则为:
▫ 检查报文中的Giaddr字段,如果不是接口的地址,则丢弃该报文;否则,继续下面的操作。
▫ DHCP中继检查报文的广播标志位。如果广播标志位为1,则将DHCP OFFER报文广播发送给DHCP客户端;否则将DHCP OFFER报文单播发送给DHCP客户端。
实验拓扑:
配置命令:
路由器做DHCP服务器,配置如下:
#
dhcp enable
#
ip pool if10
gateway-list 192.168.10.254
network 192.168.10.0 mask 255.255.255.0
dns-list 192.168.10.254#
interface GigabitEthernet0/0/0
ip address 192.168.0.1 255.255.255.0
dhcp select global
#
ip route-static 192.168.10.0 255.255.255.0 192.168.0.254
ip route-static 192.168.20.0 255.255.255.0 192.168.0.254
#
交换机做DHCP中继,配置如下:
#
vlan batch 10 20 100
#
dhcp enable#
interface Vlanif10
ip address 192.168.10.254 255.255.255.0
dhcp select relay
dhcp relay server-ip 192.168.0.1
#
interface Vlanif20
ip address 192.168.20.254 255.255.255.0
dhcp select relay
dhcp relay server-ip 192.168.0.1
#
interface Vlanif100
ip address 192.168.0.254 255.255.255.0
#
interface GigabitEthernet0/0/1
port link-type access
port default vlan 10#
interface GigabitEthernet0/0/2
port link-type access
port default vlan 20
#
interface GigabitEthernet0/0/24
port link-type access
port default vlan 100
#
PC连接到交换机G0/0/1时自动获取192.168.10.X段的IP,当PC连接到交换机的G0/0/2时自动获取192.168.20.X段。
数据抓包:
交换机连接电脑的端口抓包信息如下:
交换机连接路由器的端口抓包如下:
PC发出的DHCP Discover包:以广播的方式发送, Bootp flags里明确要求服务器以单播的方式回复消息,并在Client MAC address字段写入自身MAC,在Option字段53里明确发送的是Discover包。
服务器收到客户的DHCP Discover包后,以单播的方式把Discover包发给DHCP服务器,同时Hops字段加1,而Relay Agent IP(Giaddr)字段加入收到DHCP Discover包的三层接口IP地址。
DHCP服务器收到Discover包后,回复给DHCP中继的Offer包。
DHCP中继设备收到服务器的Offer包后,检查Relay Agent IP(Giaddr)是否为本接口IP,若不是丢掉,若是再根据Bootp flags字段判断是单播还是组播方式发与客户端。