先决条件—— 动态主机配置协议(DHCP) , DHCP服务器如何为主机动态分配IP地址?
为了动态地将IP地址分配给主机,DHCP客户端在DORA进程中与DHCP服务器交换DHCP消息。
在DORA过程中,根据广播标志的值,广播发现和请求消息,广播要约和确认消息,即,如果广播标志的值为1,则广播要约和确认消息,如果为0,则广播消息或单播消息。但这仅在DHCP服务器位于同一网络中时有效,因为路由器不转发任何广播数据包。如果服务器位于不同的网络中,该怎么办?下面是DHCP中继代理的角色。
DHCP中继代理– DHCP中继代理是任何TCP/IP主机,当服务器位于不同的网络上时,用于在DHCP服务器和客户端之间转发请求和回复。中继代理接收DHCP消息,然后生成新的DHCP消息以在另一个接口上发送。此外,DHCP中继代理添加giaddr(数据包的网关地址)字段,如果启用,还添加中继代理信息选项82。当服务器回复转发到主机时,选项字段将被删除。
注—— 发现和请求消息由DHCP中继代理单播。
例如——
这里是一个拓扑结构,其中有一个没有IP地址的DHCP客户端。有一个DHCP服务器具有IP地址192.16.2.2,并且在中间有一个路由器,我们希望DHCP中继代理在接口FA0/0和接口FA0/1上的192.1682.1上具有IP地址192.1681.1。
现在,首先,DHCP客户机广播discover消息,以查找交换机接收的DHCP服务器,因为它位于同一广播域中。交换机在网络中广播由PC和路由器(DHCP中继代理)接收的DHCP数据包。PC和路由器接收广播数据包,但由于DHCP服务器位于不同的网络中,PC会丢弃数据包,因此数据包必须仅传送到默认网关。
启用DHCP中继代理功能的路由器将源地址替换为自己的地址,将目标IP地址替换为DHCP服务器IP地址,即DHCP中继代理将数据包单播到DHCP服务器。DHCP中继代理将giaddr字段添加到数据包中,并将其转发到DHCP服务器。giaddr字段被添加到数据包中,以便服务器应该知道它必须从哪个池分配IP地址。
在我们的例子中,giaddr字段将包含192.168.1.1(路由器[DHCP中继代理]接收发现消息的接口的IP地址)。
服务器向提供释放的IP地址的路由器回复单播DHCP提供。
作为回报,路由器向发送DHCP请求的网络广播DHCP提供消息。如上图所示,通过开关接收广播消息。
交换机向主机广播DHCP提供消息。因此,DHCP客户端将接收消息
现在,DHCP客户端为交换机接收的服务器广播DHCP请求消息,显示接受IP地址。交换机向另一台主机和路由器(DHCP中继代理)广播DHCP请求消息,如上图所示。
路由器用自己的IP地址替换源IP地址,目标IP保持不变,即由DHCP中继代理单播
服务器向路由器(DHCP中继代理)回复单播DHCP确认消息,如上图所示。
路由器依次将DHCP确认消息广播到它接收到IP地址DHCP请求的网络。如上图所示,通过开关接收广播消息。
当交换机通过其所有端口广播消息时,DHCP客户端接收广播DHCP确认消息。
配置——
这是客户端、路由器、dhcp_服务器的基本配置。路由器一直在为fa0/0和fa0/1分别分配IP地址192.168.1.1和192.168.2.1。
ROUTER(config)#int f0/0ROUTER(config-if)#ip address 192.168.1.1 255.255.255.0ROUTER(config-if)#no shutdownROUTER(config)#int f0/1ROUTER(config-if)#ip address 192.168.2.1 255.255.255.0ROUTER(config-if)#no shutdown
DHCP_服务器在接口fa0/0上被分配了IP地址192.168.2.2,DHCP池用名称POOL1定义,192.168.1.0的网络和子网掩码255.255.255.0被分配给池POOL1。
DHCP_SERVER(config)#int f0/0DHCP_SERVER(config-if)#ip address 192.168.2.2 255.255.255.0DHCP_SERVER(config-if)#no shutdownDHCP_SERVER(config)#ip dhcp pool POOL1DHCP_SERVER(dhcp-config)#network 192.168.1.0 255.255.255.0DHCP_SERVER(dhcp-config)#default-router 192.168.1.1DHCP_SERVER(dhcp-config)#exit
现在,IP helper address命令用于将路由器配置为DHCP中继代理,给出DHCP_服务器的地址192.168.2.2。
ROUTER(config)#int f0/0ROUTER(config-if)#ip helper-address 192.168.2.2ROUTER(config-if)#exit