由于明细路由带团体属性no-advertise导致聚合路由不发布

发布时间:  2013-12-24 浏览次数:  101 下载次数:  0
问题描述
RouterA上有123.1.1.1/32、123.1.1.2/32等明细路由,客户希望将这些明细路由聚合成24位网段路由发布给邻居RouterB,但配置aggregate 123.1.1.0 255.255.255.0后发现邻居RouterB没有收到聚合路由。
处理过程

【分析思路】
首先,界定问题出在哪台设备,是RouterA没有发布还是RouterB没有收到。
然后,在出问题的设备上查看路由信息及配置信息,确认问题原因。

【故障分析】
在RouterA上查看BGP路由信息,发现路由携带了团体属性"no-advertise",因此没有发布给邻居。
<Quidway>display bgp routing-table 123.1.1.0 24
 BGP local router ID : 12.1.1.1
 Local AS number : 100
 Paths:   1 available, 1 best, 1 select
 BGP routing table entry information of 123.1.1.0/24:
 Aggregated route.
 Route Duration: 01h57m21s
 Direct Out-interface: NULL0
 Original nexthop: 127.0.0.1
 Qos information : 0x0
 Community:<123:1>, no-advertise
 AS-path Nil, origin incomplete, pref-val 0, valid, local, best, select, active, pre 255
 Aggregator: AS 100, Aggregator ID 12.1.1.1
 Not advertised to any peer yet

排查123.1.1.0/24网段内携带团体属性"no-advertise"的明细路由,发现123.1.1.3/32携带有"no-advertise"。
<Quidway>display bgp routing-table community no-advertise
 BGP Local router ID is 12.1.1.1
 Status codes: * - valid, > - best, d - damped,
               h - history,  i - internal, s - suppressed, S - Stale
               Origin : i - IGP, e - EGP, ? - incomplete
 Total Number of Routes: 2
      Network            NextHop        MED        LocPrf    PrefVal Community
 *>   123.1.1.0/24       127.0.0.1                             0      <123:1>, no-advertise
 *>i  123.1.1.3/32       13.1.1.2        0          100        0      no-advertise
问题的原因找到了,从邻居13.1.1.2收到的明细路由123.1.1.3/32携带团体属性"no-advertise",导致聚合路由也继承了"no-advertise",不向邻居发布此路由。

根因
明细路由123.1.1.3/32携带团体属性"no-advertise",导致聚合路由也继承了"no-advertise",不向邻居发布此路由。
解决方案

【相关知识】
团体的作用是对一组路由进行分类。分类标识通过团体属性的方式添加到路由上,路由可以携带团体属性发布给邻居。使用路由的设备可以针对相同团体的路由采取相同的策略。
在手动聚合时,缺省会将明细路由的团体属性继承到聚合路由上,从而让使用路由的设备能感知到聚合路由也属于此团体。
aggregate命令配置灵活,可以从as-set、detail-suppressed、suppress-policy、origin-policy、attribute-policy等多种方面控制路由聚合结果(详见命令手册),可以根据客户具体需求调整聚合策略。

方案举例如下:
【方案一】配置detail-suppressed,聚合路由带Atomic-aggregate属性,不发布明细路由也不继承明细路由的团体属性。
配置举例:
bgp 100
 aggregate 123.1.1.0 255.255.255.0 detail-suppressed
方案特点:
配置简单,满足不继承团体属性no-advertise的需求。
但是,明细路由也不会发布,如果客户需要发布明细路由,则此方案不可取。

【方案二】配置attribute-policy,聚合路由不继承明细路由的团体属性。
配置举例:
route-policy comm-none permit node 10
 apply community none
#
bgp 100
 aggregate 123.1.1.0 255.255.255.0 attribute-policy comm-none
方案特点:
不继承明细路由的任何团体属性,与友商某些版本的缺省实现一致,在替换设备时不会引起差异。
但是,聚合路由不继承团体属性,则表示聚合路由不再与明细路由属于同一团体,路由使用者针对该团体采取的策略对聚合路由不会生效。例如,123.1.1.1/32 携带团体属性<123:1>,聚合之前RouterB可以根据<123:1>对123.1.1.1/32做策略,但是聚合之后不继承团体属性,在RouterB上就不会对聚合路由123.1.1.0/24做策略。

【方案三】配置origin-policy,有no-advertise的明细路由不参与聚合。
配置举例:
ip community-filter 1 permit no-advertise
#
route-policy agg-no-adv deny node 10
 if-match community-filter 1
route-policy agg-no-adv permit node 100
#
bgp 100
 aggregate 123.1.1.0 255.255.255.0 origin-policy agg-no-adv
方案特点:
聚合路由不会携带no-advertise,而且解决了方案二聚合路由不继承123.1.1.1/32的团体属性<123:1>的问题。

建议与总结
此案例中描述的场景,除了"头疼医头脚疼医脚"式的解决聚合路由继承团体属性no-advertise的问题之外,还应进一步思考这种场景是否合理。
例如,RouterA上的123.1.1.3/32带有团体属性no-advertise,本意可能是不希望其他设备收到此路由,即不希望有流量走到123.1.1.3。但是,聚合路由123.1.1.0/24不带no-advertise,可以发给其他设备。去往123.1.1.3的流量仍可以命中24位聚合路由走到RouterA,在RouterA上命中32位明细路由再走到123.1.1.3。这样的话,就不是单纯通过路由聚合能解决的,甚至需要结合流分类才能搞定。
因此,需要了解客户更具体的需求细节,比如,123.1.1.3/32是否应该携带no-advertise、其目的是不是像我们猜测的那样不希望流量走到123.1.1.3、收到聚合路由的设备上是否会有流量目的地址是123.1.1.3、……。也许这条路由本不该携带no-advertise,或者客户并不关心是否有流量目的地址是123.1.1.3,那么就省去了纠结于哪种解决方案更好的苦恼。
总之,最重要的还是要挖掘客户真正的需求,找到问题真正的根因,从根本上解决问题,避免"治标不治本"。

END