分类: 系统运维
2010-05-20 09:34:00
这个属性在一般很少用得上,我估计在运营商的核心网络会用到。在AS域多的情况下将会收到很好的效果,其原理是启用BGP联邦,然后在子AS之间的路由器递送BGP community属性。碰巧俺搞过的企业网中用到这个BGP comunity 属性,我现在做点总结。
community属性。这是不同于选路属性的一个属性。该属性具有以下几个特点;
1 community是一个任选可透明传送属性,它可以简化策略的执行。
2 它是cisco的一个专有属性,现在在RFC1997中已被标准化。
3 commnity属性标明一个目的地作为一些目的地团体中的一个成员,这些目的地共享一个或多个共同的特性。
4 community值可以自己定义,另外有几个已经定义好的团体属性:
NO_ADVERTISE: 表示携带该值的路由不能公布给EBGP和 IBGP邻居
NO_EXPORT:表示携带该值的路由不能公布给EBGP邻居
LOCAL_AS:(NO_EXPORT_SUBCONFED)携带该值的路由可以公布给联盟内的其它子自治系统但不能在构成联盟的AS以外进行公布。
以下是一个BGP community 属性的配置实例,我是转载其他人的,我懒得贴我自己的配置了。
r1#sh run | b r b
router bgp 100
network 2.2.2.0 mask 255.255.255.0
r2#sh run | b r b
router bgp 64512
bgp confederation identifier 234
r3#sh run | b r b
router bgp 64512
r4#sh run | b r b
router bgp 64513
r5#sh run | b r b
router bgp 500
查看网络
r2#sh ip bgp
*> 2.2.2.0/24
*> 22.22.22.0/24
*> 222.222.222.0
r3#sh ip bgp
*>i2.2.2.0/24
*>i22.22.22.0/24
*>i222.222.222.0
在R2上已经修改了下一跳,所以这时下一跳已经是R2自己了。
r4#sh ip bgp
*
*
*
注意在R4上看,下一跳依然是R2;为什么不是R3呢?因为R3,R4虽然在同一联邦内,但它们在不同的子AS之间,应该是EBGP关系。EBGP之间传递路由时,下一跳因该是EBGP邻居。但这里为什么不是呢。这就是联邦内EBGP与联邦外EBGP的不同之处。所以现在这些路由的下一跳对于R4来说是不可达的,所以现在路由无法优化,也就无法向R5传递。现在在R3上修改下一跳
r3(config)#router bgp 64512
r3(config-router)#neighbor 34.0.0.4 next-hop-self
r4#sh ip bgp
*> 2.2.2.0/24
*> 22.22.22.0/24
*> 222.222.222.0
这时,在R4上看,下一跳已经变成了R3,路由可以优化。注意在AS路径中可以看到路由经过了子AS 64512
r5#sh ip bgp
*> 2.2.2.0/24
*> 22.22.22.0/24
*> 222.222.222.0
R5上也可以收到这些路由了,注意R5的AS路径看不到子AS ,只能看到联邦的总AS号。因此可以得出这样的结论:联邦内的子AS对于联邦外部来说是隐藏的,不可见的。
到现在为止,所有路由器都可以学习到路由,下面就要应用团体属性来控制路由的传递了。
这里最合适的community属性应该是:no_advertise 因为它不会向任何EBGP IBGP邻居公布路由。
r1(config)#access-list 1 permit 2.2.2.0 0.0.0.255
r1(config)#route-map WY permit 10
r1(config-route-map)#match ip add 1
r1(config-route-map)#set community no-advertise
r1(config)#route-map WY permit 20 /与ACL一样 route-map最后也隐藏了一句deny any ,所以在这里要允许所有,要不然其它两条路由会因为匹配不上而无法从R1传递出去。
r1(config)#router bgp 100
r1(config-router)#neighbor 12.0.0.2 route-map WY out
r1(config-router)#neighbor 12.0.0.2 send-community /让R2传递该社团属性
先在R2上进行查看;
r2#sh ip bgp
*> 2.2.2.0/24
*> 22.22.22.0/24
*> 222.222.222.0
R2可以学习到该路由
在R3上查看
r3#sh ip bgp
*>i22.22.22.0/24
*>i222.222.222.0
可以看到R3已经收不到2.2.2.0这个网络了,往后的路由器也无法收到了。所以社团属性
No_advertise 满足了只让R2学到该路由的需求。
四
因为R2,R3处于联邦内同一个子AS,意思是该路由不能传递出这个子AS,所以可以用community属性:LOCAL_AS
r1(config)#access-list 2 permit 22.22.22.0 0.0.0.255
r1(config)#route-map WY permit 10
r1(config-route-map)#match ip add 2
r1(config-route-map)#set community local-AS
r1(config)#route-map WY permit 20
现在进行查看
r2#sh ip bgp
*> 2.2.2.0/24
*> 22.22.22.0/24
*> 222.222.222.0
R2可以学习到。
r3#sh ip bgp
*>i2.2.2.0/24
*>i22.22.22.0/24
*>i222.222.222.0
R3也可以学到
r4#sh ip bgp
*> 2.2.2.0/24
*> 22.22.22.0/24
*> 222.222.222.0
为什么R4依然可以学习到,难道属性没起作用吗?显然属性没有起作用,这是因为R2向R3传递该路由时没有让R3继承这个属性,所以R4依然可以学习到,现在必须在R2上配置让R3继承这个属性,这样R3向R4传递路由时团体属性才能生效。
r2(config)#router bgp 64512
r2(config-router)#neighbor 23.0.0.3 send-community
在R2上配置让R3继承该属性
r4#sh ip bgp
*> 2.2.2.0/24
*> 222.222.222.0
现在R4就收不到这条路由了,R5当然也收不到,LOCAL_AS团体属性满足了这个需求。
这个需求意思是让这条路由不传到联邦外(大AS之外),所以要用NO_EXPORT属性
r1(config)#access-list 3 permit 222.222.222.0 0.0.0.255
r1(config)#route-map WY permit 10
r1(config-route-map)#match ip add 3
r1(config-route-map)#set community no-export
r1(config)#route-map WY permit 20
为了让R4能继承到该属性,必须在R1,R2,R3都配置send-community以便让该属性进行传递。在配置了传递属性之后,现在进行查看
r4#sh ip bgp
*> 2.2.2.0/24
*> 22.22.22.0/24
*> 222.222.222.0
R4可以收到
r5#sh ip bgp
*> 2.2.2.0/24
*> 22.22.22.0/24
R5已经学习不到222.222.222.0了。需求满足。
但上面的做法有一个明显的缺点就是要在R1,R2,R3上配置传递该属性,比较麻烦。
现在用另一种比较简单的方法。
在R4上直接进行配置。
r4(config)#access-list 1 permit 222.222.222.0 0.0.0.255
r4(config)#route-map WY permit 10
r4(config-route-map)#match ip add 1
r4(config-route-map)#set community no-export
r4(config)#route-map WY permit 20
r4(config)#router bgp 64513
r4(config-router)#neighbor 34.0.0.3 route-map WY in
指定R3向R4传递路由时应用该route-map,所以是in方向的。
现在在R5上进行查看
r5#sh ip bgp
*> 2.2.2.0/24
*> 22.22.22.0/24
这时,R5已经学习不到这条路由了,可见这种做法也起了作用