# DHCP ### 一、DHCP概述 1. **DHCP是什么** - DHCP:Dynamic Host Configuration Protocol :动态主机配置协议 - DHCP是一种集中对用户IP地址进行动态管理和配置的技术 2. **DHCP的作用** - 作用:实现IP地址的动态分配和集中管理 - 优势:避免手工配置IP地址,提高工作效率,避免出错,且能快速适应网络的变化 3. **DHCP角色** - DHCP客户端:需要获取IP地址的设备,如:计算机、服务器、手机、IP电话等 - DHCP服务器:负责为DHCP客户端分配IP地址等网络参数的设备 - DHCP 中继(中转站-可选):负责DHCP服务器和DHCP客户端之间的DHCP报文(房地产中介公司) > 企业网络中一般不需要部署DHCP中继 ### 二、DHCP服务器给首次接入网络的客户端分配网络参数的工作原理 1. **发现阶段**:客户端广播发送DHCP Discover报文(DHCP发现报文,客户端找DHCP服务器,请求IP地址) 2. **提供阶段**:服务器收到客户端发的报文后,会单播回复DHCP Offer报文(DHCP回应报文,服务器给客户端发IP地址、网关、DNS等) 3. **选择阶段**:客户端收到Offer报文后,会再次广播发送DHCP Request报文(DHCP请求报文,客户端广播告知所有的服务器,选择了某某IP地址) 4. **确认阶段**:服务器收到客户端发报文后,会单播回复DHCP ACK报文(DHCP确认报文,确认分配结果,只有发了ACK报文,客户端才可以使用IP) ### 三、基于全局的DHCP实验 ![image-20240828200710881](https://picgo-noriu.oss-cn-beijing.aliyuncs.com/Images/image-20240828200710881.png) - **需求** > PC1/PC2能够自动获取IP地址、网关、DNS - **配置步骤** - 第一步:在系统视图下开启DHCP功能 - 第二步:配置IP地址池 - 创建IP地址池 - 配置可分配的IP地址段 - 配置网关地址 - 配置DNS地址 - 配置租期 - 第三步:配置R1路由器接口的IP地址 - 这个接口接收客户端发的报文,这个接口的IP地址,即客户端的网关地址 - 在这个接口下开启基于全局的DHCP功能 - 第四步:验证结果 - **配置命令** - R1的配置 ``` [R1]dhcp enable //开启DHCP功能 [R1]ip pool tedu //创建IP地址池 [R1-ip-pool-tedu]network 192.168.1.0 mask 24 //配置可分配的地址段 [R1-ip-pool-tedu]gateway-list 192.168.1.254 //配置网关地址 [R1-ip-pool-tedu]dns-list 8.8.8.8 //配置DNS地址 [R1-ip-pool-tedu]lease day 1 //配置租期 [R1-ip-pool-tedu]quit [R1]int g0/0/0 [R1-G0/0/0]ip address 192.168.1.254 24 //此接口IP地址和网关地址一致 [R1-G0/0/0]dhcp select global //在接口下开启基于全局的DHCP ``` - 验证与测试 > PC1和PC2选择获取地址的方式为DHCP > 然后PC1和PC2在命令行中,使用ipconfig 命令查看IP地址 - 数据抓包 ![image-20240828201014044](https://picgo-noriu.oss-cn-beijing.aliyuncs.com/Images/image-20240828201014044.png) - 配置地址排除 ``` [R1]ip pool tedu [R1-ip-pool-tedu]excluded-ip-address 192.168.1.250 192.168.1.253 //在基于全局的IP地址池中做地址排除,排除的IP地址不做dhcp分发 ``` - 查看IP地址池 ``` display ip pool name tedu all //查看全局IP地址池中全部地址信息 display ip pool name tedu used //查看全局IP地址池中已分发的IP地址 ``` ### 四、基于接口的DHCP实验 ![image-20240828201131434](https://picgo-noriu.oss-cn-beijing.aliyuncs.com/Images/image-20240828201131434.png) - **需求** > PC1/PC2能够自动获取IP地址、网关、DNS - **配置步骤** - 第一步:在系统视图下开启DHCP功能 - 第二步:配置基于接口的DHCP - 配置接口的IP地址和掩码 - 在接口下开启基于接口的DHCP功能 - 在接口下配置DNS地址 - 在接口下配置租期 - **配置命令** - R1配置 ``` [R1]dhcp enable //开启dhcp功能 [R1]int g0/0/0 [R1-G0/0/0]ip address 192.168.1.254 24 [R1-G0/0/0]dhcp select interface //开启基于接口的dhcp 功能 [R1-G0/0/0]dhcp server dns-list 8.8.8.8 [R1-G0/0/0]dhcp server lease day 1 ``` - **验证与测试** > PC1和PC2选择获取地址的方式为DHCP > 然后PC1和PC2在命令行中,使用ipconfig 命令查看IP地址 ### 五、DHCP中继代理原理 - **问题** > 当客户机和DHCP服务器不在一个广播域时,DHCP服务器无法接收到客户机的DHCP discover广播数据包,客户机就无法获得IP地 - **解决** > 在客户机所在的广播域中,寻找一台路由器,这台路由器一个端口在客户机所在的广播域,另外一个端口在DHCP服务器所在的广播域,让这台路由器主动接收客户机的DHCP discover数据包,然后由这台路由器代替客户机向DHCP服务器申请IP地址,得到地址后,再把这个地址交给客户机,这台服务器称之为DHCP中继代理服务器 - **DHCP中继实验** ![image-20240828201521120](https://picgo-noriu.oss-cn-beijing.aliyuncs.com/Images/image-20240828201521120.png) - **需求** - 希望PC1/PC2自动获取到IP地址,网关、DNS等网络参数 - Server1 服务器手工配置一个静态IP地址,192.168.10.253,这个地址是专门给服务器使用的,所以这个地址不能通过DHCP分发,避免IP地址冲突 - **配置步骤** - 第一步:配置R2-DHCP服务器 1. 在系统视图下开启DHCP功能 2. 在R2-DHCP服务器中配置基于全局的DHCP - 创建IP地址池:ntd - 定义网段:192.168.10.0/24 - 定义网关:192.168.10.254 - 定于DNS:8.8.8.8 - 定义排除地址:192.168.10.253 这个IP地址不做DHCP分发 3. 在接口上配置IP地址,开启基于全局的dhcp - 第二步:配置DHCP中继 1. R1中继设备开启DHCP功能 2. 配置R1中继设备的接口IP地址 3. 在R1设备连接客户端的接口上开启DHCP中继,指向DHCP服务器:192.168.20.20 - 第三步:配置静态路由 - 在R2配置去往192.168.10.0网段的路由,下一跳为192.168.20.10 - 第四步:验证与测试 - **配置命令** - 第一步:配置DHCP服务器 - DHCP服务器配置 ``` [R2-DHCP]dhcp enable //开启dhcp 功能 [R2-DHCP]ip pool ntd //创建IP地址池 [R2-DHCP-ip-pool-ntd]network 192.168.10.0 mask 24 [R2-DHCP-ip-pool-ntd]gateway-list 192.168.10.254 [R2-DHCP-ip-pool-ntd]dns-list 8.8.8.8 [R2-DHCP-ip-pool-ntd]excluded-ip-address 192.168.10.253 [R2-DHCP-ip-pool-ntd]quit [R2-DHCP]int g0/0/0 [R2-DHCP-GigabitEthernet0/0/0]ip add 192.168.20.20 24 [R2-DHCP-GigabitEthernet0/0/0]dhcp select global ``` - 第二步:配置DHCP中继 ``` [R1-zj]dhcp enable [R1-zj]int g0/0/0 [R1-zj-G0/0/0]ip add 192.168.20.10 24 [R1-zj-G0/0/0]int g0/0/1 [R1-zj-G0/0/1]ip add 192.168.10.254 24 [R1-zj-G0/0/1]dhcp select relay //在接口上开启dhcp中继功能 [R1-zj-G0/0/1]dhcp relay server-ip 192.168.20.2 //指定dhcp服务器的IP地址 ``` - 第三步:在DHCP服务器上配置去往中继设备的回程路由 ``` [R2-DHCP]ip route-static 192.168.10.0 24 192.168.20.10 ``` - 第四步:验证与测试 ``` 在PC1和PC2中设置IP地址的获取方式为DHCP 在PC1和PC2中命令行中输入命令 ``` - **经验证发现** ``` PC1的IP地址是192.168.10.252 PC2的IP地址是192.168.10.251 192.168.10.253这个地址,已经被排除,没有被DHCP分发 ``` ### 六、三层交换机部署DHCP ![image-20240829083619899](https://picgo-noriu.oss-cn-beijing.aliyuncs.com/Images/image-20240829083619899.png) - **需求** > vlan10和vlan20的pc自动获取IP地址 - **配置步骤** - 第一步:在sw1部署dhcp 1. 创建vlan 2. 配置trunk链路-交换机互联接口做trunk 3. 配置vlanif 虚接口地址--每个vlan的网关地址 4. 开启dhcp 功能 5. 创建IP地址池 - 定义网段 - 定义网关 - 定义dns 6. 在vlanif 虚接口下,开启dhcp select global - 第二步:配置sw2和sw3接入层交换机 1. 创建vlan 2. 接口加入vlan,交换机和pc互联的接口做access 3. 交换机和交换机互联的接口做trunk - 第三步:验证与测试 - **配置命令** - 第一步:在sw1部署dhcp - DHCP服务器配置 ``` [SW1-DHCP]vlan batch 10 20 [SW1-DHCP]port-group group-member g0/0/1 g0/0/2 [SW1-DHCP-port-group]port link-type trunk [SW1-DHCP-port-group]port trunk allow-pass vlan all [SW1-DHCP-port-group]quit [SW1-DHCP]ip pool vlan10 [SW1-DHCP-ip-pool-vlan10]network 192.168.10.0 mask 24 [SW1-DHCP-ip-pool-vlan10]gateway-list 192.168.10.254 [SW1-DHCP-ip-pool-vlan10]dns-list 8.8.8.8 [SW1-DHCP-ip-pool-vlan10]quit [SW1-DHCP]ip pool vlan20 [SW1-DHCP-ip-pool-vlan20]network 192.168.20.0 mask 24 [SW1-DHCP-ip-pool-vlan20]gateway-list 192.168.20.254 [SW1-DHCP-ip-pool-vlan20]dns-list 8.8.8.8 [SW1-DHCP-ip-pool-vlan20]quit [SW1-DHCP]dhcp enable [SW1-DHCP]int vlanif 10 [SW1-DHCP-Vlanif10]ip address 192.168.10.254 24 [SW1-DHCP-Vlanif10]dhcp select global [SW1-DHCP-Vlanif10]int vlanif 20 [SW1-DHCP-Vlanif20]ip address 192.168.20.254 24 [SW1-DHCP-Vlanif20]dhcp select global ``` - 第二步:配置sw2和sw3接入层交换机 - SW2配置 ``` [SW2]vlan batch 10 20 [SW2]port-group group-member g0/0/2 g0/0/3 [SW2-port-group]port link-type access [SW2-port-group]port default vlan 10 [SW2-port-group]quit [SW2]int g0/0/1 [SW2-G0/0/1]port link-type trunk [SW2-G0/0/1]port trunk allow-pass vlan all ``` - SW3配置 ``` [SW3]vlan batch 10 20 [SW3]port-group group-member g0/0/2 g0/0/3 [SW3-port-group]port link-type access [SW3-port-group]port default vlan 20 [SW3-port-group]quit [SW3]int g0/0/1 [SW3-G0/0/1]port link-type trunk [SW3-G0/0/1]port trunk allow-pass vlan all ``` - 第三步:验证与测试 - 在PC1和PC2中设置IP地址的获取方式为DHCP - 在PC1和PC2中命令行中输入命令 ``` ipconfig /release //释放当前IP地址 ipconfig /renew //更新IP地址(获取IP地址) ``` ``` display ip pool name vlan10 all //查看地址池中全部IP信息 display ip pool name vlan10 used //查看地址中已使用的IP地址 display ip pool name vlan20 all //查看地址池中全部IP信息 display ip pool name vlan20 used //查看地址中已使用的IP地址 ``` ``` reset ip pool name vlan10 192.168.10.253回收已分配的IP地址 reset ip pool name vlan10 all ``` ### 七、租期 > 1)租期T1: > 当IP地址的租用时间到达50%时,客户机会以单播方式向服务器发送Request 请求报文,请求更新IP地址租期。 > DHCP 服务器如果回复DHCP ACK确认报文给客户机,代表租期更新成功,从0开始 > 2)租期T2 > 如果DHCP服务器一直没有回应,那么在IP地址的租用时间到达87.5%时,客户机会以广播方式向服务器发送Request 请求报文,请求更新IP地址租期 > DHCP服务器如果回复DHCP ACK 确认报文给客户机,代表租期更新成功,从0开始 1. **access接口恢复默认配置(缺省配置)** ``` [SW1]vlan batch 10 20 [SW1]interface g0/0/1 [SW1-GigabitEthernet0/0/1]port link-type access [SW1-GigabitEthernet0/0/1]port default vlan 10 [SW1-GigabitEthernet0/0/1]port link-type trunk //将接口模式修改为trunk(失败) Error: Please renew the default configurations. :错误:请更新默认配置 ``` - 如何解决:如何恢复接口上VLAN的缺省配置 - 第一种方法 ``` [SW1-GigabitEthernet0/0/1]port default vlan 1 //接口pvid恢复为vlan1 [SW1-GigabitEthernet0/0/1]port link-type trunk //将接口模式修改为trunk(成功) ``` - 第二种方法 ``` [SW1-GigabitEthernet0/0/1]undo port default vlan //恢复接口上VLAN的缺省配置 [SW1-GigabitEthernet0/0/1]port link-type trunk //将接口模式修改为trunk(成功) ``` 2. **trunk接口恢复默认配置(缺省配置)** ``` [SW1]vlan batch 10 20 [SW1]interface g0/0/1 [SW1-G0/0/1]port link-type trunk [SW1-G0/0/1]port trunk allow-pass vlan 10 20 [SW1-G0/0/1]port link-type access //将接口模式修改为access(失败) Error: Please renew the default configurations. :错误:请更新默认配置 ``` - 如何解决:如何恢复接口上VLAN的缺省配置 ``` [SW1-G0/0/1]undo port trunk allow-pass vlan 10 20 //恢复默认 [SW1-G0/0/1]port link-type access //将接口模式修改为access(成功) ``` - 备注: ``` [SW1-G0/0/1]undo port trunk allow-pass vlan all //删除所有vlan [SW1-G0/0/1]port link-type access //无法修改报错 Error: Please renew the default configurations. ``` - 如何解决:恢复默认配置: undo port trunk allow-pass vlan all 的时候把所有vlan 都干掉了 所以我们要恢复vlan1 - 第一种方法 ``` [SW1-G0/0/1]undo port trunk allow-pass vlan 2 to 4094 //只删除2 to 4094 不删除vlan1 [SW1-G0/0/1]port link-type access //修改成功 ``` - 第二种方法 ``` [SW1-G0/0/1]undo port trunk allow-pass vlan all //删除所有vlan [SW1-G0/0/1]port trunk allow-pass vlan 1 //补上vlan1,恢复默认 [SW1-G0/0/1]port link-type access //修改成功 ```