由于来自EBGP的路由互为下一跳导致路由迭代成环CPU升高

发布时间:  2014-12-31 浏览次数:  190 下载次数:  0
问题描述

某局点RouterA原先只与RouterC建立IBGP邻居。客户希望与RouterB新建IBGP,并且提高RouterB路由preferred-value,让RouterB作为主路径,RouterC作为备份路径。

当RouterA与RouterB的邻居up后,发现流量丢包严重,并且RouterA的CPU升高。断开RouterA与RouterB的邻居后恢复,邻居重新up后,故障依旧。

处理过程

【分析思路】

1、根据问题现象初步定界故障是否与BGP强相关。

2、BGP路由引起的CPU高一般是由于路由震荡或迭代成环导致,优先排查。

3、找到异常路由,查找路由源。

 

【故障分析】

1、根据问题现象,RouterA与RouterB的邻居up就出问题,断开就恢复,因此可以判断与BGP邻居建立强相关。BGP邻居建立本身不会引起CPU升高,因此怀疑与来自RouterB的BGP路由收发有关。

 

2、多次查看display bgp peer显示,RouterA从RouterB和RouterC收到的报文数量没有明显增长,排除路由源发生震荡的可能。重点排查是否存在迭代成环。

用display ip routing-table x.x.x.x verbose命令随机查看几条BGP路由,发现下一跳为10.1.2.98的路由时间戳始终为0s。

继续查看此路由下一跳地址10.1.2.98对应的路由,并且递归查看下一跳的下一跳对应的路由,直到查到直连路由或IGP路由为止,确认是否存在迭代成环。

<RouterA>display ip routing-table 123.1.1.4 verbose

Destination: 123.1.1.4/30

     Protocol: BGP             Process ID: 0

   Preference: 255                   Cost: 0

      NextHop: 10.1.2.98        Neighbour: 10.1.0.3

        State: Active Adv             Age: 00h00m00s

 

// 查看下一跳地址10.1.2.98对应的路由

<RouterA>display ip routing-table 10.1.2.98 verbose

Destination: 10.1.2.96/30

     Protocol: BGP             Process ID: 0

   Preference: 255                   Cost: 0

      NextHop: 10.1.2.102       Neighbour: 10.1.0.3

        State: Active Adv             Age: 00h00m00s

 

// 查看10.1.2.98的下一跳地址10.1.2.102对应的路由

<RouterA>display ip routing-table 10.1.2.102 verbose

Destination: 10.1.2.100/30

     Protocol: BGP             Process ID: 0

   Preference: 255                   Cost: 0

      NextHop: 10.1.2.98        Neighbour: 10.1.0.3

        State: Active Adv             Age: 00h00m00s

 

 

由此可见,10.1.2.98的下一跳是10.1.2.102,10.1.2.102的下一跳是10.1.2.98,因此,可以确定存在迭代成环的情况。

下一步继续排查成环路由的来源,以及成环的原因。

 

 

3、因为异常路由来自RouterB(10.1.0.3),因此到RouterB继续查看路由源,依此类推,梳理出路由发布的过程如下。

 

RouterD和RouterE这两台设备上都配置了import-route direct,因此RouterD会把直连网段路由10.1.2.96/30发给RouterE,RouterE转发给RouterB。同样,RouterE也会把10.1.2.100/30发给RouterD,RouterD也转发给RouterB。

 

在RouterB上,BGP路由表中10.1.2.96/30下一跳为10.1.2.102,10.1.2.100/30下一跳为10.1.2.98。

由于RouterB上有直连路由10.1.2.96/30和10.1.2.100/30,所以IP路由表中优选直连路由,不会优选BGP路由,所以不会成环。因为RouterB没有配next-hop-local,所以路由转发给IBGP邻居RouterA时不会修改下一跳。

 

在RouterA上,与RouterB之间的邻居up前,优选来自RouterC的路由。RouterC配有next-hop-local,因此RouterA看到这两条路由的下一跳都是与RouterC的邻居地址10.1.0.4,可以迭代成功,没问题。

 

RouterA与RouterB的邻居up后,来自RouterB的路由因为preferred-value优于RouterC的路由,这两条路由10.1.2.100/30(下一跳10.1.2.98命中路由10.1.2.96/30)和10.1.2.96/30(下一跳10.1.2.102命中路由10.1.2.98/30)互为下一跳,在迭代时成环,都会变成不活跃。

 

当迭代成环时,从RouterB来的这两条路由会变为不活跃,来自RouterC的路由10.1.2.96/30和10.1.2.100/30重新活跃,又会触发所有迭代到10.1.2.96/30和10.1.2.100/30的路由重新迭代。又会出现一遍RouterB的路由被优选RouterC不被优选的过程,随即又因为迭代成环变为RouterB的路由不活跃RouterC的路由重新活跃。

因此,10.1.2.100/30和10.1.2.96/30这两条路由在活跃和不活跃之间频繁的快速切换。

 

如果只是这两条路由成环,本不至于造成CPU升高,但从RouterD和RouterE来的所有路由下一跳都是10.1.2.98和10.1.2.102,因此会造成这些路由在迭代下一跳时也随之快速频繁变化,所以CPU升高了。  

 

根因
来自RouterB的路由10.1.2.100/30(下一跳10.1.2.98命中路由10.1.2.96/30)和10.1.2.96/30(下一跳10.1.2.102命中路由10.1.2.98/30)互为下一跳,迭代成环,引起所有下一跳是10.1.2.98和10.1.2.102的路由在活跃和不活跃间频繁切换。因此,引起CPU升高。
解决方案

方案一:

10.1.2.96/30和10.1.2.100/30是RouterB的直连路由,在AS 100中也可以通过RouterB在IGP或BGP发布,避免BGP路由被优选。

 

方案二:

在RouterB上也配置peer <RouterA> next-hop-local。
建议与总结
解决方案有很多,这里只是举两个例子,具体方案要针对客户需求而定。

END