DHCP协议理解
定义:DHCP:Dynamic Host Configuration Protocol,动态主机配置协议,是⼀个应⽤在局域⽹中的⽹络协议,它使⽤UDP协议⼯作。
67(DHCP服务器)和68(DHCP客户端)
当 Client传送给封包给 Server时,源是UDP 68 Port ⽬的UDP 67 Port,
从 Server传送给 Client则是使⽤ 源是UDP 67 Port ⽬的UDP 68 Port
理解:DHCP协议就是⼀个基于UDP协议⼯作在局域⽹内的⽹络协议,其最终的⽬的就是获取响应的IP地址,其中这过程中有多种分配⽅式,以及发送报⽂的格式要求等。
作⽤:动态分配IP地址,过程⾃动化,终端⽆需⼀⼀⼿⼯配置,配置信息统⼀管理(DNS,⽹关),IP地址有限、需要⼤量配置IP地址、经常移动终端。
好处:提⾼配置IP地址效率,减少配置⼯作量,减少IP地址冲突。
分配IP地址⽅式:
(1)⼿⼯配置⽅式:通过⽹络管理员⼿⼯配置某台客户端特定的IP地址,当客户端请求分配时,DHCP服务器就将⼿动配置的IP地址分配给客户端。。(2)⾃动配置⽅式:当DHCP客户端第⼀次想服务端租⽤到第⼀个IP地址后,就将这个IP地址永久分配给客户端使⽤。(3)动态配置⽅式:服务器暂时分配⼀个IP地址给客户端,根据租约到期或者续约租期的⽅式来管理分配的IP地址。
DHCP报⽂格式
链路层头
|
IP头 20bytes
|
UDP头
|
DHCP报⽂
|
字段 | 长度 | 含义 |
OP | 1字节 |
表示报⽂的类型:
1:客户端请求报⽂
2:服务器响应报⽂
|
htype | 1字节 |
表示硬件地址的类型。对于以太⽹,该类型的值为“1”。
|
hlen | 1字节 |
表示硬件地址的⻓度,单位是字节。对于以太⽹,该值为
6。
|
Hops | 1字节 |
跳数。客户端设置为0,也能被⼀个代理服务器设置。
|
xid | 4字节 |
事务ID,由客户端选择的⼀个随机数,被服务器和客户端
⽤来在它们之间交流请求和响应,客户端⽤它对请求和应
答进⾏匹配。该ID由客户端设置并由服务器返回,为32位
整数。
|
secs | 2字节 |
由客户端填充,表示从客户端开始获得IP地址或IP地址续借后所使⽤了的秒数。
|
flags | 2字节 |
此字段在BOOTP中保留未⽤,在DHCP中表示标志字段。
Flags字段格式
只有标志字段的最⾼位才有意义,其余的位均被置为0。
最左边的字段被解释为⼴播响应标志位,内容如下所示:
0:客户端请求服务器以单播形式发送响应报⽂
1:客户端请求服务器以⼴播形式发送响应报⽂
|
ciaddr | 4字节 |
客户端的IP地址。只有客户端是Bound、Renew、
Rebinding状态,并且能响应ARP请求时,才能被填充。
|
yiaddr | 4字节 |
"你⾃⼰的"或客户端的IP地址。
|
siaddr | 4字节 |
表明DHCP协议流程的下⼀个阶段要使⽤的服务器的IP地
址。
|
giaddr | 4字节 |
该字段表示第⼀个DHCP中继的IP地址(注意:不是地址池
中定义的⽹关)。当客户端发出DHCP请求时,如果服务器
和客户端不在同⼀个⽹络中,那么第⼀个DHCP中继在转发
这个DHCP请求报⽂时会把⾃⼰的IP地址填⼊此字段。服务
器会根据此字段来判断出⽹段地址,从⽽选择为⽤户分配
地址的地址池。服务器还会根据此地址将响应报⽂发送给
此DHCP中继,再由DHCP中继将此报⽂转发给客户端。
若在到达DHCP服务器前经过了不⽌⼀个DHCP中继,那么
第⼀个DHCP中继后的中继不会改变此字段,只是把Hops
的数⽬加1。
|
chaddr | 16字节 |
该字段表示客户端的MAC地址,此字段与前⾯的“Hardware Type”和“Hardware Length”保持⼀致。当客户端发出DHCP请求时,将⾃⼰的硬件地址填⼊此字段。
对于以太⽹,当“Hardware Type”和“Hardware
Length”分别为“1”和“6”时,此字段必须填⼊6字节的以太
⽹MAC地址。
|
sname | 64字节 |
该字段表示客户端获取配置信息的服务器名字。此字段由
DHCP Server填写,是可选的。如果填写,必须是⼀个以0
结尾的字符串。
|
file | 128字节 |
该字段表示客户端的启动配置⽂件名。此字段由DHCP
Server填写,是可选的,如果填写,必须是⼀个以0结尾的
字符串。
|
options | 可变 |
该字段表示DHCP的选项字段,⾄少为312字节,格式为"代码+⻓度+数据"。DHCP通过此字段包含了服务器分配给终端的配置信息,如⽹关IP地址,DNS服务器的IP地址,客户端可以使⽤IP地址的有效租期等信息。
|
option字段编码方式
这个字段的结构采⽤“CLV”结构
其中”code”是标识号,唯⼀标识后⾯的信息内容(vlaue),1bytes;
“length”表示后⾯的value值的⻓度,1bytes
“vlaue”是信息内容
Options字段有很多项,是可选的,不同的报⽂option项可能不同,图5是⼀个DHCP request报⽂的
option项:
Option id
|
⻓度(字节)
|
描述
|
1 | 4 |
Subnet Mask
|
3 |
n*4
|
Router(⽹关)
|
6 |
n*4
|
DNS Server
|
7 |
n*4
|
Log Server
|
26 | 2 |
Interface MTU
|
33 |
n*8
|
Static route
|
35 | 4 |
ARP cache timeout
|
42 |
n*4
|
NTP servers
|
51 | 4 |
IP address lease time
|
53 | 1 |
Message type:
1-DHCPDISCOVER
2-DHCPOFFER
3-DHCPREQUEST
4-DHCPDECLINE
5-DHCPACK
6-DHCPNAK
7-DHCPRELEASE
8-DHCPINFORM
|
54 | 4 |
DHCP Server Identifier
|
60 | n |
华为⾃定义:可配置该终端设备在发起DHCP请求时,通过Option 60携带域信息。收到DHCP报⽂时,可根据Option 60中携带的域信息来分配IP地址。
|
82 | n |
华为⾃定义:作为DHCP Relay,在中继⽤户DHCP报⽂时,可在Option 82中填写⽤户的物理位置信息,通知DHCP服务器按物理位置信息对为⽤户分配IP地址。
|
DHCP协议报⽂的种类
Dhcp协议⼀共有8中报⽂,包括:DHCPDISCOVER,DHCPOFFER,DHCPREQUEST,DHCPACK,DHCPNAK,DHCPRELEASE,DHCPDECLINE,DHCPINFORM。
报⽂类型由options字段中的option53“DHCP Message Type”选项来确定。各报⽂的具体含义如下:
(1)DHCP-DISCOVER报⽂:0x01 客户端请求包
这个报⽂是client端开始dhcp过程的第⼀个请求报⽂,client在请求地址时,并不知道server端的位置,所以client会以⼴播的⽅式发送请求报⽂,它的⽬的是发现⽹络中的服务器。
(2)DHCP-OFFER报⽂: 0x02 服务器响应包
这个报⽂server端对DISCOVERY报⽂的响应报⽂。会在所配置的地址池中查找⼀个合适的IP地址,加上相应的租约期限和其他配置信息(如GATEWAY,DNS SERVER等),构造⼀个OFFER报⽂,发送给⽤户,告知⽤户本SERVER可以为其提供IP地址的分配,并且。发OFFER报⽂⼀般是单播的⽅式发送。
(3)DHCP-REQUEST报⽂:0x03 客户端选择包
在⼀个⼦⽹中可能有多台服务器,所有收到DISCOVER报⽂的服务器都会回应OFFER报⽂,所以client端可能收到多个OFFER报⽂,通常会选择第⼀个OFFER报⽂的服务器作为⾃⼰的⽬标服务器,并回应⼀个REQUEST请求报⽂。在续租约的时候client端也会发送REQUEST报⽂ 请求续租期。
(4)DHCP-ACK报⽂:0x05 服务器确认包
是server对client端的REQUEST报⽂的确认响应报⽂,server在收到REQUEST报⽂后,根据REQUEST报⽂中携带的client MAC来查找有没有相应的租约记录,如果有则发送ACK报⽂作为回应,通知client可以使⽤分配的IP地址。
(5)DHCP-NAK报⽂:0x06 服务器拒绝包
Server端对client端的REQUEST报⽂的拒绝响应报⽂,如果服务器没有相应的租约记录,就会发送NAK报⽂给client端。
(6)DHCP-RELEASE报⽂:0x07 客户端释放包
Client端主动释放server端分配给它的IP是,就会发送DHCP-RELEASE报⽂给server,server收到这个报⽂后,就会回收这个IP地址。
(7)DHCP-DECLINE报⽂:0x04
client收到server回应的ACK报⽂后,通过地址冲突检测发现 SERVER分配的地址冲突或由于其它原因导致不能使⽤,则发送DHCP-DECLINE报⽂,通知server所分配的IP地址不可⽤。
(8)DHCP-INFORM报⽂:0x08
在client已经获得了IP地址,需要从server端获得更详细的配置信息时,就会发送DHCP-INFORM报⽂向server请求,server在收到这个报⽂后,会根据租约查找,找到相应的配置信息后,就会回应DHCP-ACK报⽂给client。
DHCP协议⼯作过程
动态获取IP过程
典型的DHCP过程 :
1.客户机向服务器发送DHCP_DISCOVER报⽂,申请IP2.服务器向客户机返回DHCP_OFFER报⽂,制定⼀个将要分配的IP3.客户机向服务器发送DHCP_REQUEST报⽂,请求这个IP4.服务器 ping ⼏次(⼀般是三次)这个IP ,如果没有响应的话,就说明这个IP现在是空闲的 ,可以分配给客户机,所以向客户机发送DHCP_ACK报⽂,确认可以分配。如果等响应,则发送DHCP_NAK报⽂,拒绝分配。5.如果客户端收到DHCP_ACK,则发送⼀次免费ARP,判断这个IP 是否已经被⽤。没有使⽤则绑定这个服务器分配来的IP,否则向服务器发送DHCP_DECLINE报⽂,拒绝这次分配。并重新执⾏第⼀步。如果收到是DHCP_NAK,则直接重新执⾏第⼀步。客户机申请IP之前确实没有IP,DHCP_DISCOVER报⽂是以⼴播的形式发送的,IP头⾥的⽬的地址是255.255.255.255,源地址是0.0.0.0 链路层⽬的地址是FF-FF-FF-FF-FF-FF,源地址是⾃⼰的MAC地址。这样服务器 收到客户端发来的DISCOVER报⽂之后,会根据源MAC地址向客户机发送单播的DHCP_OFFER报⽂
抓包过程
(1)在Wireshark中点击start开始抓包,在过滤栏输⼊bootp,使其只显示DHCP数据包
(2)在win10 中的cmd输⼊ipconfig /release 先断开当前的⽹络连接,主机号变为0.0.0.0,主机与⽹络断开,不能访问⽹络。
(3)在cmd中输⼊ipconfig /renew 请求⽹络连接,也为客户端分配了IP地址。
此时,可以看到在Wireshark中新增了4个DHCP数据包:
数据包1:DHCP Discover
数据包2:DHCP Offer
数据包3:DHCP Request
数据包4:DHCP ACK
DHCP四个阶段
DHCP动态获取IP地址的过程主要分为发现阶段、提供阶段、选择阶段、确认阶段四个阶段。
(1)发现阶段:client端在局域⽹内以⼴播的⽅式发起⼀个DHCP Discover包,⽬的是在⼦⽹络中发现能够给client端提供IP地址的server端。UDP ⽬标端⼝号为67 源IP 地址0.0.0.0 ⽬的IP:255.255.255.255(2)提供阶段:局域⽹中DHCP server接受到Discover包之后,通过发送DHCP offer包给client端应答,主要是告知client端可以提供IP地址,以及相应的IP地址租约信息和其他配置信息也会在其中。UDP ⽬标68 源IP为DHCP服务器的IP ⽬的IP:255.255.255.255(1)DHCP服务器仍然使⽤⼴播地址作为⽬的地址,因为此时请求分配IP的Client并没有⾃⼰ip,⽽可能有多个Client在使⽤0.0.0.0这个IP作为源IP向DHCP服务器发出IP分配请求,DHCP也不能使⽤0.0.0.0这个IP作为⽬的IP地址,于是依然采⽤⼴播的⽅式,告诉正在请求的Client们,这是⼀台可以使⽤的DHCP服务器。(2)DHCP服务器提供了⼀个可⽤的IP,在数据包的Your (client) IP Address字段可以看到DHCP服务器提供的可⽤IP。(3)除此之外,如图中红⾊矩形框的内容所示,服务器还发送了⼦⽹掩码,路由器,DNS,域名,IP地址租⽤期等信息。(3)选择阶段:在client端可能会接受到多个offer包,通常clientdaunt只会接受收到的第⼀个DHCP offer报⽂,然后client端就会以⼴播的⽅式发送⼀个DHCP request报⽂请求分配IP地址。UDP ⽬标67 源IP为0.0.0.0 ⽬的IP:255.255.255.255(4)确认阶段:server端在收到DHCP request报⽂之后,会判断”option”字段的serverIP地址是否是⾃⼰的IP地址,如果符合分配IP地址的条件,就会给client发送⼀个DHCP ACK包,如果不满⾜就发挥发送⼀个DHCP NAK包。UDP ⽬标68 源IP为DHCP服务器的IP ⽬的IP:255.255.255.255
注意:客户端执⾏DHCP-DISCOVER后,如果没有DHCP服务器响应客户端的请求,客户端会随机使⽤169.254.0.0/16⽹段中的⼀个IP地址配置到本机地址。
169.254.0.0/16是Windows的⾃动专有IP寻址范围,也就是在⽆法通过DHCP获取IP地址时,由系统⾃动
分配的IP地址段。
续约租期
三种情况
(1)当clientIP地址已经⽤到50%的时间,续租⼀下,client端就会以单播形式向服务端发送⼀个DHCP Request包,当server响应时就会回应⼀个ACK包,会重新约定⼀个时间。(2)当clientIP地址已经⽤到50%的时间,续租⼀下,client端就会以单播形式向服务端发送⼀个DHCP Request包,server没有响应,client会继续使⽤,当使⽤到87.5%时,会在续租⼀次,同时就以⼴播的⽅式是发送⼀个request包,server这时收到响应以后,就会回应⼀个ACK包,重新约定⼀个时间。(3)当clientIP地址已经⽤到50%的时间,续租⼀下,client端就会以单播形式向服务端发送⼀个DHCP Request包,server没有响应,client会继续使⽤,当使⽤到87.5%时,会在续租⼀次,同时就以⼴播的⽅式是发送⼀个request包,如果server还是没有响应,client那就直接使⽤到过期。
重新连接使⽤IP地址
Client端在重新登录⽹络的时候,可以不需要从初始阶段发送DHCP DISCOVER报⽂开始,可以直接⼴播发送DHCP REQUEST报⽂给服务器。
client主动释放IP地址
ipconfig -release
ipconfig -renew
总结
DHCP安全性
DHCP攻击:1.恶意DHCP服务器(1.⽆法上⽹2.引导到外⽹,抓明⽂流量)2.DHCP饥饿攻击在DHCP服务器上直接防御DHCP饥饿攻击是有限的,因为DHCP协议本身没有内置⾜够的安全措施来防⽌此类攻击。然⽽,通过⼀些配置和策略,可以在⼀定程度上缓解饥饿攻击的影响
1. 设置适当的租约时间
设置较短的租约时间可以使IP地址更快地回收和重新分配。这不会阻⽌攻击发⽣,但可以减轻其影响,因为IP地址将不会被⻓时间占⽤。
2. 使⽤MAC地址过滤
在DHCP服务器上设置MAC地址过滤,只允许已知的、受信任的设备MAC地址从DHCP服务器获取IP地址。这需要管理员⼿动维护⼀个可信MAC地址列表,对于⼤型动态⽹络可能难以管理。
3. 限制每个客户端的IP分配
在⼀些⾼级的DHCP服务中,可以设置策略来限制每个客户端可以获得的IP地址数量。例如,可以配置服务器只允许每个物理设备在⼀定时间内从服务器获取⼀个IP地址。
4. DHCP Snooping
尽管不是在DHCP服务器上配置,但启⽤⽀持的交换机上的DHCP Snooping功能可以有效防⽌DHCP饥饿攻击。它确保只有受信任的端⼝可以响应DHCP请求,阻⽌未经授权的设备分配IP地址。
5. 监控与警报
实施监控策略来检测不寻常的DHCP流量模式和⾏为。例如,如果从单⼀设备收到⼤量的DHCP请求,或者某⼀设备频繁更换MAC地址请求IP,这些都可能是DHCP饥饿攻击的迹象。通过监控⼯具和⽇志分析,管理员可以及时发现并响应潜在的攻击。
6. VLAN和⽹络隔离
通过创建多个VLAN,将⽹络划分为多个较⼩的逻辑部分,每个部分有⾃⼰的DHCP作⽤域。这样即使在⼀个VLAN中受到攻击,也不会影响到整个⽹络的稳定性。
7. 安全强化
保持系统和软件的最新状态,定期更新DHCP服务器和⽹络设备的固件和软件,减少已知漏洞被利⽤的机会。
虽然在DHCP服务器上直接防御DHCP饥饿攻击存在局限,但通过⽹络层⾯的防御措施结合服务器配置的优化,可以有效减轻攻击带来的影响。实施这些策略需要⽹络管理员具备⼀定的⽹络安全知识和对现有⽹络架构深⼊的了解
实验:部署DHCP服务器
⼀台Windows server 作为服务器 ; ⼀台 Windows 7 作为客户端
第⼀步:取消虚拟机DHCP功能
(因为我们做的实验是要让我们在sever虚拟机上搭建的DHCP服务器给win7虚拟机分配一个ip地址,Windows sever当作一台服务器)
第⼆步:手动配置DHCP 服务器 静态地址
第三步:安装DHCP 服务器
DHCP--IPV4--新建作用域
后面都是默认下一步,记得要配一个默认网关!
第四步:客户机设置⾃动获取IP地址(客户机和服务器机要连接同一网卡)
总结 :
DHCP服务器不仅可以⾃动分配IP地址给⽹络中的设备,还可以进行高级的管理和配置,以确保网络的高效运行和安全。下⾯是⼀些关键的管理策略和操作步骤:
1. 设置地址池(Scope Configuration)DHCP服务器通过所谓的“作⽤域”来管理IP地址池。每个作⽤域定义了⼀系列的IP地址,这些地址可以⾃动分配给⽹络中的客户端。● 创建和配置作⽤域:在DHCP服务器上定义⼀个或多个作⽤域,指定可供分配的IP地址范围、⼦⽹掩码、租约时间(即IP地址分配的有效期),以及任何其他的默认⽹络设置(如⽹关、DNS服务器等)。2. 预留地址(Reservations)对于⽹络中的某些设备(如打印机、服务器、或其他固定设备),可能需要固定的IP地址。通过在DHCP中设置预留地址,可以确保特定的设备总是接收到相同的IP地址。● 配置预留地址:在DHCP管理控制台中,可以为特定的MAC地址分配⼀个固定的IP地址。这样,即使在使⽤DHCP的环境中,这些设备也总能获得⼀个固定的IP。3. 租约管理DHCP服务器通过“租约”概念来管理IP地址的分配时间。租约到期后,如果设备仍在⽹络上,它会⾃动请求续租。● 调整租约时间:租约时间可以根据⽹络的需求进⾏调整,较短的租约时间可以使IP地址更快地回收和重新分配,⽽较⻓的租约时间可以减少⽹络流量和管理⼯作。4. 动态更新DNS记录(DDNS)现代⽹络环境中,DHCP与DNS协同⼯作,当DHCP服务器分配IP地址时,它也可以更新DNS服务器上的记录。● 启⽤DDNS:在DHCP服务器上启⽤动态DNS更新配置,可以确保当DHCP分配的IP地址变更时,相应的DNS记录也会⾃动更新。5. 监控和审计监控DHCP服务器的运⾏状态和审计IP地址的使⽤情况对于维护⽹络安全和效率⾄关重要。● 查看租约信息:定期查看DHCP租约数据库,监控哪些IP地址已被分配,哪些即将到期。● 审计⽇志:保持和审查DHCP服务器的⽇志⽂件,以侦测异常⾏为或配置错误。