RADIUS 重新身份验证作为 DHCP 用户 RADIUS CoA 的替代方法
RFC 5176“远程 认证拨入用户服务 (RADIUS) 的动态授权扩展中指定的 RADIUS 授权变更 (CoA) 消息用于激活或停用客户端服务,以及在不注销客户端的情况下更改某些客户端会话特征,从而避免中断订阅者。在某些情况下,最好使用对订阅者进行 重新身份验证 作为不间断更改客户端会话服务和特征的方法。
例如,以下客户部署模式都需要在会话生命周期内更改属性。
-
住宅用户 — 住宅用户可在会话的整个生命周期内通过在线选择服务或直接致电提供商来更改服务计划。通过更改 DHCP 客户端代理远程 ID 的值,服务计划中的更改将传播到 DHCP 本地服务器。对于 DHCPv4 客户端,代理远程 ID 在选项 82 子选项 2 中传送,在选项 37 中(对于 DHCPv6 客户端)。
配置重新认证时,检测到服务计划的变化,触发重新认证;新的服务计划和任何更改的属性将由 RADIUS 服务器返回并为订阅者实施。
-
业务订阅者 - 在任何给定会话期间,业务订阅者通常需要更改属性(尤其是成帧路由)。所需的属性更改不是由服务计划的更改启动的。
配置重新身份验证后,租约续订协商将触发重新身份验证。属性或服务的任何更改都将在 RADIUS 服务器的 Access-Accept 消息中提供,并为订阅者实施。
使用重新身份验证的两种替代方法都可以更改比重新身份验证更多的会话特征。CoA 请求更改特征,且不会中断用户。将订阅者注销然后重新注销可以改变更多会话特征,但显然会造成中断。
重新认证的好处
-
在不使用 CoA 请求的情况下更新或修改订阅者会话属性和服务计划。
-
简化因订阅者发起的频繁更改而产生的服务激活。
-
在双堆栈、单会话配置中按系列启用重新验证。
-
通过 CLI 配置或 RADIUS VSA 控制重新身份验证。
功能性
DHCPv4 和 DHCPv6 均支持重新验证。当 DHCP 本地服务器收到来自 DHCP 客户端的续订、重新绑定、发现或请求消息时,可能会触发该警报。从 Junos OS 18.1R1 版开始,发现和请求消息支持重新验证。对发现和请求消息的支持意味着,如果具有绑定客户端的 CPE 重新启动,并且客户端发送其中一条消息以恢复会话,则重新验证使 authd 能够获取为订阅者所做的任何更新。
重新验证行为按如下方式确定:
-
该
reauthenticate lease-renewal语句指定在收到四条受支持消息中的任何一条时触发重新验证。 -
该
reauthenticate remote-id-mismatch语句指定仅当收到的消息包含 DHCP 客户端的代理远程 ID 值更改时,才会触发重新验证。属性值包括订阅者服务计划的名称,因此值的更改表示订阅者的服务发生了变化。 -
瞻博网络
reauthentication-on-renewVSA (26-206) 在登录时从 RADIUS 服务器为订阅者返回的 Access-Accept 消息中返回值为 1 时,在收到四条消息中的任何一条消息时,都会触发重新验证。值为 0 将禁用重新验证。每当收到 VSA 值时,它都会存储在会话数据库中。此 VSA 启用重新身份验证后,每次尝试重新验证时都会对其进行检查。如果该值已更改为 0(即,如果后续 Access-Accept 返回的 VSA 值为 0),则该订阅者的重新身份验证过程将停止。CLI 配置(
reauthenticate语句)和“续订时重新验证”行为是累加的。禁用 VSA 重新验证仅在未配置语句时reauthenticate生效。使用任一选项配置该语句时reauthenticate,它将覆盖 VSA 值 0。在没有 CLI 配置的情况下,VSA 可以自行启用重新身份验证。
重新验证过程与原始身份验证过程几乎相同。触发重新身份验证时,本地服务器上的 jdhcpd 进程会向 authd 提交身份验证请求,而 authd 又会向 RADIUS 服务器提交 Access-Request 消息以请求第二次身份验证。
对于 或 none之外的任何身份验证顺序radius,重新验证请求都失败。authd 进程会为任何此类请求返回否定确认 (NAK)。
此 Access-Request 包括原始 Access-Accept 消息中返回的 RADIUS 状态和类属性。这些属性使 RADIUS 服务器能够区分重新验证请求和登录(身份验证)请求。
RADIUS 服务器使用订阅者的新属性向 authd 返回一条 Access-Accept 消息。authd 进程会向 jdhcpd 发送包含更改的确认 (ACK),后者会向 DHCP 客户端发送属性已更改的 DHCP 产品。DHCP 协商照常进行,如 图 1 所示,用户会话继续使用新的属性值。当重新身份验证包括服务计划中的更改时,RADIUS 服务器如果接受请求,则会返回包含任何其他更改属性的新计划,如 图 2 所示。如果托管 DHCP 客户端的 CPE 在更改服务计划的过程中重新启动,则支持使用新计划重新验证,而不会中断服务。
如果 RADIUS 服务器拒绝重新身份验证请求或超时,authd 会向 jdhcpd 发送 NAK,后者会审查包含的错误代码。如果错误代码指示超时,jdhcpd 会向 DHCP 客户端发送 ACK,并使用原始属性和服务维护订阅者会话。对于任何其他错误代码,jdhcpd 会将 DHCPv4 NAK 或 DHCPv6 REPLY(生存期值设置为 0)作为逻辑 NAK 发送,启动订阅者注销,并从会话数据库中删除订阅者。
表 1 描述了当同一订阅者正在处理不同的请求类型时,authd 如何处理请求。
| 请求正在进行中 |
收到的同一订阅者的其他请求 |
行动 |
|---|---|---|
| 重新认证 |
CoA |
authd 使用 NAK 响应 CoA。 |
| CoA |
重新认证 |
authd 将重新认证请求排队,直到处理 CoA,然后处理重新认证请求。 |
| 重新认证 |
断开连接 |
authd 通过 NAK 响应断开连接。 |
| 断开连接 |
重新认证 |
authd 使用 NAK 响应重新验证请求,并继续注销订阅者。 |
由于网络家族不会在重新身份验证过程中终止或重新启动,因此不会根据订阅者安全策略镜像重新评估订阅者内容。请勿用作反映重新验证过程中可能更改的任何属性的用户安全策略的触发器。
在绑定客户端后,如果重新身份验证导致 DHCPv6 用户的 IP 或 IPv6 地址发生变化,DHCPv6 服务器将评估地址更改请求。服务器在应答 PDU 的身份关联 (IA) 中向客户端返回状态代码。从 Junos OS 18.4R1 版开始,当 DHCPv6 服务器发现地址问题时,除了之前支持的 NoAddrsAvail 和 NoPrefixAvail 代码外,还支持 NotOnLink 状态代码。这些状态代码定义如下:
-
NoAddrsAvail (2) — 服务器无法为客户端请求中的 IA 分配任何地址。它返回没有地址和 NoAddrsAvail 的 IA。
-
NotOnLink (4) — 服务器确定客户端请求中任何 IA 中一个或多个地址的前缀不适用于连接到客户端的链路。此代码也用于重新验证失败(RADIUS 访问-拒绝)。
-
NoPrefixAvail (6) — 服务器没有可用于客户端请求中的 IA 的前缀。
如果客户端收到 NotOnLink 状态代码,它可以发送没有任何地址的另一个请求,也可以重启协商过程。如果 DHCPv6 本地服务器发送请求,则会忽略该请求,并期望开始新的重新协商。
双堆栈订阅者
在早于 Junos OS 18.1R1 的版本中,双栈 DHCP 订阅者被视为独立的客户端会话。每个堆栈独立续订并获得新服务。
从 Junos OS 18.1R1 版开始,双堆栈、单会话订阅者支持按系列身份验证和重新身份验证。双堆栈、单会话用户通常是在 1:1 接入模式中拥有自己的 VLAN 的家庭。该家庭表示为在会话数据库中具有单个会话的单个订阅者,但它具有两个单独的 DHCP 绑定,每个系列一个:DHCPv4 和 DHCPv6。因此,当会话中的每个家族登录或尝试重新验证时,authd 会发送单独的访问请求:
-
当用户会话处于 DHCP 初始化状态时收到发现或请求消息时,将进行按系列身份验证。
-
如果同时配置了重新身份验证和按需地址分配,并且在家族会话处于 DHCP 绑定状态时收到续订、重新绑定、发现或请求消息,则会按系列重新进行身份验证。
按需地址分配会导致在登录时为每个家庭单独分配地址。必须为双堆栈、单会话订阅者配置按需地址分配,否则按系列身份验证且无法启用重新身份验证。对于重新验证,无论是在CLI中配置还是通过重新验证VSA(26-206)配置,都是如此。
认证和重新认证均按系列处理。在另一个(第二个)家族触发身份验证或重新身份验证之前,将先处理第一个触发该过程的家族。在绑定第一个家族之前,来自第二个家族的消息将被忽略。然后处理第二个家庭请求。
如果只有一个双堆栈单会话家族登录,则只处理一次身份验证。仅处理一个客户端家族的重新身份验证。
authd 进程将属性分类为属于 DHCPv4 或 DHCPv6 家族的属性,并相应地对其进行标记。对于身份验证和重新身份验证,根据发起请求的家族,authd 包括 DHCP 选项 VSA (26-55) 或 DHCPv6 选项 VSA (26-65)。根据其配置,RADIUS 服务器可能仅返回启动请求的家族( 请求家族)或两个家族的信息。
当 authd 在 Access-Accept 消息中收到属性时,家族标记使 authd 能够确定哪些属性对应于请求家族或其他(非请求)家族。只有请求家族的属性才会写入会话数据库。
对于重新身份验证请求,authd 会将返回的属性与会话数据库进行比较,以确定 RADIUS 服务器上是否进行了任何更改。同样,只有与请求家族对应的更改才会写入会话数据库,从而覆盖旧值。
重新验证期间的更改将按如下方式处理:
-
属性(地址除外)—当 authd 确定请求家族的一个或多个属性已更改时,它会将新值存储在会话数据库中。authd 通知 jdhcpd 后,会向 DHCP 客户端发送包含新属性值的 ACK。
-
地址或地址池 — 当 authd 检测到请求家族的更改时,会通知 DHCP 本地服务器,后者依次向 DHCP 客户端发送 NAK (DHCPv4) 或逻辑 NAK (DHCPv6)。
如果请求家族是唯一绑定的家族,则 jdhcpd 会正常注销该订阅者。如果非请求家族也被绑定,则 jdhcpd 会停用请求家族,但使非请求家族绑定保持不变,不会中断对非请求家族的服务。请求家族的停用对非请求家族随后触发的重新认证没有影响。
当停用的家族随后发送发现或请求消息以重新登录时,将像往常一样发送 Access-Request 以进行重新身份验证,并在 Access-Accept 中收到的新地址应用于订阅者。
如果 RADIUS 服务器使用访问拒绝消息响应身份验证或重新身份验证请求,authd 会通知 DHCP 本地服务器,而本地服务器又会向 DHCP 客户端发送 NAK (DHCPv4) 或逻辑 NAK (DHCPv6)。请求家族被正常终止;家族将停用,订阅用户将注销。然后,非请求家族将停用并注销,但客户端不会收到有关终止的通知。
如果在非请求家族上运行活跃度检测,则客户端会在家族终止时检测到连接丢失,随后向 DHCP 本地服务器发送发现或请求消息。但是,如果未运行活跃度检测,则在重新绑定时间(T2,选项 59)到期且服务丢失之前,客户端不会检测到连接丢失。根据租约期限,这可能需要很长时间。
为两个地址族配置活跃度检测,以缩短检测连接丢失的时间。有关配置活性检测的信息,请参阅 DHCP 活性检测概述 。
数据包流
下图描述了 DHCP 客户端、DHCP 服务器和 RADIUS 服务器之间用户会话的初始协商顺序。客户端的服务计划在 DHCPv4 选项 82、子选项 2 或 DHCPv6 选项 37 中包含的远程 ID 的第二个子字符串中指定。
初始协商
图 1 说明了 DHCP 客户端、DHCP 服务器和 RADIUS 服务器之间初始协商的步骤顺序。图中使用了以下术语:
CPE — 客户端设备(充当 DHCP 客户端或订阅者)。
OLT—光线路终结器—例如,DSL 接入多路复用器 (DSLAM) 或其他聚合设备。
MX 系列设备 — 用作 DHCP 服务器。
支持重新验证的 RADIUS 属性
表 2 列出了在 RADIUS 访问接受消息中收到时,在重新验证期间可以处理的 RADIUS 标准属性和 VSA,并介绍了 authd 如何处理属性更改。属性处理与 CoA 请求处理一致。只有当在 Access-Accept 消息中收到新值或新属性时,重新验证用户会话的特征才会更改。
| 属性编号 |
属性名称 |
处理结果 |
|---|---|---|
| 8 |
帧 IP 地址 |
新值存储在订阅者会话数据库中;旧数据将被覆盖。 |
| 22 |
成帧路由 |
新值存储在订阅者会话数据库中;附加旧数据。 |
| 24 |
省/州 |
新值存储在订阅者会话数据库中;旧数据将被覆盖。 |
| 25 |
类 |
新值存储在订阅者会话数据库中;旧数据将被覆盖。 |
| 26-4 |
主 DNS |
新值存储在订阅者会话数据库中;旧数据将被覆盖。 |
| 26-5 |
辅助 DNS |
新值存储在订阅者会话数据库中;旧数据将被覆盖。 |
| 26-6 |
主 WINS |
新值存储在订阅者会话数据库中;旧数据将被覆盖。 |
| 26-7 |
辅助 WINS |
新值存储在订阅者会话数据库中;旧数据将被覆盖。 |
| 26-55 |
DHCP 选项 |
值会发送到 DHCP 本地服务器,用于处理对用户 DHCP 配置的更改。 |
| 26-65 |
激活服务 |
authd 进程将 VSA 中的服务列表与该订阅者会话中已处于活动状态的服务进行比较。
例如,假设服务 A 和 B 在会话上处于活动状态,但 VSA 仅包含服务 B 和 C。服务 A 不在 VSA 列表中,并且已停用。服务 C 在列表中,但当前未激活,因此 authd 会激活 C。服务 B 已激活且在列表中,因此它保持活动状态。 |
| 26-161 |
IPv6 委托池名称 |
新值存储在订阅者会话数据库中;旧数据将被覆盖。 |
| 26-206 |
续订时重新验证 |
如果值为 1(启用),则 authd 将该值添加到订阅者会话数据库(如果该值尚不存在)。 如果值为 0(禁用)并且数据库中已存在值 1,则 authd 将数据库值设置为 0。 如果消息中的值丢失或无效,并且数据库中已存在值,则 authd 会从数据库中删除该值。 |
| 26-207 |
DHCPv6 选项 |
值会发送至 DHCPv6 本地服务器,以处理对用户 DHCP 配置的更改。 |
| 88 |
框架池 |
新值存储在订阅者会话数据库中;旧数据将被覆盖。 |
| 97 |
Framed-IPv6 前缀 |
新值存储在订阅者会话数据库中;旧数据将被覆盖。 |
| 100 |
帧 IPv6 池 |
新值存储在订阅者会话数据库中;旧数据将被覆盖。 |
| 123 |
Delegated-IPv6-Prefix |
新值存储在订阅者会话数据库中;旧数据将被覆盖。 |
| 168 |
Framed-IPv6 地址 |
新值存储在订阅者会话数据库中;旧数据将被覆盖。 |
变更历史表
是否支持某项功能取决于您使用的平台和版本。使用 功能资源管理器 确定您的平台是否支持某个功能。
