背景描述:
CPPM 作为 AAA Server 提供了 Radius 协议认证,同时在一个认证 Service 中可以调用多个外置的 认证源(Radius-Based,SQL,LDAP,AD 等等),可以针对多个外置认证源实现账号的轮询查询,例如到 第一个认证源查询账号,如果查询不到会继续到第二个认证源查询,直到找到账号且密码正确,则认证 成功。找到账号且密码错误,则认证失败,如果一直找不到账号,则最终还是认证失败
原因:
但是 CPPM 上单一的认证 Servcie 中的多个认证源并不都是按照从上到下的顺利来轮询账号的,如 果我们在一个认证服务中调用多个认证源,Radius-based 的认证源在前,而本地或者外置的 SQL 数据 库/外置的 LDAP/外置 AD 类型的认证源在后,或者调用多个 Radius-based 的认证源时,即使第一个 Radius-based 的认证源查询不到指定账号或者故障 down 了,那么 CPPM 也是无法实现账号轮询和认证 源的主备切换功能的。所有的认证请求仅在第一个 Radius-based 的认证源中查询,即使账号找不到或 者第一个认证源无响应了,CPPM 也不去第二个认证源中查询。 那如何解决采用 Radius-based 的认证源在前,而本地或者外置的 SQL 数据库/LDAP/AD 类型的认证源在 后,或者调用多个 Radius-based 的认证源时,需要实现账号轮询或者主备切换呢?
解决办法:
我们利用 AC+CPPM 作为解决方法,在 AC 上创建 Server Group,采用默认的主备模式,里面调用两 个 Radius 类型的认证服务器 CPPM1 和 CPPM2,IP 地址都指向到 CPPM,通过设置不同的 NAS ID 来区分 两台 Radius 类型的认证服务器。在 CPPM 上,创建两个认证 Service,通过 Service Rule 来匹配来自 不同 CPPM1 和 CPPM2 的认证请求。同时在这两个认证 Service 中,各自分别调用各自的认证源,Service1 调用的认证源是外置的 Radius-based 的认证源,Service2 调用的认证源是本地的 Endpoint DB(SQL 类型的)。正常的用户认证请求到达 AC,然后 AC 将所有的认证请求都发给第一台认证服务器 cppm1 来 认证。有认证成功的(账号和密码都正确),有认证失败的(账号正确,但密码错误),有查不到账号的, 最终也是认证失败。当 cppm1 (其实就是后台的外置 Radius-based 的认证源)故障 down 了或者无响应了,那么控制器会将认证请求发给第二台认证服务器 cppm2 来认证, 并标记第一台 cppm1 dead time =10 分钟,在这 10 分钟的时间内,AC 会将后续的认证请求直接发给 cppm2. 后续的认证请求直 接转发给 cppm2 后,如果账号和密码正确,则认证过,如果账号在,密码错误,则认证失败, 如果账 号查不到,则最终认证失败,因为已经是这个 Server-Group 中的最后一台认证服务器了。 10 分钟后,AC 会尝试重新和 cppm1 建立通讯。