导图社区 DHCP
DHCP(动态主机配置协议)是一个局域网的网络协议。
编辑于2021-03-24 20:35:08DHCP
一、基本架构
Client:与服务器交互报文获取IP及其他配置信息
Relay:向服务器转发DHCP报文,帮助客户端完成地址配置功能。
场景?客户端和服务器不在一个网段。优点:节省成本,方便集中管理。
Server:为客户端分IP和其他信息(处理分配IP、续租、地址释放请求)
二、报文介绍
报文格式(15个字段)
报文字段(15字段)
01. op(op code):报文类型。1:Client请求;2:Server响应
02. htype(hardware type):硬件地址类型,以太网值为1
03. hlen (hardware length):硬件地址长度,以太网值为6
04. hops:dhcp报文经过的中继数量,中继最多16个,值大于16就丢弃报文。
05. xid客户端选取的随机数
06. secs(seconds):客户端获取地址或续租更新后使用的时间。
07. flags:表示客户端希望服务器以什么方式响应。值为0,单播响应;值为1,广播响应
08. ciaddr(client ip address):客户端的IP,客户端初始状态该字段为0.0.0.0,用于主机临时通信
09. yiaddr(your client ip address):服务器分给客户端的IP
10. siaddr (server ip address):服务器的IP
11. giaddr(gateway ip address):第一个中继的IP。第一个中继写入该字段,服务器根据该字段分配IP
12. chaddr(client hardware address):客户端的MAC地址。根据前面的字段1、2来订。
13. sname(server host name):客户端获取的服务器名字。可选,当填写,必须以0结尾
14. file(file name):客户端获取的启动配置文件名。
15. options:可选字段。包含报文类型,配置信息(网关、dns、租期)
报文种类(8类)
01 discover:客户端向服务器申请IP,广播发discover报文
02 offer:服务器给客户端分配IP等信息,单播回复offer报文
03 Request:三种用途,客户端向应服务器确认offe或客户端重启后确认之前的IP信息,广播发。 客户端用来续租(单播或广播发)
04 ACK:服务器回应Request报文,确认客户端可以使用的IP及相关信息
05 NAK:服务器拒绝回应Request报文。例如服务器没有找到相应的租期记录,此时回应NAK
06 Deline:客户端告诉服务器分配的地址冲突,然后重新申请IP
07 Release;客户端向服务器要求主动释放分配的IP
08 Inform:客户端向服务器请求详细的配置信息(网关、DNS)
三、Options字段选项
Option格式
Options含义
Type:信息类型
Length:信息长度
Value:信息内容
Options字段说明
1:子网掩码
3:网关地址
6:DNS地址
12:客户端的主机名
15:域名后缀
33:静态路由
44:NetBios服务器
46:NetBios节点
50:客户端请求IP
51:客户端地址租期
52:Option附加
53:消息类型
54:标识服务器
55:请求参数列表
58:续租时间T1
59:续租时间T2
60:厂商分类信息
61:客户端标识
66:TFTP服务器名
67:启动文件名
77:用户类型标识
121:无分类路由
自定义DHCP选项
43
格式
用途:服务器和客户端交换厂商特定的信息
含义
Sub-option type:子选项类型
Sub-option length:子选项的长度
Sub-option value:子选项的取值
82
释义:中继代理信息选项,记录客户端的位置信息。
客户端向服务器发请求报文,中继或dhcp snooping设备收到后,添加Option82,然后发给dhcp服务器。 管理员通过Option 82得知客户端的位置,实现对客户端的安全和计费等控制。 还可以根据Option 82 定制IP地址和其他参数的分配策略,提供灵活地址分配。
四、工作原理
申请IP过程
发现阶段:
1.客户端:广播发discover来查找dhcp服务器,申请IP。因为客户端不知道服务器,所以广播发。 discover中的内容?:客户端的MAC地址(chaddr字段)、请求的参数列表、广播标志位。 ( flags字段,表示请求服务器以单播或广播形式响应报文) 注:discover报文中的Option字段定义了网络参数信息,不同Option值代表不同的参数。例Option53表示DHCP报文类型(例如,discover报文)。
提供阶段:
2.服务器:选择一个合适的IP地址、租期和其他配置信息(网关、dns),放到offer报文中单播发给客户端 (能提供:确定网段、选择IP、租期) (不能提供。。。。。)
能提供
必备组件1:服务器如何知道分配哪个网段地址? 答:根据接收discover报文接口的IP来分配
必备组件2:服务器怎么选择一个IP? 答:①优选服务器上静态绑定的IP地址。 ②优选客户端请求IP地址(Option50有标明) ③优选服务器曾经分配的IP ④在地址池内随机分配的IP ⑤查询超过租期、发生冲突的IP地址,如果找到,则进行分配,否则报告错误。
必备组件3:地址租期如何确定? 答:如果客户端请求时没有租期,则使用地址池中的租期。 如果客户端请求时有租期,则请求的租期与地址池中的租期做比较,将租期小的给客户端
封装报文:OFFER报文携带哪些内容? 答:携带客户端的IP(报文中的yiaddr字段)及其租期等配置参数。
无法提供
问题:要是没有可分的IP呢?, 答:找超过租期、处于冲突的IP,当找到可用的IP,就分配;否则,发NAK,客户端发discover重新申请IP。
选择阶段:
3.客户端:只响应最先收到的offer,回应quest报文。报文中包含option 54标识服务器
封装报文:Request报文内容是? 答:服务器标识选项(Option54)和客户端IP地址(Option50,offer中yiaddr字段)。
问题:为什么广播发? 答:让服务器知道选择的是哪个服务器提供的IP,其他服务器收回IP
确认阶段:
服务器:收到reques报文,根据Request报文中的MAC查找租约记录。 有记录,则向客户端发ACK确认报文,报文中包含IP地址和其它设置信息。 客户端:收到ACK报文后,广播的发送免费ARP,判断地址是否可用,当没有收到回应,客户端使用该地址。 当收到了ARP应答,说明地址冲突,发decline报文,然后重新请求IP。 服务器:没有相应的租约记录,或者无法分配IP地址,则发NAK报文作为应答。 客户端重新发discover重新申请IP地址。 Client获得IP地址后,检测网关是否可用,如果网关不可用,则发discover重新申请IP地址。
客户端使用曾经的IP
前提:客户端再次登录网络时IP地址还在租期内。 客户端:发送Request报文,包含上次分配的IP地址,Option50指明 服务器:收到Request报文后, 当申请的地址没有被分配,则回应ACK确认,客户端就可以使用原来的IP地址。 当申请的IP地址无法再分配,服务器回应NAK。客户端收到后,发discover重新申请IP
客户端如何更新租约?
当客户端获得IP地址时,会设置3个定时器,租期更新、重绑定、到达租期 当租期达到50%时,客户端单播发Request报文,请求续租。 当收到ACK报文,则续租成功,更新租期; 当收到NAK报文,则发discover重新申请IP 当租期达到87.5%时,服务器没有应答,客户端广播发Request,请求续租。 当收到ACK报文,则续租成功,更新租期; 当收到NAK报文,则discover重新申请IP 租期超时,服务器没有回应,发discover重新申请IP
小疑问!!为什么租期百分之87.5是广播发Request续租? 答:可能服务器故障。
释放地址
客户端在租期超时前,当用户不想使用分配的地址,客户端发release报文释放IP地址。 然后服务器会保留这个客户端的配置信息,将该地址标记为曾经分配过的IP。
客户端可发inform报文向服务器请求更新配置信息。
六、中继工作原理
中继处理过程
中继接收到discover或request报文后处理过程: ①丢弃hops字段的值大于16跳的DHCP请求报文,目的为了防环。 ②将hops字段增加1,说明又经过了一次中继。 ③检查中继代理(IP)字段。 如果为0,将接收报文的接口IP地址放到中继代理(IP)字段中。有多个IP地址时,选择其一。 如果不为0,就不修改该字段。 TTL: ④将请求报文的TTL作为中继的TTL值。中继报文的环路问题和跳数限制问题通过hops字段解决。 目地址:⑤DHCP请求报文的目的地址修改为服务器或下一个中继的地址,然后将报文交给服务器或下一个中继。
服务器处理过程
①服务器:根据中继代理(IP)字段为客户端分配IP地址等参数,将应答报文发给中继(中继代理字段有标识)。 ②中继:接收到应答报文后,执行如下处理: 当应答报文都是发给直连的客户端的。中继代理(IP)字段用来识别与客户端直连的接口。 当中继代理(IP)字段不是本地接口的地址,中继将丢弃应答报文。 检查报文的广播标志位,为1时,将应答报文广播发给客户端,否则单播发给客户端, 目的地址为客户端的IP字段内容,链路层地址为客户端的硬件地址字段内容。
续租
①当租期达到50%时,向服务器单播发Request报文,请求续租。 当收到ACK,续租成功,更新租期; 当收到NAK,续租失败,客户端发discover报文重新申请IP ②当租期达到87.5%时,服务器依然没有响应,向中继广播发Request报文, 中继向服务器单播发Request报文,请求续租。 当收到ACK,续租成功,更新租期; 当收到NAK,续租失败,客户端发discover报文重新申请IP ③当租期超时,服务器依然没有响应,客户端停止使用该IP地址, 客户端发discover报文重新申请IP
七、IP地址的分配与更新原则
①优选服务器上静态绑定的IP地址。 ②优选客户端请求IP地址(Option50有标明) ③优选服务器曾经分配的IP ④在地址池内随机分配的IP ⑤查询超过租期、发生冲突的IP地址,如果找到,则进行分配,否则报告错误。
dhcp攻击防范
1. 假dhcp服务器攻击
目的:冒充dhcp服务器,让客户端无法获得正确的IP,无法正常访问网络
解决办法:将连接合法服务器的接口配置为信任接口,将其他接口配置为非信任 接口,从非信任接口收到的应答报文丢弃,防止仿冒者的攻击。
2. dhcp报文攻击
①非法的用户不断向服务器发送 request 来进行续租,导致到期的 IP 地址 无法进行收回,合法用户不能获取 IP 地址。 ②如果非法用户发送release 报文,则会导致合法用户不正常下线。
解决办法: 启用DHCP 绑定表的功能,通过将 request 续租报文和 release 报文和绑定表进行匹配
3. dhcp服务器拒绝服务攻击
攻击者恶意申请IP地址,耗尽服务器地址,导致合法用户无IP地址。 服务器只通过request报文中的chaddr字段来确定客户端mac地址,攻击者修改 chaddr字段来申请IP,导致IP地址被耗尽。
解决办法:通过配置接口或者设备接入的最大用户数,超过设定值,不再允许再申请IP地址。 如果攻击者修改request报文的chaddr字段进行攻击,设置检测chaddr字段和报头中的源mac是否一致,一致则转发,不一致则丢弃。
4. dhcp报文泛洪攻击
攻击者产生大量的dhcp报文,dhcp服务器需要上送cpu处理,导致设备无法正常工作。
解决办法:配置dhcp报文上送dhcp 处理单元的速率可有效防止泛洪攻击。
5. dhcp中间人攻击
攻击者利用arp机制
解决办法: DAI DAI即动态 ARP 检测是利用绑定表来防御中间人攻击的 将 ARP 报文的源 IP、MAC、VLAN 以及接口信息和绑定表比较,匹配,允许此ARP报文通过,否则丢弃该 ARP 报文。 动态 ARP 检测功能仅适用于 DHCP Snooping 场景 设备启用DHCP Snooping 功能才会自动生成绑定表 静态IP 地址的用户,需要手动添加静态绑定表