专题二十二:DHCP协议
一、DHCP简介
HCP是Dynamic Host Configuration Protocol的缩写,即动态主机配置协议。DHCP是一个很重要的局域网的网络协议,DHCP使用UDP封装的67和68端口,DHCP客户端使用68端口,DHCP服务器使用67端口进行回应。
DHCP可以提供两种地址分配机制:
动态分配机制:通过DHCP为主机分配一个有使用期限(这个使用期限通常叫做租期)的IP地址。(常用)
静态分配机制:网络管理员通过DHCP为指定的主机分配固定的IP地址,一般基于MAC地址分配。
二、DHCP报文
2.1 DHCP协议组成
DHCP报文包含以下内容:重点可关注Ciaddr、Giaddr、Chaddr、Options这几个字段。
常见optipn字段:
option43:用于无线网络中AP获取AC的IP地址,AP获取到AC的地址后才可以进行CAPWAP隧道建立;
option82:中继代理信息选项,该选项记录了DHCP客户端的位置信息。DHCP中继或DHCP Snooping设备接收到DHCP客户端发送给DHCP服务器的请求报文后,在该报文中添加Option82,并转发给DHCP服务器。
2.2 DHCP工作原理
1、DHCP客户端发送DHCP Discover广播报文来发现DHCP服务器。(询问谁可以为我分配IP地址。)
2、DHCP服务器在收到DHCP Discover报文后,会选取一个未分配的IP地址,向DHCP客户端发送DHCP提供报文(DHCP Offer),此报文中包含IP地址等配置信息。如果存在多个DHCP服务器,每个DHCP服务器都会响应。(告诉DHCP客户端我可以给你提供服务)
3、如果有多个DHCP服务器向DHCP客户端发送DHCP提供报文,DHCP客户端将会选择收到的第一个DHCP提供报文,然后发送DHCP Request报文,报文中包含请求的IP地址。(告诉所有的DHCP服务器我选择哪个服务器给我分配的地址)
4、DHCP服务器在收到DHCP Request报文后,会回应一个DHCP Ack报文。(告诉DHCP客户端我知道了)
2.3 DHCP报文
报文类型 | 含义 |
DHCP DISCOVER | 客户端用来寻找DHCP服务器。 |
DHCP OFFER | DHCP服务器用来响应DHCP DISCOVER报文,此报文携带了各种配置信息。 |
DHCP REQUEST | 客户端请求配置确认,或者续借租期。 |
DHCP ACK | 服务器对REQUEST报文的确认响应, |
DHCP NAK | 服务器对REQUEST报文的拒绝响应。 |
DHCP RELEASE | 客户端要释放地址时用来通知服务器, |
DHCP Discover:由客户端广播查找可用的服务器
DHCP Offer:服务器用来响应客户端的DHCP DIscover报文,并指定相应的配置参数(单播或广播,考试是单播)
DHCP Request:客户端发送给服务器来请求配置参数或者请求配置确认或者续借租期(广播)
DHCP Ack:由服务器到客户端,含有配置参数包括IP地址(单播)
·DHCP Decline:当客户端发现地址已经被使用时,用来通知服务器(通过免费ARP探测IP已经被占用时,主机发送此数据包)(广播)
·DHCP Inform:客户端已经有IP地址时用它来向服务器请求其他的配置参数;
·DHCP NAK:由服务器发送给客户端来表明客户端的地址请求不正确或者租期已经过期;
·DHCP Release:客户端要释放地址时用来通知服务器;
Offer报文扩展:
单独对于dhcp offer来说,到底是单播还是广播,取决于客户端发送的discover报文中的字段“Bootp flags”,它有两个字节,如果最高位为1,代表回复的offer为广播,如果为0,代表回复的offer为单播,其余bits代表reserved,也就是该字段取值为以下时:
1、Bootp flags = 0x8000,offer为广播
2、Bootp flags = 0x0000,offer为单播
其实根据RFC2131可以知道,offer和ack报文广播和单播的出现和client及server端都有关系。
2.4DHCP租期更新
在DHCP(动态主机配置协议)中,地址续租过程确保客户端设备能够继续使用分配的IP地址,从而避免地址冲突和网络中断。续租过程由客户端发起,通过与DHCP服务器通信来延长租约期限。DHCP客户端根据IP地址的剩余租期的不同而产生不同形式的续租请求。下面是DHCP地址续租的详细过程及相关概念
1)租期达到50%时,DHCP客户端会自动以单播的方式向DHCP服务器发送DHCP REQUEST报文,请求更新IP地址租期。如果收到DHCP服务器回应的DHCP ACK报文,则租期更新成功(即租期从0开始计算);如果收到DHCP NAK报文,则重新发送DHCP DISCOVER报文请求新的IP地址。
2)当租期达到87.5%时,如果仍未收到DHCP服务器的应答,DHCP客户端会自动以广播的方式向DHCP服务器发送DHCP REQUEST报文,请求更新IP地址租期。如果收到DHCP服务器回应的DHCP ACK报文,则租期更新成功(即租期从0开始计算);如果收到DHCP NAK报文,则重新发送DHCP DISCOVER报文请求新的IP地址。
3)如果租期时间到时都没有收到服务器的回应,客户端停止使用此IP地址,重新发送DHCP DISCOVER报文请求新的IP地址
2.5 DHCP中继
网络规模较大时,网络内存在不同网段,一台DHCP服务器需要对多个网段分配地址。但是DHCP Discover报文时广播报文,无法穿越广播域发送,所以需要一个中继将DHCP广播报文转发到DHCP服务器上,同时将DHCP服务器的应答报文转发给客户端。
DHCP中继接收到DHCP客户端广播发送的DHCP DISCOVER报文后,主要动作含:检查DHCP报文中的giaddr字段。DHCP报文中的giaddr字段标识客户端网关的IP地址。如果服务器和客户端不在同一个网段且中间存在多个DHCP中继,当客户端发出DHCP请求时,第一个DHCP中继会把自己的IP地址填入此字段,后面的DHCP中继不修改此字段内容。DHCP服务器会根据此字段来判断出客户端所在的网段地址,从而为客户端分配该网段的IP地址。
2.5 DHCP snooping
DHCP Snooping通过在交换机上启用受信任端口和不受信任端口来工作。受信任端口允许DHCP服务器的流量通过,而不受信任端口则限制或过滤DHCP流量,用于连接客户端设备。交换机会检查来自不受信任端口的DHCP消息,并根据预定义的策略决定是否允许这些消息通过。
DHCP Snooping如何防御DHCP攻击
DHCP Snooping通过验证和过滤DHCP消息,确保只有合法的DHCP服务器和客户端能够进行通信,从而有效防止DHCP欺骗和DHCP耗尽攻击。具体来说,DHCP Snooping会创建一个绑定表,记录合法客户端的IP地址、MAC地址和端口信息。每当交换机收到DHCP消息时,它会检查该消息的合法性,并根据绑定表决定是否允许该消息通过。
受信任端口和不受信任端口
在DHCP Snooping中,交换机的端口被划分为受信任端口和不受信任端口:
-
受信任端口:允许DHCP服务器的流量通过的端口,通常用于连接合法的DHCP服务器。
-
不受信任端口:限制或过滤DHCP流量的端口,用于连接客户端设备。来自这些端口的DHCP消息需要经过交换机的验证。
三、DHCP攻击及防范
3.1DHCP饿死攻击
(1)伪造源MAC地址:
攻击原理:攻击者持续大量的向DHCP Server申请IP地址,直至耗尽DHCP Server地址池的IP地址,导致DHCP Server不能给正常的终端分配IP地址。
解决办法:通过DHCP Snooping的MAC地址限制功能,通过限制交换机接口上允许学习到的最多MAC地址数据,防止攻击者发送大量DHCP请求。
(2)伪造Chaddr字段:
攻击原理:攻击者持续大量的向DHCP Server申请IP地址,只在交换机接口上限制MAC地址学习数量无法解决,通过伪造DHCP Discover报文的Chaddr字段(客户端MAC地址),DHCP server针对Chaddr字段分配IP地址,直至DHCP地址池耗尽。
解决办法:通过配置DHCP Snooping,通过DHCP Request报文中的Chaddr资源,如果MAC与Chaddr不一致就丢弃。
3.2 DHCP仿冒者攻击
攻击原理:在网络上随意添加一台DHCP服务器,它可以为客户端分配IP地址以及其他网络参数。如果该DHCP服务器为用户分配错误的IP地址和其他网络参数,将会对网络造成非常大的危害。
解决办法:通过DHCP Snooping功能将接口分为信任接口和非信任接口,信任接口正常接收DHCP ACK、DHCP Offer报文,非信任接口收到DHCP Offer、DHCP ACK、DHCP NACK报文直接丢弃。
3.3DHCP 中间人攻击
攻击原理:利用ARP机制,使DHCP客户端学习到DHCP serve IP与攻击者的MAC地址映射关系,又让DHCP server学习到DHCP客户端与攻击者IP的映射关系(两头欺骗),这样DHCP客户端与服务端之间交互的IP报文都经过攻击者中转。
解决办法:通过DHCP Snooping的绑定表工作模式,使用ARP报文中的“源IP+源MAC”匹配DHCP Snooping绑定表,如果匹配就转发,不匹配就丢弃。
四、DHCP的配置
某企业将DHCP服务器部署在核心层设备上,DHCP服务器与企业内的终端不在同一个网段。企业希望使用该DHCP服务器为终端动态分配IP地址。
配置思路:
配置设备作为DHCP中继的配置思路如下:
在汇聚层设备RouterA(用户网关)上配置DHCP中继,实现设备作为DHCP中继转发终端与DHCP服务器之间的DHCP报文。
在核心层设备RouterB上,配置基于全局地址池的DHCP服务器,实现DHCP服务器从全局地址池中选择IP地址分配给企业终端。
配置步骤:
(1)在RouterB上配置基于全局地址池的DHCP服务器功能
# 使能DHCP服务。
<Huawei> system-view
[Huawei] sysname RouterB
[RouterB] dhcp enable //开启DHCP功能
# 配置接口工作在全局地址池模式。
[RouterB] interface ethernet 2/0/0
[RouterB-Ethernet2/0/0] ip address 10.10.20.2 24
[RouterB-Ethernet2/0/0 dhcp select global //全局地址池
[RouterB-Ethernet2/0/0] quit
# 创建地址池并配置相关属性。
[RouterB] ip pool pool1 //创建名为pool1的地址池
[RouterB-ip-pool-pool1] network 10.20.20.0 mask 24 //分配IP地址网段
[RouterB-ip-pool-pool1] gateway-list 10.20.20.1 //分配网关IP
[RouterB-ip-pool-pool1] dns-list 8.8.8.8 //分配DNS地址
[RouterB-ip-pool-pool1] lease 1 //租期为1天,{ day day [ hour hour [ minute minute ] ] | unlimited }
[RouterB-ip-pool-pool1] quit
(2)在RouterA上配置DHCP中继
# 在接口下使能DHCP中继功能。
[RouterA] dhcp enable //开启DHCP功能
[RouterA] interface ethernet 2/0/0
[RouterA--Ethernet2/0/0] ip address 10.20.20.1 24
[RouterA--Ethernet2/0/0] dhcp select relay //配置DHCP中继
[RouterA--Ethernet2/0/0] dhcp relay server-ip 10.10.20.2 //指向dhcp服务器IP10.10.20.2
[RouterA--Ethernet2/0/0] quit
在RouterA上配置缺省路由
[RouterA] ip route-static 0.0.0.0 0.0.0.0 10.10.20.2
(3)在RouterB上配置缺省路由
[RouterB] ip route-static 0.0.0.0 0.0.0.0 10.10.20.1
验证配置结果
# 在RouterA上执行命令display dhcp relay interface vlanif 100命令用来查看DHCP中继的配置信息。
[RouterA] display dhcp relay interface vlanif 100DHCP relay agent running information of interface Vlanif100 :Server IP address [00] : 10.10.20.2Gateway address in use : 10.20.20.1
# 在RouterB上使用display ip pool name pool1命令用来查看IP地址池的分配情况,“Used”字段表示已经分配出去的IP地址数量
五、软考真题
2021年11月网络工程师:
在大型无线网络中,AP通常通过DHCP Option()来获取AC的地址。
A.43 B.60
C.66 D.138
【解析】A,Option43是用于AP获取AC地址的字段。
2023年11月网络规划设计师:
DHCP协议中,用于客户端向服务器确认分配IP地址的消息是(1),该消息是一个(2)消息
(1)
A.DHCP Discover B.DHCP ACK
C.DHCP Request D.DHCP Offer
(2)
A.组播 B.单播
C.广播 D.多播
【解析】DHCP客户端发送的报文是A和C,其中C选项是确认分配的IP,DHCP客户端向服务端发送的是广播。答案是C、C。