BGP-community /peer-group/allowas-in
Community
翻译成中文后,为团体,
可以将一些特定的条目归到一个团体里,而进入这个团体的依据就是community值
我的理解有点儿像ospf中的tag,和mstp的多实例,
当然,community和他们两个没有任何的关系,只是意思大概相同而已
Community好处
为什么非要加community值呢?
假设你有100条个路由条目,来自于各地 如果是定义acl+prefix来进行匹配的话,是否要进行逐一设置,这样的话工作量是不是很大?而且想一下,扩展性有吗,肯定是没有的,
连最基本的上下游关系都没有,只能在本地生效。
那么此时我们就需要一个能够贯穿整个链路的属性,即使你不支持,也要进行转发。这样一来,我就可以在整条链路上的任何一个节点,针对于这条路由做属性的修改了,变得非常的灵活,且扩展性极其的高。
Community值的呈现形式
AA:NN
AA:用于填写AS号
NN : 用于自定义填写,当然,在一个超大的网络中,每一个编号都有期特定的含义,也不是乱定的
Community的几个众所周知的值
no-advertise
Local-as
No-export
Additive
Internet
No-advertise, 当设备接收到一条带有no-adv属性的条目时,将不会再把这个条目传递给任何一个邻居,不管你是什么关系、
Local-as,当收到一个带有local-as属性的条目时,将把这个条目限制本设备所在的AS内部进行传递,如果定义了不联邦的话,将会在成员AS内部进行传递,不会走出成员AS
No-export,当接收到一个带有no-export属性的条目时,设备不会把这个条目传递给任何一个EBGP邻居,但是,联邦的EBGP关系除外
Additive 增加,一个条目可以携带多个community属性值 ,但是需要在设置的时候添加上后面的关键字,这也充分说明了community属性有多么的灵活,当起始设备对其设置了属性值,到下游的某一台设备上都可以对其进行修改,如果配置时不加additive,那么将把原有的属性覆盖。
Internet,只要你收到携带了community的条目,默认就是都属于internet ,
这个有点儿像扩展ACL里的IP 协议,你只要permit community internet 的话,那么就是匹配了所有的条目。
Community的实际作用
在我看来,community属性的存在是有绝对意义的,
就拿ACL、prefix-list来和community做个比较,
对于ACL,prefix-list来讲,他们只能应用在本地,如果你想要在下一台设备也影响的话,就必须在下一台也要去抓取条目,它是不会跟随之BGP的update信息传递出去的
而community这个属性相比之下最大的好处是可以随着update信息进行传递,它是一个可选传递属性,你可以不支持这个属性,但是当你不支持的时候你一样要原封不动的进行传递,
So,在一整条完整的链路上我可以将这个值从头一直传到尾,
然后再到链路中适合的节点,做相应的策略,而且是将不同的条目绑定在一个community值,我对这个值部署策略,受影响的将是所有携带这个值的前缀。是不是要比前两个方便很多?~这就是community属性的绝妙之处
Community-list
Community-list,一个很像acl的列表,
但是它所抓取的是携带有特定community属性值,里面包含着一个或多个路由前缀,
这就是我们之前一直提到的,为什么community可以简化我们的配置。
Community-list包含 标准,扩展,命名式的
标准1-99 ,可以直接进行定义
扩展100-500,可以使用正则表达式来相结合(后面的课程中会有所涉及)
命名式的标准和扩展,和ACL意思是一样的,可以取一个相对有意义的名字,方便我们在部署或查看时候提供方便。
和route-map中的二元一样,在community-list中,也可以匹配多个项
但是逻辑关系有些不同,
在route-map 中 match X , Y 这样写成一行的逻辑关系是“或”
或的关系是两个条件满足一个即可
Match x
Match y //这样写成两行的逻辑关系是“且” ,且的关系是两个条件都要满足才可以被匹配住
而community-list中,正好相反,
如:Ip community-list xx per 100:1111 no-advertise
此时就是“且”的关系,只有一个条目同时拥有100:1111 和no-advertise时,才被匹配
2如:ip community-list xx per 100:1111
Ip community-list xx per no-advertise时
此时就是“或”的关系,当两个条件满足一个,即可以匹配
例
如果说,现在有两个条目携带的属性值分别是这样的
100:1111 local-as
100:2222 no-advertise
我写 ip community-list 11 per 100:1111
那么我可以匹配第一条
我写成ip community-list 11 per no-advertise
那么我可以匹配第二条,
只要是我的属性中有其它一个值是匹配的,就能匹配住
例2
如果说我有三个条目携带的属性值是这样的
100:1111 no-advertise
100:2222 no-export
100:1111
我是这样写的
Ip community-list 1 per 100:1111
Route-map 1 per 10
Match community 1
Set xxxx
那么部署策略,受影响的就是第一条和第三条,
但是如果我这样写
Ip community-list 1 per 100:1111
Route-map 1 per 10
Match community 1 exact-match
那么将被我匹配住的,只有第三条,策略部署后受影响的也只有第三条
这就是我们要说的精确匹配,不可以多,也不可以少,我要的就是正好的,一模一样的。
说了这么多,上个实例看看吧,都乱了
实验1
详细了解community的三个常见属性值 local-as no-export no-advertise
实验要求:
1AS100中有4个前缀 192.168.1.0 2.0 3.0 4.0
现要求在R1上配置community属性值,使他们传递到不同的AS内,
R2可以收到4条
R3可以收到3条
R4可以收到2条
R5可以收到1条
分析环境,
分析1 在AS200处,为一个联邦AS,其成员as有64512、64513
分析2 R2上可以收到4条,那对于R2来讲是不做任何的限制的
R3上可以收到3条,那么说明在R2上有一条被干掉了,那分析R2-R3之间是IBGP关系,且为联邦的IBGP,再想一个什么属性是不传给IBGP邻居的呢?
好像只有no-advertise可以实现,当R2收到这样的属性的条目时不会传递给任何人,
这样一来,第一条和第二条要求满足
分析3 R3收到3条,R4收到2条,说明在R3上又干掉一条出来的条目,由于是联邦IBGP,想一下,哪个属性是不会被传出IBGP的,且包括联邦IBGP? local-as,
分析4 R4上有两条,R5只有一条,还是一样的套路,在R4上干掉了一条,他们是EBGP的邻居关系,那么不传出EBGP就OK 了,那就不用想了,这里不是联邦的EBGP,而是普通 的EBGP,所以我们可以使用no-export,
分析完成,如何进行配置呢?
1ACL抓取条目
2route-map匹配不同的条目做不同的community值
3对peer应用route-map out方向
4针对于完整的链路,要一路由上游设备向下游设备发送community
实际的配置(confederation就不在这里详细说明了,可以看一下之前的配置)
R1(config)#access-list 1 per 192.168.1.0 R1(config)#access-list 2 per 192.168.2.0 R1(config)#access-list 3 per 192.168.3.0 R1(config)#access-list 4 per 192.168.4.0 //使用不同的ACL号码抓取不同的条目 R1(config)#route-map wfy per 10 R1(config-route-map)#ma ip add 1 //使用permit 10 匹配acl 1 R1(config-route-map)#set community no-advertise //匹配上的就设置值为no-advertise R1(config-route-map)#exit R1(config)#route-map wfy per 20 R1(config-route-map)#ma ip add 2 //使用permit 20 匹配ACL 2 R1(config-route-map)#set community local-AS //匹配上就设置属性为local-as R1(config-route-map)#exit R1(config)#route-map wfy per 30 R1(config-route-map)#ma ip add 3 //使用permit30 匹配ACL 4 R1(config-route-map)#set community no-export //匹配上就设置属性为no-export R1(config-route-map)#exit R1(config)#route-map wfy per 40 //使用permit 40放行其它条目 R1(config-route-map)#exit //可以看到 192.168.4.0 条目我们没有设置任何的值,要放行 R1(config)#router bgp 100 R1(config-router)#nei 2.2.2.2 send-community //针对于邻居下发community,必须手动指定,默认是不传递community值的,因为是可选传递的 R1(config-router)#nei 2.2.2.2 route-map wfy out //在out方向应用策略