目录
背景
在一个大型网络中所有路由器上如果都需要匹配具有相同属性的路由条目,如果用 ACL 或者 prefix-list 进行匹配,则工作量比较大。
所以可以在一台路由器上为相应的路由条目打上 community 属性值,在其他路由器上可以通过匹配 community 属性值的方式间接地来匹配路由条目,从而简化了路由条目的匹配工作。
community 介绍
BGP的community扩展属性,也称为团体属性,可以理解为一个简化版的策略。
团体属性是一组有相同特征的目的地址的集合。
利用团体可以使多个AS中的一组BGP设备共享相同的策略。团体是一个路由属性,在BGP对等体之间传播,且不受AS的限制。
另外:BGP设备在将带有团体属性的路由发布给其它对等体之前,可以先改变此路由原有的团体属性。
即:BGP 的 community 属性属于可选可传递属性,不支持该属性的BGP router 原封不动的将community值传递给下游BGP邻居。它可以用于简化网络中路由器对具有相同属性的路由条目的匹配工作。
Community属性值
Community属性是一组4个字节的数值,RFC1997规定前两个字节表示AS号,后两个字节表示基于管理目的设置的标示符,格式为AA:NN。
Community属性是一种BGP路由标记,用于简化路由策略的执行。可以将某些路由分配一个特定的Community属性值,之后就可以基于Community值而不是每条路由来抓取路由并执行相应的策略了。
Community 应用举例
上图中,AS100内有大量的路由被引入BGP,这些路由分别用于语音通话和视频监控两种业务。路由通过BGP通告给AS200。现在AS200的设备基于某种需求,需要分别对语音通话和视频监控的路由执行不同的策略,那么怎么匹配这些路由呢?可以用ACL或者ip-prefix逐条匹配路由,但是由于路由前缀非常多,这样工作量太大,效率低下。
可以使用Community属性来解决这个问题。在AS100引入这些路由的时候,就分别打上相应的Community值用来区分语音通话的路由和视频监控的路由,凡是语音通话的路由,就打上标记100:1,凡是视频监控的路由就打上标记100:2,那么这些属性值随着路由传递给了AS200,在AS200上需要分别对语音通话和视频监控的路由做策略的时候,只需要抓取相应Community值即可。例如抓取100:1的community值也就抓取了所有语音业务的路由。
community 分类
community 属性分为私有 community 属性值和公共的 community 属性值。
公共的 community 属性值
-
no-export
不转发给联盟外的 EBGP 邻居,只转发给 IBGP 邻居和联盟内的 EBGP 邻居。 -
internet
默认的 community 属性,转发给任何邻居 -
no-advertise
谁也不宣告,包括 EBGP 或 IBGP 对等体 -
local-AS
表示 Community 属性值:NO_EXPORT_SUBCONFED,不转发给联盟内的 EBGP 邻居,只转发给 IBGP 邻居。
AS 联盟的含义:
community 的使用
设置路由的Community属性
- 需求描述
如图所示,在AS100内的LSW1上通过BGP发布两条路由:10.1.1.0/24和10.1.2.0/24。在LSW1的BGP进程中,使用出方向(export)路由策略,修改10.1.1.0/24这条路由的Community属性为100:1,这样下游设备就可以根据这个Community属性执行相应的策略。
使用Community-filter匹配BGP路由
当上游的设备设置了Community属性以后,这个属性会随着路由传递下来,这样下游的设备就可以根据这个属性执行相应的策略。BGP提供了一个工具:community-filter,即团体属性过滤器。
sonic 配置:
1》设置前缀列表匹配路由
sonic(config)# ip prefix-list 1 seq 5 permit 11.0.0.0/8
sonic(config)# ip prefix-list 2 seq 5 permit 22.0.0.0/8
sonic(config)# ip prefix-list 3 seq 5 permit 33.0.0.0/8
2》使用 route-map 做路由策略
sonic(config)# route-map comm-test permit 10
sonic(config-route-map)# match ip address prefix-list 1
sonic(config-route-map)# set community no-advertise
sonic(config-route-map)# route-map comm-test permit 20
sonic(config-route-map)# match ip address prefix-list 2
sonic(config-route-map)# set community local-AS
sonic(config-route-map)# route-map comm-test permit 30
sonic(config-route-map)# match ip address prefix-list 3
sonic(config-route-map)# set community none
3》BGP 配置
sonic(config)# router bgp 100
sonic(config-router)# neighbor 192.168.12.2 remote-as 200
sonic(config-router)# address-family ipv4 unicast
sonic(config-router-af)# neighbor 192.168.12.2 route-map comm-test out
sonic(config-router-af)# exit-address-family
sonic(config-router)# network 11.0.0.0/8
sonic(config-router)# network 22.0.0.0/8
sonic(config-router)# network 33.0.0.0/8
报文分析
对于11.0.0.0/8 前缀路由通告报文,内部携带了 community 属性值为 no_advertise ,路由器 R1 收到后不会通告给任何 BGP邻居,因此 11.0.0.0/8 这条路由信息在 R2、R3 上都看不到。
对于 22.0.0.0/8 前缀路由通告报文,内部携带了 community 属性值为 no_export_subconfed ,路由器 R1 与 R2 属于 IBGP 邻居,因此 22.0.0.0/8 这条路由信息在会继续通告給 R2,community 属性也会一同传播给 R2。R2 与 R3 属于 EBGP 邻居关系,因此不会继续通告给 R3。
对于 33.0.0.0/8 前缀路由通告报文,内部没有携带 community 属性值,因此这条 BGP 信息会传播给所有路由器。
参考
https://www.modb.pro/db/136374
https://support.huawei.com/enterprise/zh/doc/EDOC1000141354/443d911b