问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

RADIUS协议的可靠性机制详解

创作时间:
作者:
@小白创作中心

RADIUS协议的可靠性机制详解

引用
1
来源
1.
https://info.support.huawei.com/hedex/api/pages/EDOC1100277650/AZM1016J/04/resources/vrp/feature_aaa_0017.html

RADIUS(Remote Authentication Dial-In User Service)协议是网络认证、授权和计费(AAA)的重要组成部分。为了确保用户接入认证的可靠性和安全性,RADIUS协议设计了多种机制来应对网络环境中的各种挑战。本文将详细介绍RADIUS协议的可靠性机制,包括服务器状态探测、主备模式、负载分担模式、报文重传机制以及基于DTLS的安全传输机制。

RADIUS服务器的可用性和可维护性是用户接入认证的基本条件,当设备与RADIUS服务器之间无法通信时,RADIUS服务器不能对用户进行认证和授权。RADIUS客户端支持对RADIUS服务器的状态进行探测。

RADIUS协议采用UDP协议来保证数据传输的实时性,但在网络条件不好的情况下,UDP可能会带来传输过程中的丢包问题。为了提高数据传输的可靠性,RADIUS支持备用服务器机制和重传机制。在实际应用场景中,如果设备与RADIUS服务器之间连接通过了不可信网络,可以在设备与RADIUS服务器之间叠加IPsec/Macsec业务,增强通讯的安全性和可靠性。

RADIUS协议使用的MD5算法为弱算法,为保障管理员用户的安全性,RADIUS支持数据包传输层安全协议(Datagram Transport Layer Security,DTLS)。DTLS是基于传输层安全协议(Transport Layer Security,TLS)定义的,可用于UDP传输的安全协议。

服务器状态探测

RADIUS客户端支持在登录时对服务器状态进行检测,根据服务器的应答情况,确认服务器的实时状态。有助于识别哪些服务器处于Up状态,以便实时处理用户的请求报文。

服务器组的探测时间到期后,RADIUS客户端将根据服务器组的状态发送探测报文。

在主备模式中,探测报文发给主服务器和一部分备份服务器。如果这些服务器的状态都是Down,探测报文将发给服务器组内的所有服务器。在负载分担模式下,探测报文发送给所有的服务器。开始探测时,RADIUS客户端发送ACCESS-REQUEST报文给服务器,报文包含用户名和随机的密码。如果服务器返回ACCESS-REJECT/ACCESS-CHALLENGE报文,RADIUS客户端标记服务器的状态为Up,否则标记服务器的状态为Down。

主备模式

RADIUS服务器模板支持配置一个主服务器和零个或多个备份服务器。当主服务器存在并且处于活跃状态时,RADIUS选择主服务器处理用户请求,否则RADIUS选择备份服务器处理用户请求。

RADIUS服务器的选择算法为主备备份时:第一个配置的服务器为主用服务器,其余的为备用服务器。主服务器down后,才会选择备服务器。RADIUS主用服务器的具体选择规则如下:

第一次发送报文时
首先选择状态为UP的主服务器,如果没有状态为UP的服务器则选择第一个配置的服务器。

报文超时重传时

如果以前已经选择好了服务器,而且没有达到重传次数,则继续向该服务器发送;

  • 如果达到重传次数,且主服务器超时,则选择向最近一次收到报文的那个服务器发送,如果没有这样的服务器或者最近一次收到报文的服务器已经发送过则采用轮询的方式选择下一个UP的备服务器,如果没有UP的备服务器,则找下一个配置的备服务器;
  • 如果达到重传次数,且备服务器超时,则采用轮询的方式选择下一个UP的备服务器,如果没有UP的备服务器,则找下一个配置的备服务器。
    RADIUS客户端接收到AAA请求时,首先判断主服务器是否存在并且处于Up状态。如果存在且处于Up状态,选择主服务器处理请求报文,否则选择第一个备份服务器处理用户请求报文。只要主服务器处于可用状态,主服务器将处理用户请求报文,否则由备份服务器处理用户请求报文。

服务器负载分担模式

在负载分担模式下,可以使更多的RADIUS服务器得到有效利用,可以更快的处理更多用户的请求。在这种模式下,根据用户的请求,选择服务器进行负载分担。为了处理这些需求,需要在服务器模板中维护服务器。当客户端接收到请求或应答报文时,根据负载分担的列表发送到指定的服务器进行处理。

RADIUS服务器的选择算法为负载分担时:多台设备根据各服务器的权重,按比例进行负载分配。RADIUS服务器按权重进行负载分配的规则如下:

如果RADIUS服务器权重之和等于0,则认为各RADIUS服务器权重一样,随机选择一个UP的服务器。
例如RADIUS服务器组下配置了6个服务器,其中有4个是UP的,则会随机从4个UP的服务器选择一个服务器,这四个服务器被选择几率相同。如果没有UP的服务器,则会随机从6个服务器选择一个服务器,这6个服务器被选择几率相同。

如果RADIUS服务器权重之和大于0,首先对所有状态为UP且没有使用过的RADIUS服务器按照权重比例随机选择,如果没有状态为UP的RADIUS服务器,则对所有配置的RADIUS服务器按权重比例随机选择。
例如RADIUS服务器组下配置了4个服务器,4个服务器的权重分别是10,20,30,40。这4个服务器状态都UP或都为Down,则4个服务器被选中的概率大概是10%,20%,30%,40%。如果后3个服务器UP,第一个服务器Down,则只会从UP的服务器中选择,后3个服务器被选中的几率为20/(20+30+40),30/(20+30+40),40/(20+30+40)。
RADIUS服务器每次选择是独立的,不依赖前面的选择结果。例如两个服务器各50%,连着100个用户选择了第一个服务器,第101个用户仍然有50%的几率选择第一个服务器。就像扔硬币一样,每次几率都是50%,如果扔的次数少,硬币正反面的几率并不一定得出50%,扔的次数多总体正反面的几率就是50%了。
当RADIUS客户端收到AAA请求时,在服务器组的状态为UP的服务器中选择负载最小的服务器进行处理。如果在服务器组中的所有服务器都处于Down状态,RADIUS客户端选择负载最小的服务器。该服务器一旦被选中,其负载将逐渐增加并且重新排序。开始接收回应报文时,服务器的负载将逐步减少并且重新排序。

RADIUS报文重传机制

用户认证过程中,RADIUS客户端会发送认证请求报文到RADIUS服务器。为避免由于网络故障、时延等原因导致设备无法收到服务器的回应报文,设备在发送认证请求报文到服务器时具有超时重传机制。在超时时间范围内,客户端没有接收到服务器的应答报文,客户端将重新发送请求报文。在配置的重传次数范围内,客户端将请求报文发给相同的服务器。如果还不能收到响应,客户端将报文发给不同的服务器处理,无论是主备模式还是负载分担模式。RADIUS客户端支持为服务器组和服务器组中的服务器配置重传时间和响应超时时间。

RADIUS over DTLS

DTLS协议保障了RADIUS客户端和服务器传输时数据的机密性和完整性。在UDP传输场景下,DTLS协议能够防止第三方窃听消息、篡改、仿冒身份等。DTLS协议运行于传输层与应用层之间。RADIUS over DTLS的知名端口号为2083,不区分认证、计费和动态授权功能。服务器可以修改侦听端口号。因此RADIUS服务器接收到端口号是2083(或指定的其他端口号)的报文,均认为是DTLS报文。

RADIUS客户端和服务器建立会话前,需要先进行DTLS握手操作,握手成功后才能完成注册、数据发送等。RADIUS客户端和服务器的握手流程如图1所示。

图1RADIUS客户端与服务器的握手流程

  1. RADIUS客户端发送ClientHello报文,发起握手和密钥协商,报文主要包括:
  • 32字节随机数:用于生成共享密钥。
  • 客户端支持的加密套件。
  • 客户端支持的压缩方式。
  1. RADIUS服务器收到ClientHello报文后根据客户端的IP和其他参数,使用HMAC算法生成Cookie,包含在HelloVerifyRequest报文中发送给RADIUS客户端。
  2. RADIUS客户端收到HelloVerifyRequest后,将Cookie原封不动填入ClientHello报文中,再次发送给RADIUS服务器。
  3. RADIUS服务器收到Cookie后,验证Cookie的有效性,确认有效后向RADIUS客户端发送一系列报文:
  • SeverHello报文:
  • 32字节随机数:用于生成共享密钥。
  • 服务器选择的后续会话加密方式。
  • 服务器选择的后续会话压缩方式。
  • Certificate报文:主要包含服务器的证书以及证书的公钥。
  • ServerKeyExchange报文:主要包含服务器的密钥协商信息。
  • (可选)CertificateRequest报文:向客户端请求证书。
  • ServerHelloDone报文:仅用来作为标志,表示服务器当前阶段报文已发送完毕。
  1. 收到RADIUS服务器的报文以后,RADIUS客户端根据已知服务器的协商信息,加上双方各自产生的32字节随机数,通过协商好的加密方法,生成共享密钥。RADIUS客户端向RADIUS服务器发送一系列报文:
  • (可选)Certificate报文:表示RADIUS客户端发送证书,该动作之后在RADIUS服务器请求之后发生。
  • ClientKeyExchange报文:包含的信息与ServerKeyExchange相同。
  • (可选)CertificateVerify报文:表示对服务器证书的认证。
  • ChangeCipherSpec报文:该报文用共享密钥加密。
  • Finished报文:表示结束标志。
  1. RADIUS服务器通过RADIUS客户端的协商信息计算出共享密钥。解密ChangeCipherSpec报文后,RADIUS服务器用密钥加密自己的ChangeCipherSpec报文表示已找到共享密钥。
  2. RADIUS客户端在收到ChangeCipherSpec报文并解密后知道服务端已得到共享密钥,之后双方使用共享密钥加密通信。
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号