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)
意义
当您在这些show
命令中包含该all
选项时,将为锁定数据库中的每个客户端条目提供信息,如与数据库中的条目对应的索引号、客户端标识键、锁定状态、当前状态结束前的秒数、当前状态生效的时间、 以及客户端被锁定的连续次数。
如果要从锁定数据库中删除特定客户端的信息,则必须首先发出相应的 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
变更历史表
是否支持某项功能取决于您使用的平台和版本。使用 功能浏览器 查看您使用的平台是否支持某项功能。