COR(Class Of Restriction)中文翻译为“主叫特权”。从restriction这个单词的意思可以看出这个特性主要是用来规划由主叫号码所规定的限制。举例来说,我们可以限制号码1001只能拨打市内的电话,号码1010可以拨打国际长途。有点类似于路由当中的标准ACL列表,根据源地址决定是否有访问的权利。
COR的工作方式讲起来有点麻烦。它的实施有三个步骤,第一是定义COR成员,第二是定义COR list。第三是和dial-peer以及ephone-dn绑定。COR成员是包括在COR list当中,而COR list是与dial-peer和ephone-dn绑定的。COR list分为incoming和outgoing。那么如何判断是否允许通过呢。如果COR outgoing中的成员是COR incoming中的成员的子集的时候,就可以通过。比如incoming成员有1,2,3,4 ,而outgoing有1或者有1,2或者2,3,4那么都是incoming的子集(这个是数学里面集合的内容)。这个时候这个出向dial-peer就可以继续传递了。(特例,当出向或者入向dial-peer,ephone-dn任何一方或者两方都没有和任何COR list关联的时候,也是可以通过的)Ephone-dn和入向dial-peer是和COR incoming来进行绑定的。出向dial-peer是和COR outgoing来进行绑定的。
下面来通过一个实验来详细的说明下COR的实施。
以上图的实验拓扑为例。我们要做的是让C2电话只能访问C4和C5,C3只能访问C5和C6。电话号码左边从上到下依次是1001,1002。右边从上到下分别是2001,2002,2003。
首先我们创建3个COR成员,name后面的不是真实的号码,也可以起英文名字
dial-peer cor custom
name 2001
name 2002
name 2003
然后,我们创建出向COR list,注意,出向和入向list并不是从配置的开始就确定的,创建的时候都是list。只是你应用到出向dial-peer就是出向COR list
dial-peer cor list COR-out-2001
member 2001
!
dial-peer cor list COR-out-2002
member 2002
!
dial-peer cor list COR-out-2003
member 2003
再创建入向COR list,时刻记住COR的匹配准则:出向COR成员是入向的子集才能通过。
dial-peer cor list COR-in-1001
member 2001
member 2002
!
dial-peer cor list COR-in-1002
member 2002
member 2003
最后进行绑定,首先绑定出向dial-peer
dial-peer voice 2001 voip
corlist outgoing COR-out-2001
destination-pattern 2001
session target ipv4:192.168.12.2
!
dial-peer voice 2002 voip
corlist outgoing COR-out-2002
destination-pattern 2002
session target ipv4:192.168.12.2
!
dial-peer voice 2003 voip
corlist outgoing COR-out-2003
destination-pattern 2003
session target ipv4:192.168.12.2
再绑定入向dial-peer或者ephone-dn
ephone-dn 1
number 1001
corlist incoming COR-in-1001
!
!
ephone-dn 2
number 1002
corlist incoming COR-in-1002
到此,号码1001绑定了成员2001,2002。号码1002绑定了2002,2003。而对应的每个号码都有一个出向的dial-peer和相应的一个成员进行关联。那么比如2001这个号码,他的出向dial-peer绑定的是出向2001,而1001自身绑定的是2001,2002。集合{2001}是集合{2001,2002}的子集,所以1001可以打通2001。而反观2003。他的dial-peer绑定的是2003。集合{2003}不是集合{2001,2002}的子集。所以1001不能打通2003。不能打通的时候,电话上显示的是unknown number。