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-entriesclear dhcp server lockout-entriesclear dhcpv6 relay lockout-entriesclear 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
变更历史表
是否支持某项功能取决于您使用的平台和版本。使用 功能资源管理器 确定您的平台是否支持某个功能。