DHCP 短周期保护
DHCP 短周期保护,抵御频繁的简短或失败的客户端会话
在大规模网络中,大量 DHCP 客户端协商在建立会话之前都失败,导致路由器和外部身份验证服务器的负载过高。某些 CPE 设备在出现故障时会自动重试协商,有些设备的重试间隔很短。恶意客户端可能会通过发送重复的频繁登录请求来发起身份验证攻击。这些事件可能会导致路由器和外部身份验证服务器上出现重大负载。
从 Junos OS 18.2R1 版开始, DHCP 短周期保护(也称为 DHCP 客户端锁定)使路由器能够识别并临时锁定不断失败协商且协商周期很短的客户端以及频繁完成连接但在登录后不久退出的客户端,从而减少这些负载。
通过临时锁定已识别的客户端,锁定 期呈指数级增长,从而阻止已识别的客户端访问。路由器在被锁定时,会丢弃 DHCP 发现或请求这些客户端的消息。路由器按 DHCPv4 客户端的客户端标识符或 DHCPv6 客户端的 DHCP 唯一标识符 (DUID) 跟踪客户端。这两种类型的客户端标识符均可称为客户端密钥。客户端密钥使 DHCP 服务器能够将客户端与其租用和配置参数相关联。使用用于 DHCP 短周期保护跟踪的客户端密钥,路由器可以阻止一个客户端协商一个会话,同时允许使用相同逻辑接口的其他客户端成功协商会话。
客户端的初始锁定期很短。这里的目标是不会对合法客户端产生负面影响,例如,那些只是失败一次或定期登录以检查其电子邮件,然后再次退出的客户端。短周期保护可以针对那些持续未能进行协商或频繁登录和退出的客户端,从而减少路由器上的连接处理负载和外部认证服务器上的身份验证负载。其效果是通过延迟不会取得进展的客户端会话而有利于完成的会话来提高吞吐量。
可能导致 DHCP 客户端会话失败或短期的情况
可能导致客户端会话失败或短期的情况包括:
由于 RADIUS 数据库中缺少相应条目或登录尝试不当,外部 AAA 服务器(例如 RADIUS 或 Diameter)拒绝身份验证。
由于网络故障或配置错误,路由器或外部身份验证服务器无法访问。
内存资源不足,无法创建动态用户接口。
CPE 协议协商失败。
登录成功后不久客户端退出;在关闭会话之前,此操作会创建一个完全协商和配置的客户端会话。
DHCP 短周期保护的工作原理
默认情况下,DHCP 短周期保护在路由器上处于禁用状态。在全局、组或接口级别包括 short-cycle-protection
语句来启用它时,路由器将针对静态和动态逻辑接口上的 DHCP 会话请执行以下操作:
检测短周期客户端会话(也称为 短周期事件),并根据以下事件锁定客户端:
E0:jdhcpd 将客户端会话声明为活动的时间。
E1:jdhcpd 声明客户端会话应被拆除的时间。
E2:jdhcpd 从数据库中删除客户端会话条目的时间。
当 E0 和 E1 之间的间隔小于或等于 60 秒时,将发生短周期事件。如果间隔超过 60 秒,则退出被视为正常。如果路由器将会话声明为短期,则会在时间 E2 将客户端添加到锁定数据库。
通过阻止连接到路由器来临时锁定指定的 DHCP 客户端。
锁定期间,路由器会从客户端丢弃协商数据包(DHCP 发现和请求消息),直到锁定期到期。锁定期到期后,客户端可以恢复正常连接协商。
您可以使用语句指定最小和最大长度
short-cycle-protection
,从而为锁定期设置范围。您必须同时指定最小值和最大值。跟踪客户端重复的短周期事件之间的时间,以确定是否增加后续短周期事件的锁定时间。事件之间的间隔与 宽限时间阈值进行比较。默认情况下,宽限时间阈值为 900 秒,但如果该值大于 900 秒,则会自动设置为最大锁定时间。
如果在宽限期内未尝试后续协商,则客户端条目将从锁定数据库中移除。
如果在达到宽限阈值之前尝试后续协商,则将其视为另一个短周期事件,并增加锁定处罚。每次在宽限时间内尝试协商时,处罚都会呈指数级增加。
初始锁定期基于配置的最大值。额外的处罚计算方法如下,其中 n 是宽限期内发生的连续短周期事件数:
锁定时间 =(锁定最短时间)x [2(n-1)]
例如,最小持续时间为 1 秒,最大持续时间为 300 秒时,初始锁定期为 1 秒:随后的处罚增加到2秒,然后是4秒,8秒,16秒,32秒,64秒,128秒,256秒,最后300秒。最后锁定期为 300 秒(而非 512 秒),因为任何点球都可能超过锁定范围的最大值。
如果锁定时间达到最大值,则每个后续锁定期的锁定时间均保持不变,直到短周期事件之间的时间大于宽限阈值。
锁定条件终止
DHCP 客户端被锁定时,锁定条件将持续到所有锁定计时器都过期,但发生以下任一情况 除外 :
通过发出以下操作命令之一,您可以管理性地清除锁定条件:
clear dhcp relay lockout-entries
clear dhcp server lockout-entries
clear dhcpv6 relay lockout-entries
clear dhcpv6 server lockout-entries
重置配置锁定的客户端会话的 FPC。
您重置路由引擎。
当发生上述任何一个事件时,jdhcpd 会终止锁定,并清除所有受影响的客户端会话的锁定历史记录。允许已发布的客户端再次协商。由于没有保留的历史记录,如果其中一个客户端发生后续短周期事件,则锁定期以最小值开始。
从配置了 remove-when-no-subscribers
该接口的底层物理接口中移除动态 VLAN 或多路分离 VLAN 逻辑接口时,受影响客户端的锁定将持续到所有计时器都过期。如果在所有计时器到期之前重新创建逻辑接口,则锁定状态将应用于重新创建的逻辑接口。
使用 DHCP 短周期保护的优势
减少路由器上的控制平面负载过多,以及外部机构服务器上的身份验证、授权和调配负载。
减少处理 DHCP 控制数据包以及协商和终止短期连接所需的资源。
对于失败或短期客户端会话的客户端,临时推迟后续尝试,而会话可以成功完成并持续超过短时间。
减少在外部身份验证服务器(如 RADIUS 和 Diameter)上验证和终止这些连接所需的资源。
实现锁定单个故障或短期 DHCP 会话,而不会中断同一接口上的其他 DHCP 会话。
由于 DHCP 短周期保护会通过其唯一的客户端 ID 识别每个客户端会话,因此路由器可以只锁定有问题的 DHCP 客户端,同时使同一接口上的其他 DHCP 客户端能够成功协商连接。
配置 DHCP 短周期保护
在大规模网络中,大量 DHCP 客户端协商在建立会话之前都失败,导致路由器和外部身份验证服务器的负载过高。您可以在路由器上启用 DHCP 短周期保护,以识别经常登录或短暂登录或持续连接失败的 DHCP 客户端,然后将客户端锁定为无法访问,并丢弃来自这些客户端的后续请求,直到锁定计时器到期。对于反复频繁短暂登录的客户端,初始锁定时间很短,不会产生明显影响。随着这些短暂登录的继续,锁定期呈指数级增加。短周期保护针对那些持续未能进行协商或频繁登录和退出的客户端,从而减少路由器上的连接处理负载以及外部身份验证服务器上的身份验证、授权和调配负载。
您可以为 DHCPv4 中继、DHCPv6 中继、DHCPv4 本地服务器和 DHCPv6 本地服务器配置锁定期的范围。您可以为所有中继代理或本地服务器接口、一组接口或一个组内的特定接口全局配置句点。对于 DHCPv4 中继和本地服务器,您还可以为双堆栈组配置锁定。
启用短周期保护时,您必须指定锁定期的最小和最长持续时间。
要为 DHCPv4 中继代理配置锁定范围:
指定最小和最大锁定时间。
对于所有 DHCPv4 中继代理:
[edit forwarding-options dhcp-relay] user@host# set short-cycle-protection <lockout-max-time seconds> <lockout-min-time seconds>
对于一组特定的 DHCPv4 中继接口:
[edit forwarding-options dhcp-relay] user@host# set group group-name short-cycle-protection <lockout-max-time seconds> <lockout-min-time seconds>
对于指定 DHCPv4 中继接口组中的特定接口:
[edit forwarding-options dhcp-relay] user@host# set group group-name interface interface-name short-cycle-protection <lockout-max-time seconds> <lockout-min-time seconds>
对于 DHCPv4 中继双堆栈组:
[edit forwarding-options dhcp-relay] user@host# set dual-stack-group dual-stack-group-name short-cycle-protection <lockout-max-time seconds> <lockout-min-time seconds
要为 DHCPv6 中继代理配置锁定范围:
指定最小和最大锁定时间。
对于所有 DHCPv6 中继代理:
[edit forwarding-options dhcp-relay dhcpv6] user@host# set short-cycle-protection <lockout-max-time seconds> <lockout-min-time seconds>
对于一组特定的 DHCPv6 中继接口:
[edit forwarding-options dhcp-relay dhcpv6] user@host# set group group-name short-cycle-protection <lockout-max-time seconds> <lockout-min-time seconds>
对于指定 DHCPv6 中继接口组内的特定接口:
[edit forwarding-options dhcp-relay dhcpv6] user@host# set group group-name interface interface-name short-cycle-protection <lockout-max-time seconds> <lockout-min-time seconds>
要为 DHCPv4 本地服务器配置锁定范围:
指定最小和最大锁定时间。
对于所有 DHCPv4 本地服务器:
[edit system services dhcp-local-server] user@host# set short-cycle-protection <lockout-max-time seconds> <lockout-min-time seconds>
对于一组特定的 DHCPv4 本地服务器接口:
[edit system services dhcp-local-server] user@host# set group group-name short-cycle-protection <lockout-max-time seconds> <lockout-min-time seconds>
对于指定 DHCPv4 本地服务器接口组内的特定接口:
[edit system services dhcp-local-server] user@host# set group group-name interface interface-name short-cycle-protection <lockout-max-time seconds> <lockout-min-time seconds>
对于 DHCPv4 本地服务器双堆栈组:
[edit system services dhcp-local-server] user@host# set dual-stack-group dual-stack-group-name short-cycle-protection <lockout-max-time seconds> <lockout-min-time seconds>
要为 DHCPv6 本地服务器配置锁定范围:
指定最小和最大锁定时间。
对于所有 DHCPv6 本地服务器:
[edit system services dhcp-local-server dhcpv6] user@host# set short-cycle-protection <lockout-max-time seconds> <lockout-min-time seconds>
对于一组特定的 DHCPv6 本地服务器接口:
[edit system services dhcp-local-server dhcpv6] user@host# set group group-name short-cycle-protection <lockout-max-time seconds> <lockout-min-time seconds>
对于指定 DHCPv6 本地服务器接口组内的特定接口:
[edit system services dhcp-local-server dhcpv6] user@host# set group group-name interface interface-name short-cycle-protection <lockout-max-time seconds> <lockout-min-time seconds>
验证和管理 DHCP 短周期保护
目的
查看或清除有关 DHCP 短周期保护操作的信息。
使用受支持的 show
和 clear
命令管理和显示有关 DHCP 中继代理和 DHCP 本地服务器的短周期保护操作的信息。您可以显示有关所有锁定条目的信息,或者仅显示由其数据库索引号标识的单个条目的信息。
行动
要显示 DHCPv4 或 DHCPv6 中继代理的短周期保护信息:
user@host> show dhcp relay lockout-entries (all | index index) user@host> show dhcpv6 relay lockout-entries (all | index index)
要清除 DHCPv4 或 DHCPv6 中继代理的短周期保护信息:
user@host> clear dhcp relay lockout-entries (all | index index) user@host> clear dhcpv6 relay lockout-entries (all | index index)
要显示 DHCPv4 或 DHCPv6 本地服务器的短周期保护信息:
user@host> show dhcp server lockout-entries (all | index index) user@host> show dhcpv6 server lockout-entries (all | index index)
要清除 DHCPv4 或 DHCPv6 本地服务器的短周期保护信息:
user@host> clear dhcp server lockout-entries (all | index index) user@host> clear dhcpv6 server lockout-entries (all | index index)
意义
当您将 all
选项与这些 show
命令一起时,将针对锁定数据库中的每个客户端条目提供信息,例如与数据库中的条目对应的索引号、客户端识别键、锁定状态、当前状态直到结束的秒数、当前状态已生效多久、 以及客户端被锁定的连续次数
如果想要从特定客户端的锁定数据库中移除信息,必须首先发出带有确定客户端条目索引选项的相应 show
命令 all
。然后,您可以使用命令指定索引 clear
。
在以下示例中,您显示 DHCPv4 中继代理的所有锁定客户端条目,以查找特定客户端的索引号,然后仅清除该条目并验证它是否已被删除:
user@host> show dhcp relay lockout-entries all Index Key State Expires(s) Elapsed(s) Count 1 00:00:5E:00:53:00 LT 30 5200 2 2 00:00:5E:00:53:11 GT 120 780 2 3 00:00:5E:00:53:22 LT 180 2300 1 user@host> clear dhcp relay lockout-entries index 2 user@host> show dhcp relay lockout-entries all Index Key State Expires(s) Elapsed(s) Count 1 00:00:5E:00:53:00 LT 30 5200 2 3 00:00:5E:00:53:22 LT 180 2300 1
在以下示例中,将显示 DHCPv6 本地服务器的所有锁定客户端条目,然后清除所有条目并验证是否已删除:
user@host> show dhcp relay lockout-entries all Index Key State Expires(s) Elapsed(s) Count 1 00:00:5E:00:53:00 LT 30 5200 2 2 00:00:5E:00:53:11 GT 120 780 2 3 00:00:5E:00:53:22 LT 180 2300 1 user@host> clear dhcp relay lockout-entries all user@host> show dhcp relay lockout-entries all