一、相关介绍
在工作中有时候会碰到客户有不同的需求,对PPPOE和DHCP业务的用户的相关信息进行精细化的区分调整。该文章主要介绍如何定义Radius相关的字段来进行业务的划分。
二、Radius与BASE之间信息传递
RADIUS Interface—Access Request
RADIUS Interface—Accounting Request
三、ASR9000支持的私有属性和公有属性
包括厂商编号,私有属性编号,格式类型定义,含义说明
cisco 的厂商编号是9, cisco VSA的格式如下
现网中将会用到的大部分cisco的私有属性(VSA),都采用Cisco-AVpair的格式表达。 Cisco AV-pair即是vendor type是1的Cisco VSA。其格式及举例如下:
在这同一格式下(type 26, vendor-Id 9, vendor type 1),在attribute-specific的部分用不同的string(只能是string), 则该Cisco-AVpair可为某一特定的属性, 赋予特定的值, 其含义是直观易懂的。attribute-specific部分的string分为三个部分:
Cisco-Avpair = "protocol:attribute=value"
比如:
Cisco-avpair = "ip:ipv4-mtu=1480" ---定义ipv4 mtu为1480
Cisco-avpair = "ip:addr-pool=pppoe_pool2"--定义ip地址池采用名为pppoe_pool2的地址池。
需要注意的是:
1, 在一个radius message中,通常会包含多个Cisco-Avpair(具有相同的type 26, vendor-Id 9, vendor type 1),需要RADIUS server支持此功能。
2, Cisco-AVpair中内容部分冒号之前的protocol部分,当BRAS是运行IOS XR系统的ASR9000时, 可以省略或者不计较其内容, 因为ASR9000在解析Cisco-AVpair的时候会忽略冒号之前的部分。(但是在IOS操作系统下, 冒号前面的部分是有意义的)。举例说明:Cisco-avpair += "ip:ipv4-unnumbered=Loopback222"中的ip:是可以省略的, 或者说, 对于ASR9K来说,以下三个格式的Avpair是相同的
· Cisco-avpair += "ip:ipv4-unnumbered=Loopback222"
· Cisco-avpair += "ipv4-unnumbered=Loopback222"
· Cisco-avpair += "ipv4:ipv4-unnumbered=Loopback222"
3, 部分Cisco-AVpair与一些IETF的标准attribute是可以互换的, 换言之, 为了实现某些相同的功能, 可以用Cisco-AVpair,也可以用IETF的标准attribute。 在这种情况下, cisco建议采用标准的IETF属性实现。
Cisco Avpair在RADIUS server中的users文件中的写法:
以freeradius为例,下面的user profile中,三个VSA都是cisco Avpair。
User@domain.com Auth-Type := Local, User-Password == "cisco"
Cisco-avpair = "ip:ipv4-mtu=1480",
Cisco-avpair += "ip:ipv4-unnumbered=Loopback222",
Cisco-avpair += "ip:addr-pool=pppoe_pool2"
对应的抓包文件显示如下:
除了Vendor type是1的Cisco-AVpair以外,cisco还有其他的私有属性,vendor type从2到其他整数, 但基本上很少或者不会使用。具体的cisco VSA的完全格式说明, 请参见:
http://www.cisco.com/c/en/us/td/docs/routers/asr9000/software/asr9k_r5-1/bng/configuration/guide/b_bng_cg51xasr9k/b_bng_cg51xasr9k_appendix_01001.html
Cisco支持的Cisco-Avpair的列表及所以用方法说明见附件
在现网中, 如果只需要对用户根据其所属的业务类型做区别化对待, 建议采用radius 下发单独一个service名字, 对应在ASR9K上本地配置service内容的方式实现对不同用户提供不同的业务。
具体做法是在access-accept中下发
cisco-avpair=”subscriber:sa=service1
本地定义的dynamic-template type service service1中,可包含QoS, ACL, 地址池等等信息。如果需要对用户做区别化对待, 比如某个特定的用户, 要分配特定的IP地址,或者要指定分配特定的MTU , 则可以考虑在access-accept中下发具体的定义不同特性的AVpair或者ietf属性。
配置案例:
比如,在pppoe拨号中,为了指定用户的IP地址,可以采用下面两种方式实现:
Radius 配置(在用户不同的速率模板下配置新的字段):
· IETF标准属性方式: “Framed-IP-Pool”=“”pppoe_pool2”
· Csico-AVpair方式:“Cisco-avpair ”= "ip:addr-pool=pppoe_pool2"
Base配置如下(添加新的地址池):
pool vrf default ipv4 pppoe-pool100
network 10.76.128.0/20
四、是否支持CoA和DM
如不支持COA和DM(即RFC3576协议),radius不下发CoA包。
答复:支持COA和DM。
COA和DM必须在COA request中包含session identifier。ASR9K支持的session identifier为。
IETF标准属性44. acct-session-id
或者VRF+用户地址信息, 由以下两个属性表示:
Framed-IP-Address=X.X.X.X
Cisco-Avpair="vrf-id=VRF_NAME"
ASR9K 期待的DM(PoD)报文格式如下(此处用acct-session-id作为session identifier)
除了采用DM来踢掉一个session以外, 也可以采用COA的某个专用的command account-logoff来踢掉一个用户(此处用Framed-IP-Address作为session identifier, vrf是default vrf, 没有定义)
Framed-IP-Address=12.1.26.2,
Cisco-Avpair=”subscriber:command=account-logon"