目录

简介

背景信息

CPAR配置

全局配置

客户端配置

快速规则配置

服务配置

远程服务器配置

会话管理器

资源管理器

脚本

CPAR日志记录配置

超时值

直径数据包大小

管理CPAR中的会话

在CPAR AAA缓存的属性(AVP)，用于用户会话

验证

故障排除

简介

本文档介绍Cisco Prime Access Registrar(CPAR)身份验证、授权和记帐(AAA)配置的过程。

此过程适用于使用NEWTON版本的OpenStack环境，其中ESC不管理CPAR，CPAR直接安装在OpenStack上部署的VM上。

背景信息

Ultra-M是预打包和验证的虚拟化移动数据包核心解决方案，旨在简化VNF的部署。OpenStack是Ultra-M的虚拟化基础设施管理器(VIM)，由以下节点类型组成：

- 计算

- 对象存储磁盘 — 计算（OSD — 计算）

- 控制器

- OpenStack平台 — 导向器(OSPD)

此图中描述了Ultra-M的高级体系结构和涉及的组件：

本文档面向熟悉Cisco Ultra-M平台的思科人员，并详细介绍在OpenStack和Redhat OS中执行所需的步骤。

注意：为了定义本文档中的步骤，我们考虑了Ultra M 5.1.x版本。

CPAR配置

全局配置

Diameter全局配置应配置适当的值，如Application-ID和源主机IP地址、领域等。

Cd /Radius/Advanced/Diameter/

Diameter/

IsDiameterEnabled = TRUE

General/

Product = CPAR

Version = 7.3.0.3

AuthApplicationIdList = 1:5:16777264:16777265:16777272:16777250

AcctApplicationIdList = 3

TransportManagement/

Identity = aaa01.aaa.epc.mncxx.mccxx.3gppnetwork.org

Realm = epc.mncxx.mccxx.3gppnetwork.org

WatchdogTimeout = 500

ValidateIncomingMessages = FALSE

ValidateOutgoingMessages = TRUE

MaximumNumberofDiameterPackets = 8192

ReserveDiameterPacketPool = 0

DiameterPacketSize = 4096

AdvertisedHostName/

1. aaa01.aaa.epc.mncxx.mccxx.3gppnetwork.org

/etc/hosts必须用要解析的相应IP地址更新，以便传输管理中使用的AAA身份完全限定域名(FQDN)和要解析的主机名

客户端配置

客户端配置应使用接收流量的Diameter对等体（在本例中为DRA）进行配置。

Cd /Radius/Clients/

DRA01/

Name = DRA01

Description =

Protocol = diameter

HostName = x.x.x.x

PeerPort = 3868

Vendor =

IncomingScript~ =

OutgoingScript~ =

AdvertisedHostName =

UserLogEnabled = FALSE

AdvertisedRealm =

InitialTimeout = 3000

MaxIncomingRequestRate = 0

KeepAliveTime = 0

AuthSessionStateInASR = No-State-Maintained

SCTP-Enabled = FALSE

TLS-Enabled = FALSE

快速规则配置

FastRules用于根据特定条件在运行时映射相应的服务，该条件基于属性值对(AVP)及其值在直径消息中显示，如果没有匹配的快速规则，则选择默认服务。

Cd /Radius/FastRules/

FastRules/

RuleDefinitions/

Entries 1 to 5 from 5 total entries

Current filter: <all>

r1/

Name = r1

Description = Used for HSS initiated Flows

Protocol = diameter

Condition = "1 OR 2"

Success = author(3gpp-reverse)

Failure = Rule(r2)

Attributes/

Entries 1 to 2 from 2 total entries

Current filter: <all>

1/

Name = 1

Description =

Dictionary = environment

Attribute = Diameter-Command-Code

Value = 304

2/

Name = 2

Description =

Dictionary = environment

Attribute = Diameter-Command-Code

Value = 305

r2/

Name = r2

Description = Used for PGW Update procedure over S6b

Protocol = diameter

Condition = "1 AND 2"

Success = author(s6b)

Failure = Rule(r3)

Attributes/

Entries 1 to 2 from 2 total entries

Current filter: <all>

1/

Name = 1

Description =

Dictionary = Request

Attribute = Auth-Application-Id

Value = 16777272

2/

Name = 2

Description =

Dictionary = request

Attribute = Diameter-Command-Code

Value = 265

r3/

Name = r3

Description = OPTIONAL used for PGW Termination procedure

Protocol = diameter

Condition = "1 and 2"

Success = author(null)

Failure = Rule(r4)

Attributes/

Entries 1 to 2 from 2 total entries

Current filter: <all>

1/

Name = 1

Description =

Dictionary = Request

Attribute = Auth-Application-Id

Value = 16777272

2/

Name = 2

Description =

Dictionary = environment

Attribute = Diameter-Command-Code

Value = 275

r4/

Name = r4

Description = Used for SWm Termination procedure

Protocol = diameter

Condition = "1 and 2"

Success = author(3gpp-auth)

Failure = Rule(r5)

Attributes/

Entries 1 to 2 from 2 total entries

Current filter: <all>

1/

Name = 1

Description =

Dictionary = request

Attribute = Auth-Application-Id

Value = 16777264

2/

Name = 2

Description =

Dictionary = environment

Attribute = Diameter-Command-Code

Value = 275

r5/

Name = r5

Description = Used for SWm ReAuthorization

Protocol = diameter

Condition = "1 and 2"

Success = Query(query)

Failure =

Attributes/

Entries 1 to 2 from 2 total entries

Current filter: <all>

1/

Name = 1

Description =

Dictionary = environment

Attribute = Diameter-Command-Code

Value = 265

2/

Name = 2

Description =

Dictionary = request

Attribute = Auth-Application-Id

Value = 16777264

Order/

Radius/

Diameter/

1. r1

Tacacs/

如果上述FastRules均不匹配，则根据默认服务处理数据包。

Cd /Radius/

DefaultAuthenticationService~ = encrypted-imsi-service

DefaultAuthorizationService~ = 3gpp-auth

服务配置

服务配置是根据身份验证和授权要求定义服务的位置：

CD /RADIUS/Services/

Encrypted-IMSI-Service用于EAP-AKA身份验证，并与IMSI加密用于Apple设备。如果不需要，请将EncryptedIMSI参数设置为False

encrypted-imsi-service/

Name = encrypted-imsi-service

Description =

Type = eap-aka

NumberOfQuintets = 1

AlwaysRequestIdentity = True

EnableIdentityPrivacy = False

EnableRollingPseudonymSecret = False

PseudonymSecret = <encrypted>

PseudonymRenewtime = "24 Hours"

PseudonymLifetime = Forever

NotificationService =

Generate3GPPCompliantPseudonym = False

EnableReauthentication = False

UseOutagePolicyForReauth = False

MaximumReauthentications = 16

ReauthenticationTimeout = 3600

ReauthenticationRealm =

EnableEncryptedIMSI = True

EncryptedIMSIDelimiter = NULL

EncryptedIMSIKeyIdDelimiter = ,

DefaultPrivateKey = xxxxxxxxxxxxxxxxxxxxxxxx

QuintetCacheTimeout = 0

AuthenticationTimeout = 120

QuintetGenerationScript~ =

UseProtectedResults = False

SendReAuthIDInAccept = False

Subscriber_DBLookup = DiameterDB

DiameterInterface = SWx

ProxyService = dia-proxy

The 3GPP service is used for Registration/Profiledownload from HSS over SWx;

3gpp-auth/

Name = 3gpp-auth

Description =

Type = 3gpp-authorization

Protocol = diameter

IncomingScript~ =

OutgoingScript~ = removeuserdata

SessionManager = sm1

DiameterProxyService = dia-proxy

FetchLocationInformation = False

介质代理服务用于选择远程服务器并可定义对等体策略，当有多个远程对等体并且要对其进行分组时，GroupFailover选项用作MultiplePeerPolicy。此外，将GroupTimeOutPolicy定义为故障切换到多个组

dia-proxy/

Name = dia-proxy

Description =

Type = diameter

IncomingScript~ = rmserver

OutgoingScript~ =

MultiplePeersPolicy = GroupFailover

GroupTimeOutPolicy = FailOver

ServerGroups/

Entries 1 to 2 from 2 total entries

Current filter: <all>

Group_Primary_DRA/

Name = Group_Primary_DRA

Metric = 0

IsActive = TRUE

Group_Secondary_DRA/

Name = Group_Secondary_DRA

Metric = 1

IsActive = TRUE

上述服务器组在/Radius/GroupServers/中定义

GroupServers/

Entries 1 to 2 from 2 total entries

Current filter: <all>

Group_Primary_DRA/

Name = Group_Primary_DRA

Description =

MultiplePeersPolicy = RoundRobin

PeerTimeOutPolicy = FailOver

DiaRemoteServers/

Entries 1 to 2 from 2 total entries

Current filter: <all>

DRA01/

Name = DRA01

Metric = 0

Weight = 0

IsActive = TRUE

DRA02/

Name = DRA02

Metric = 1

Weight = 0

IsActive = TRUE

Group_Secondary_DRA/

Name = Group_Secondary_DRA

Description =

MultiplePeersPolicy = RoundRobin

PeerTimeOutPolicy = FailOver

DiaRemoteServers/

Entries 1 to 4 from 4 total entries

Current filter: <all>

DRA03/

Name = DRA03

Metric = 0

Weight = 0

IsActive = TRUE

DRA04/

Name = DRA04

Metric = 2

Weight = 0

IsActive = TRUE

DRA05/

Name = DRA05

Metric = 1

Weight = 0

IsActive = TRUE

S6b服务用于处理S6b上的PGW更新过程。

s6b/

Name = s6b

Description =

Type = 3gpp-authorization

Protocol = diameter

IncomingScript~ =

OutgoingScript~ =

SessionManager =

DiameterProxyService = dia-proxy

FetchLocationInformation = False

3gpp-reverse用于HSS发起的待处理消息。

3gpp-reverse/

Name = 3gpp-reverse

Description =

Type = 3gpp-reverse-authorization

IncomingScript~ = AAARTRCheck

OutgoingScript~ =

SessionManager = sm1

TranslationService =

查询服务在重新授权过程中使用，其中根据从HSS接收的PPR直接从缓存获取更新的配置文件。

query/

Name = query

Description =

Type = diameter-query

IncomingScript~ =

OutgoingScript~ = removeuserdataquery

UpdateSessionLastAccessTime = False

SessionManagersToBeQueried/

1. sm1

AttributesToBeReturned/

1. Non-3GPP-User-Data

2. Service-Selection

空服务是仅对S6b终止进程成功进行应答，因为没有通过S6b缓存的会话。

null/

Name = null

Description =

Type = null

IncomingScript~ =

OutgoingScript~ =

远程服务器配置

远程服务器是使用远程对等体定义的，数据包从AAA（如HSS）发送到远程对等体。如果使用DRA，则在客户端和远程服务器中定义相同的DRA信息；

RemoteServers/

DRA01/

Name = DRA01

Description =

Protocol = diameter

HostName = 10.169.48.235

DestinationPort = 3868

DestinationRealm = epc.mnc300.mcc310.3gppnetwork.org

ReactivateTimerInterval = 300000

Vendor =

IncomingScript~ = AAAReplaceResultCode

OutgoingScript~ = rmdh

MaxTries = 3

MaxTPSLimit = 0

MaxSessionLimit = 0

InitialTimeout = 3000

LimitOutstandingRequests = FALSE

MaxPendingPackets = 0

MaxOutstandingRequests = 0

DWatchDogTimeout = 2500

SCTP-Enabled = FALSE

TLS-Enabled = FALSE

AdvertiseHostName =

AdvertiseRealm =

会话管理器

会话管理器用于定义有关会话缓存的信息，它与资源管理器配合使用。会话管理器在3gpp-auth、3gpp-reverse和查询服务中引用；

Cd /Radius/SessionManagers/

sm1/

Name = sm1

Description =

Type = local

EnableDiameter = True

IncomingScript =

OutgoingScript =

AllowAccountingStartToCreateSession = FALSE

SessionTimeOut =

PhantomSessionTimeOut =

SessionKey = User-Name:Session-Id

SessionCreationCmdList = 268||305

SessionDeletionCmdList = 275

SessionRestorationTimeOut = 24h

ResourceManagers/

1. 3gpp

2. swmcache

3.  per-user

资源管理器

资源管理器被定义为分配资源并映射到会话管理器。

使用这三个资源管理器。

Cd /Radius/ResourceManagers/

ResourceManagers/

3gpp/

Name = 3gpp

Description =

Type = 3gpp

EnableRegistrationFlow = TRUE

EnableSessionTermination = false

ReuseExistingSession = True

HSSProxyService = dia-proxy

Per-User/

Name = Per-User

Description =

Type = user-session-limit

UserSessionLimit = 0

swmcache/

Name = swmcache

Description =

Type = session-cache

OverwriteAttributes = FALSE

QueryKey = Session-Id

PendingRemovalDelay = 10

AttributesToBeCached/

1. Non-3GPP-User-Data

2. Service-Selection

QueryMappings/

脚本

此表显示了数据包处理期间使用的所有脚本。

名称

脚本文件

入口点

描述

客户端

test.tcl

clid

查找Application-Id 16777264和Diameter-Command Code 268，获取用户名值，并从到达的请求将其复制到calling-station-ID属性中。

此脚本在Radius传入脚本点中引用

rmserver

test.tcl

rm_server

查找Server-Assignment-Type属性（如果存在），从传入请求中删除Remote-Server字段。

此脚本在dia-proxy服务传入脚本点中引用

删除用户数据

libremoveuserdata.so

removeUserData

Rex脚本用于首先检查从HSS接收的信息，特别是“Non-3GPP-IP-Access”和“Non-3GPP-IP-Access-APN”，两者的值都应为“NON_3GPP_SUBSCRIPTION_ALLOWED(0)”和“Non_3GPP_GP_GPP_A_AP_AP_AP_AP_APNS_AP_APN_AP_AP_A0)，否则将失败授权。然后，将从SWm DER消息（服务选择AVP）接收的APN名称与从HSS下载的APN配置进行简单比较，如果存在匹配，则仅复制特定APN详细信息并删除不需要的AVP，并准备面向ePDG的最终DEA。如果没有匹配授权失败，并且DER中没有服务选择AVP，则所有APN信息将作为外部AVP发送。

此脚本在3gpp-auth传出脚本点中引用

removeuserdataquery

libremoveuserdataquery.so

removeUserData

Rex脚本用于首先检查从HSS接收的信息，尤其是Non-3GPP-IP-Access和Non-3GPP-IP-Access-APN，两者的值应为NON_3GPP_SUBSCRIPTION_ALLOWED(0)和Non_3GPP_GPP_GPP_APAPNS_ENABLE(0)，否则它将失败授权。然后，将从SWm DER消息（服务选择AVP）接收的APN名称与从HSS下载的APN配置进行简单比较，如果存在匹配，则仅复制特定APN详细信息并删除不需要的AVP，并准备面向ePDG的最终DEA。如果没有匹配授权失败，并且DER中没有服务选择AVP，则所有APN信息将作为外部AVP发送。

此脚本在查询服务传出脚本点中引用

外出

test.tcl

newsessionState

Dia代理服务传入脚本 — 用于为已处理的消息取消设置粘滞。例如：如果从DRA1收到MAR/MAA，则后续用户SAR将使用相同的DRA1，如果它不可用且粘滞保持不变，则不进行故障切换。为了故障切换到备用DRA，将删除此粘滞。该脚本用于删除指向S6b SAR(PGW_update)HSS的已访问网络标识符。

rmdh

test.tcl

rmdh

删除DiameterCode为301和303的数据包中的DestinationHost AVP。

rmvnid

test.tcl

rmvnid

删除DiameterCode为256且Server-Assignment-Type为13的数据包中的Visited-Network-Identifier AVP。

AAAReplaceResultCode

test.tcl

replaceResultCode

将结果代码AVP替换为“Test”（测试）（在包中为DiameterCode 274）和结果代码“Diameter-Unknown-Session-Id”(Diameter-Code 274)

AAARTRCheck

librexblockRTR.so

AAARTRCheck

当收到同一会话的多个RTR时，将删除并记录重复的RTR。

某些脚本在更高版本中可能不需要，列出的脚本将用于CPAR版本7.3.0.3

所有脚本都位于路径/opt/CSCOar/scripts/radius/中。

CPAR日志记录配置

文件夹/opt/CSCOar/logs存储所有应用程序日志。文件name_radius_1_log注册所有已丢弃和已拒绝的请求，因此存储此文件以用于故障排除。

CPAR允许非常灵活的配置根据您的需求存储此日志。根据要求，可以定义此值，此处保留最新的20个日志文件，每个文件的大小为5 Mb。

要启用此特定日志记录，必须在aregcmd模式下配置2个参数：

/Radius/Advanced

LogFileSize = "5 MB"

LogFileCount = 20

日志命名约定遵循下表中指定的规则：

描述

日志文件的名称

最新日志

name_radius_1_log

第2个到最新日志

name_radius_1_log.01

第3个日志

name_radius_1_log.02

...

...

第20个日志到最新日志

name_radius_1_log.19

表 2 日志编号。

超时值

CPAR具有服务器可配置超时。当前设置具有以下配置：

位于/Radius/Advanced中的常规超时

- DiameterStaleConnectionDeletionTimeOut 300000(ms)此计时器指示在CPAR将直径连接标记为关闭之前，该连接可处于非活动状态的时间。

位于/Radius/Clients/<client_name>中的客户端超时

- InitialTimeout 3000(ms)Time等待DRA的回复，然后CPAR才认为它不可达。

位于/Radius/RemoteServers/<remote_server_name>中的远程服务器超时

- InitialTimeout 3000(ms)Time等待DRA的回复，然后CPAR才认为它不可达。

- DWatchDogTimeout 2500(ms)在CPAR认为无法访问DiamaterWatchDog数据包之前，DWatchDogTimeout等待从DRA重播的时间。

- ReactivateTimerInterval 300000(ms)CPAR将等待的时间，直到重试与直径对等体建立连接。

直径数据包大小

本文档介绍Diameter Packet size命令的含义以及促使您将此参数保持为值4096的原因。

如上图所述，CPAR预期接收的最大直径数据包大小为4096字节。此值在/Radius/Advanced/Diameter/TransportManagement目录中的DiameterPacketSize变量下配置。不符合此值的所有数据包都将被丢弃。总数据包大小是在添加会话缓存属性的大小加上收到的直径数据包的大小后得到的。

例如，我们假设PPR数据包大小为4000字节，在该消息中，Non-3GPP-User-Data的大小为3800字节。如果会话已缓存某些属性且缓存的数据大小为297字节，则会话大小超过4096字节，CPAR会丢弃该消息。

在项目过程中，对大于4096的数据包进行了分析。结果表明，平均每天有36个大于4096的数据包(SAA)到达每个CPAR实例。这些数据包数量非常小，因此没有意义。

此参数是可配置的，如果需要，可以增加。但是，4096年以后的价值会增加，这也会带来一些缺点：

- 如果DiameterPacketSize增加到5KB，CPAR将接受大于4096字节的SAA数据包。但是，如果为同一用户会话启动PPR，由于非3GPP-User-Data的大小为4260字节，会话更新将失败并导致用户注销。

- DiameterPacketSize直接影响分配给RADIUS进程的启动内存。DiameterPacketSize越大，在CPAR启动时分配给Radius进程的RES内存量就越大。

下图显示了DiameterPacketSize配置为4096的实例中top命令输出的示例：

如果DiameterPackerSize参数增加到6000，则top命令的输出如下所示：

- 除启动内存分配外，一旦系统使用，内部动态内存缓冲区会随着达到CPAR的数据包数量而增长。例如，如果一次有1000个数据包到达CPAR，则CPAR会在缓冲区1000 * DiameterPacketSize内部分配内存值，而不管单个数据包的大小如何（CPAR知道DiameterPacketSize表示最大数据包大小）。 如果DiameterPacketSize递增，此内存缓冲区将分配更多内存；如果DiameterPacketSize递减，则分配的内存将减少。

建议将此参数保持为4096，因为已确定大于4096的数据包数量可以忽略，而且缺点会造成不必要的行为。

管理CPAR中的会话

CPAR中唯一用于监控会话数的机制是通过本文档中介绍的方法。没有OID可以通过包含此信息的SNMP检索。

CPAR能够管理会话，使用/opt/CSCOar/bin/aregcmd输入CPAR CLI，并使用管理员凭证登录。

使用count-sessions /r all CPAR命令可显示当时连接到它的所有会话。

要查看会话的详细信息，CPAR使用命令query-sessions /r all，该命令提供与CPAR连接的所有会话的信息。

要仅显示特定会话的信息，可以更改命令并使用USER值，即：query-sessions /r with-User 310310990007655

此列表包含query-sessions命令的所有可能过滤器：

- all

- 带ID

- 带NAS

- 与用户

- 带密钥

- with-age+

- with-Attribute。

最后，要从CPAR分离会话，请使用命令release-sessions /r all，并且与该时刻连接的所有会话都将分离。

可以应用过滤器来分离特定会话。

在CPAR AAA缓存的属性(AVP)，用于用户会话

Prime Access Registrar支持会话管理器中可用于查询数据的属性缓存。此Diameter查询服务包含要从中查询的会话管理器列表，以及响应DIAMETER查询请求在Access-Accept数据包中返回的（缓存的）属性列表。通过扩展点脚本或通过规则和策略引擎启动，方法是将其设置为名为Query-Service的新环境变量。

DIAMETER查询服务应通过扩展点脚本或通过规则和策略引擎进行选择，方法是将其设置为名为Query-Service的新环境变量。原因是DIAMETER查询请求作为访问请求传入，而服务器无法知道它是DIAMETER查询请求还是普通身份验证请求。设置Query-Service环境变量会告知Prime Access Registrar服务器该请求是DIAMETER查询请求，因此Prime Access Registrar服务器可以处理在Query-Service环境变量中设置的diameter-query服务的请求。

当选择DIAMETER查询服务处理访问请求时，它会使用在这些会话管理器下引用的会话缓存资源管理器中配置的QueryKey值作为密钥查询已配置的会话管理器列表以查找匹配记录。如果找到匹配记录，则包含匹配记录中存在的缓存属性列表（基于配置）的Access-Accept将发回客户端。如果会话缓存包含多值属性，则该属性的所有值在响应中作为多值属性返回。如果没有匹配的记录，则会向客户端发送Access-Reject数据包。

Prime Access Registrar引入了会话管理器级别的脚本点以及自动可编程接口(API)，以访问会话记录中存在的缓存信息。您可以使用这些脚本点和API编写扩展点脚本以修改缓存的信息。

目前，我们的部署没有书面脚本或使用可编程API访问此类数据，但有此选项。

我们的会话管理器目前存储的属性有：

硬编码位于/radius/resourcemanagers/swmcache/AttributesToBeCached:

- 非3GPP用户数据

- 服务选择

默认情况下：

- 用户名(IMSI)

- 源主机

- 身份验证应用ID

- 源领域

- 会话ID

当在CLI上使用此命令query-sessions时，每个会话都可看到此类属性。

验证

当前没有可用于此配置的验证过程。

故障排除

目前没有针对此配置的故障排除信息。