BGP communities 属性
BGP 的community 属性属于可选可传递属性,不支持该属性的路由器会原封不动的将community 值传递给下游BGP邻居(前提是配置了传递community 属性)。
BGP 的community 属性可以简化网络中路由器对相同路由条目的匹配工作,如果在一个大型网络中所有路由器上都需要匹配相同的路由条目,如果用ACL或者前缀列表进行匹配,则工作量比较大,所以可以在一台路由器上为相应的路由条目打上community 属性值,在其他路由器上可以通过匹配community 属性值的方式间接地来匹配路由条目,从而简化了路由条目的匹配工作。
Community 属性的类别:
可以分为私有community 属性值和众所周知的community 属性值。
私有的community 属性值通常用4字节的数字来表示(可以为一个32位的数,也可以是两个16位的数字,如100:1)
在CISCO 的路由器中,默认是以32位的数字显示,如果要转换成两个16位的数字,则需用通过命令进行转换((config)#ip bgp-community new-format),会同时转换BGP表中的显示格式和配置文件中的显示格式。
ip bgp-community new-format 命令仅对本路由器有效,对邻居路由器无效。
众所周知的community 属性值主要有:
no-advertise : 不通告给任何BGP邻居(最严格)。
no-export : 不通告给任何EBGP邻居,如果存在BGP联邦,则会在联邦内的EBGP邻居之间传递。
local-AS :仅在AS 内传递,如果存在BGP联邦,
internet :表示所有路由,可以通过匹配Internet 属性来匹配所有的路由条目
当路由器接受到一条带有众所周知community 属性值的路由条目时,必须要做出相应的动作(根据community 属性值不同而不同)
也可以分为标准的community 属性值和扩展的community 属性值。
扩展的community 属性值一般在MPLS VPN 网络中才会涉及到。
注:
一条路由前缀可以携带多个community 值,可以同时携带私有community值和众所周知的community值。
在任何一台BGP 路由器上可以覆盖、追加、删除community 值。
BGP 的community 属性值不会自动传递给邻居,必须为特定的邻居配置传递。
(config-router)#neighbor 192.168.12.2 send-community ##为特定的邻居发送路由时传递community 属性。
配置:
l 为路由条目添加community 属性值
1、 使用ACL或者前缀列表匹配需要添加community 属性值的路由条目,尽量使用前缀列表匹配。
(config)#ip prefix-list 1 permit 1.1.1.1/32
2、 定义一个route-map ,匹配到相应的路由条目,并且追加或者覆盖community 属性值。
(config)#route-map 1 permit 10
(config-route-map)# match ip address prefix-list 1 ##匹配需要添加community 属性的路由条目
(config-route-map)# set community 126:1 ##为匹配到的路由条目打上一个私有的community 属性值
(config-route-map)# set community no-advertise ##为匹配到的路由前缀打上一个众所周知的community属性值
(config-route-map)# set community 126:1 no-advertise ##为匹配到的路由前缀打上一个私有的和一个众所周知的community值。
3、在BGP中定义在发送或者接收路由时添加communti 属性值。
(config-router)#neighbor 192.168.12.2 route-map 1 out ##为BGP邻居配置策略,在发送BGP路由时应用route-map 1 的策略,也就是为相应的路由前缀打上community 值。
(config-router)# neighbor 192.168.12.2 send-community ##为邻居发送BGP路由时,携带community 属性值
4、查看带有community 属性值得BGP 路由
R2#show ip bgp community ##查看带有community 属性值的BGP条目
BGP table version is 8, local router ID is 192.168.23.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*>i1.1.1.1/32 192.168.12.1 0 100 0 i ##说明当前的路由前缀携带了community 值
5、查看BGP路由条目中的communtiy 值
R2#show ip bgp 1.1.1.1
BGP routing table entry for 1.1.1.1/32, version 8
Paths: (1 available, best #1, table Default-IP-Routing-Table)
Advertised to update-groups:
2
Local
192.168.12.1 from 192.168.12.1 (192.168.26.2)
Origin IGP, metric 0, localpref 100, valid, internal, best
Community: 126:1 ##路由条目中携带的community 值。
R2#show ip bgp 1.1.1.1
BGP routing table entry for 1.1.1.1/32, version 8
Paths: (1 available, best #1, table Default-IP-Routing-Table, not advertised to any peer)
Flag: 0x880
Not advertised to any peer
100
192.168.12.1 from 192.168.12.1 (1.1.1.3)
Origin IGP, metric 0, localpref 100, valid, external, best
Community: 100:1 1000:1 no-advertise ##当前路由前缀中携带了3个community 属性值
l 在其他BGP路由器上追加community 值
1、 通过ACL、前缀列表、或者commun-list 列表匹配到要追加community 值的路由条目
(config)#ip prefix-list 1 permit 1.1.1.1/32 ##通过前缀匹配路由条目
(config)#ip community-list 1 permit 126:1 ##通过community-list 匹配路由条目,因为1.1.1.1/32的路由条目中已经携带了126:1的community 值,所以可以通过匹配communit 值来间接的匹配路由条目。
2、 定义route-map 并追加community 值。
(config)#route-map 1 permit 10 ##创建一个route-map
(config-route-map)#match ip address prefix-list 1 ##通过ip 前缀匹配路由条目
(config-route-map)#match community 1 ##也可以通过community-list 来匹配路由条目。
(config-route-map)# set community 100:1 additive ##追加上一个community 值,其中关键字additive 就是追加的意思,如果没有该关键字,将会覆盖掉路由条目中的community 值。
注:在route-map 中可以使用前缀列表或者community-list 来匹配路由条目,如果同时配置了前缀列表和community-list,则两个列表中都满足的才算匹配,也就是两个条件是and 关系。
3、 将定义好的route-map 关联到相应的邻居。
略……………………
l 在BGP路由器上删除community 值
1、 通过IP前缀列表、ACL或者community-list 值匹配相应的路由条目。
(config)#ip community-list 1 permit 100:1 ##定义一个community-list,来匹配那些BGP路由条目中携带community 值为100:1的路由条目。
2、 定义一个community-list 值,用来定义需要删除的community 值。
(config)#ip community-list 2 permit 100:1
3、 定义route-map
(config)#route-map 1 permit 10
(config-route-map)#match community 1
(config-route-map)#set comm-list 2 delete #定义要删除的community值
4、 为相应的邻居关联route-map
l 通过community 值来匹配相应的路由,并完成相应的策略。
Community 属性值最大的用途就是简化路由条目的匹配工作。
1、使用community-list 来匹配相应的路由条目。
(config)#ip community-list 1 permit 100:1 ##匹配community 属性值中包含100:1的路由
4、 定义route-map
(config)#route-map 1 ##创建一个route-map
(config-route-map)#match community 1 ##通过定义好的community-list 1 匹配到相应的路由条目。
(config-route-map)#set weight 2000 ##将匹配到的路由条目的weight 更改为2000
5、 为相应的邻居关联route-map
(config-router)#neighbor 192.168.34.3 route-map 1 in ##从邻居192.168.34.3接收路由时应用route-map
6、 查看结果
R4#show ip bgp 1.1.1.1
BGP routing table entry for 1.1.1.1/32, version 25
Paths: (1 available, best #1, table Default-IP-Routing-Table)
Not advertised to any peer
300 126
192.168.34.3 from 192.168.34.3 (192.168.37.3)
Origin IGP, localpref 100, weight 2000, valid, external, best
Community: 126:1
l 通过community-list 匹配路由条目时的注意事项:
(config)#ip community-list 1 permit 100:1 not-adv
匹配community 属性值中至少同时包含100:1 和not-adv 的路由,也就是两个条件是且(and)的关系。
(config)#ip community-list 1 perimt 100:1
(config)#ip community-list 1 permit not-adv
匹配community 属性值中包含100:1或者包含not-adv 的路由,两个条件是或(or)的关系。
当一条路由条目中携带了多个community 属性值,默认情况下只要匹配到其中的一个community 值就能匹配到相应的路由,但这样的匹配结果不够精确,为了精确匹配到相应的路由,在route-map 中指定community-list 时,可以添加上exact-match 关键字,也就是严格匹配。
为了更清楚的说明以上内容,举个简单的例子,路由器上收到了两条BGP路由分别为:1.1.1.1/32 和1.1.1.2/32,其中1.1.1.1/32携带了一个community 值,为100:1,而1.1.1.2/32携带了两个community 值,分别为:100:1 ,200:2。现在的要求是:在路由器上只允许携带了100:1 的路由进入BGP表。
1.1.1.1/32 community:100:1
1.1.1.2/32 community:100:1 200:2
IP community-list 1 permit 100:1
Route-map 1
Match community 1
(config-router)#neighbor 192.168.1.1 route-map 1 in
通过以上配置后,1.1.1.1/32和1.1.1.2/32 都能进入BGP表,原因是在匹配的时候没有严格匹配。
案例一
1.1.1.1/32 community:100:1
1.1.1.2/32 community:100:1 100:2
IP community-list 1 permit 100:1
Route-map 1
Match community 1
(config-router)#neighbor 192.168.1.1 route-map 1 in
通过以上配置后,1.1.1.1/32和1.1.1.2/32 都能进入BGP表,原因是在匹配的时候没有严格匹配。
案例二
1.1.1.1/32 community:100:1
1.1.1.2/32 community:100:1 100:2
IP community-list 1 permit 100:1
Route-map 1
Match community 1 exact-match
(config-router)#neighbor 192.168.1.1 route-map 1 in
通过以上配置,只有1.1.1.1/32的路由可以进去BGP表,因为进行了严格匹配。
案例三
1.1.1.1/32 community:100:1
1.1.1.2/32 community:100:1 100:2
IP community-list 1 permit 100:1 100:2
Route-map 1
Match community 1
(config-router)#neighbor 192.168.1.1 route-map 1 in
通过以上配置,只会有1.1.1.2/32的路由可以进入BGP表,因为同一条community-list 中的多个值是and关系,需要同时匹配,才算匹配。
案例四
1.1.1.1/32 community:100:1
1.1.1.2/32 community:100:1 100:2
ip community-list 1 permit 100:1
ip community-list 1 permit 100:2
Route-map 1
Match community 1
(config-router)#neighbor 192.168.1.1 route-map 1 in
通过以上配置,1.1.1.1/32和1.1.1.2/32的路由都可以进入BGP表
案例五
1.1.1.1/32 community:100:1
1.1.1.2/32 community:100:1 100:2
ip community-list standard comm permit 100:1
ip community-list standard comm permit 100:2
Route-map 1
Match community comm exact-match
(config-router)#neighbor 192.168.1.1 route-map 1 in
通过以上配置,1.1.1.1/32可以进入BGP表,因为1.1.1.2/32的路由不能严格匹配。
案例六
1.1.1.1/32 community:100:1
1.1.1.2/32 community:100:1 100:2
ip community-list 1 permit 100:1
ip community-list 2 permit 100:2
route-map 1 permit 10
match community 1 2
(config-router)#neighbor 192.168.1.1 route-map 1 in
通过以上配置,1.1.1.1/32和1.1.1.2/32的路由都可以进入BGP表
案例七
1.1.1.1/32 community:100:1
1.1.1.2/32 community:100:1 100:2
ip community-list standard comm permit 100:1
ip community-list standard comm2 permit 100:2
route-map 1 permit 10
match community comm comm2 exact-match
(config-router)#neighbor 192.168.1.1 route-map 1 in
通过那个配置,只有1.1.1.1/32的路由可以进入BGP表
原文地址:http://wandw.blog.51cto.com/745967/1739493