由于IGP与BGP互引导致路由出现环路震荡

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

【Problem Summary】pacekt is droped on IDC network
【Problem Details】

在AS 65001中,域内由OSPF路由打通,RouterA和RouterB作为边界网关,将域内的OSPF路由引入到BGP发布给EBGP邻居,同时也将EBGP路由引入到OSPF扩散到域内其他设备。实现域内设备与AS 100之间互通。

RouterA和RouterB建立IBGP邻居,与域内其他设备没有BGP邻居。RouterA和RouterB作为主备平面,均可从AS 100的EBGP邻居收到路由123.1.1.4/32,OSPF再将其引入并扩散到RouterC。

布署完毕后,在RouterC查看,可以学到路由123.1.1.4/32,但是流量存在少量丢包。

 

处理过程

【分析思路】

1、首先确认链路和路由是否正常。查看路由表项,确认是否存在路由震荡、环路、被抑制等情况。

2、寻找震荡源头,发掘可能引起震荡的线索。

3、分析形成震荡的过程。对于震荡的路由,选取路由震荡过程中一个时间点作为分析的出发点,单步分析每一个静止时间点发生的变化和由此触发的其他变化,从而理清变化过程。

切忌:把震荡过程中瞬间发生的大量变化混杂在一起反而无从下手。

 

 

【故障分析】

1、经确认链路正常。

在RouterC上查看,可以看到O_ASE路由,但时间戳显示只有几秒。快速多次查看,发现路由下一跳有时是RouterA,有时是RouterB,有时查不到路由。因此,可以确定丢包是路由震荡引起的,下一步需分析路由震荡原因。

<RouterC>display ip routing-table 123.1.1.4 verbose

Destination: 123.1.1.4/32

     Protocol: O_ASE           Process ID: 1

   Preference: 150                   Cost: 1

      NextHop: 23.1.1.2         Neighbour: 0.0.0.0

        State: Active Adv             Age: 00h00m03s

          Tag: 1                 Priority: medium

        Label: NULL               QoSInfo: 0x0

   IndirectID: 0x0

 RelayNextHop: 0.0.0.0          Interface: Ethernet0/0/1

     TunnelID: 0x0                  Flags:  D

 

2、寻找震荡源头。

RouterC的O_ASE来自RouterA和RouterB,因此在RouterA和RouterB上查看路由,发现路由时间戳也在频繁变化。快速多次查看,发现路由大部分时间显示为O_ASE、EBGP,有时显示为IBGP,且偶尔会查不到路由。因此推测问题与BGP和IGP互引有关。

<RouterA>display ip routing-table 123.1.1.4 verbose

Destination: 123.1.1.4/32

     Protocol: EBGP            Process ID: 0

   Preference: 255                   Cost: 0

      NextHop: 14.1.1.4         Neighbour: 14.1.1.4

        State: Active Adv             Age: 00h00m11s

          Tag: 0                 Priority: low

        Label: NULL               QoSInfo: 0x0

   IndirectID: 0x6

 RelayNextHop: 0.0.0.0          Interface: Ethernet0/0/2

     TunnelID: 0x0                  Flags:  D

<RouterA>

<RouterA>display ip routing-table 123.1.1.4 verbose

Destination: 123.1.1.4/32

     Protocol: IBGP            Process ID: 0

   Preference: 255                   Cost: 1

      NextHop: 1.1.1.2          Neighbour: 1.1.1.2

        State: Inactive Adv Relied    Age: 00h00m00s

          Tag: 0                 Priority: low

        Label: NULL               QoSInfo: 0x0

   IndirectID: 0x8

 RelayNextHop: 12.1.1.2         Interface: Ethernet0/0/0

     TunnelID: 0x0                  Flags: RD

<RouterA>

<RouterA>display ip routing-table 123.1.1.4 verbose

Destination: 123.1.1.4/32

     Protocol: O_ASE           Process ID: 1

   Preference: 150                   Cost: 1

      NextHop: 12.1.1.2         Neighbour: 0.0.0.0

        State: Active Adv             Age: 00h00m00s

          Tag: 1                 Priority: medium

        Label: NULL               QoSInfo: 0x0

   IndirectID: 0x0

 RelayNextHop: 0.0.0.0          Interface: Ethernet0/0/0

     TunnelID: 0x0                  Flags:  D

 

3、因为路由源头是RouterD发布给RouterA和RouterB的EBGP路由,可以选取RouterA从RouterD收到路由的时间点作为分析的出发点。见表格步骤0。

当RouterA从RouterD收到EBGP路由时,BGP会转发此路由给IBGP邻居RouterB,OSPF会将此路由引入后发布O_ASE给域内的邻居RouterB、RouterC。此时,RouterB存在一条O_ASE路由、一条EBGP路由和一条IBGP路由,由于preference优选O_ASE。RouterC存在一条来自RouterA的O_ASE路由。见表格步骤1。

RouterB优选O_ASE路由时,BGP会将O_ASE路由引入到BGP路由表中。因为根据BGP的选路规则本地引入的路由优于从IBGP邻居收到的路由,因此会将此路由发给IBGP邻居RouterA,携带的as-path为空。此时,RouterA存在一条EBGP路由和IBGP路由,由于as-path长度原因优选IBGP路由。见表格步骤2。

RouterA优选IBGP路由时,OSPF无法引入IBGP路由,BGP也不再转发来自EBGP的路由,因此向邻居撤销O_ASE路由和BGP路由。此时,RouterB上O_ASE路由被撤销,BGP就无法引入该路由,因此只剩一条来自RouterD的EBGP路由。而RouterC上此时没有路由。见表格步骤3。

RouterB上BGP就无法引入O_ASE路由,BGP会撤销发给RouterA的as-path为空的路由。因为EBGP路由优选,所以也会将此as-path为100的路由转发给RouterA,同时,OSPF也可以将此路由引入后发布给域内邻居RouterA、RouterC。此时,RouterA存在一条O_ASE路由、一条EBGP路由和一条IBGP路由,由于preference优选O_ASE。RouterC存在一条来自RouterB的O_ASE路由。见表格步骤4。

RouterA优选O_ASE路由时,BGP会将O_ASE路由引入到BGP路由表中。因为本地引入的路由优于从IBGP邻居收到的路由,因此会将此路由发给IBGP邻居RouterB,携带的as-path为空。此时,RouterB存在一条EBGP路由和IBGP路由,由于as-path长度原因优选IBGP路由。见表格步骤5。

RouterB优选IBGP路由时,OSPF无法引入IBGP路由,BGP也不再转发来自EBGP的路由,因此向邻居撤销O_ASE路由和BGP路由。此时,RouterA上O_ASE路由被撤销,BGP就无法引入该路由,因此只剩一条来自RouterD的EBGP路由。而RouterC上此时没有路由。见表格步骤6。

当RouterA优选EBGP路由时,BGP和OSPF都向邻居发布路由,又回到了步骤1的状况。于是从步骤1到步骤6反复不断,路由也随之不断震荡。

 

RouterA

RouterB

RouterC

0:出发点

EBGP: as-path 100

EBGP: as-path 100

 

1:RouterA

优选EBGP路由,

BGP和OSPF都向邻居发布路由

EBGP: as-path 100

O_ASE: pref 150

EBGP: as-path 100

IBGP: as-path 100

O_ASE: pref 150

2:RouterB

优选O_ASE路由,

发BGP路由给RouterA

IBGP:as-path Nil

EBGP: as-path 100

O_ASE: pref 150

BGP: import ospf

EBGP: as-path 100

IBGP: as-path 100

O_ASE: pref 150

3:RouterA

优选IBGP路由,

撤销步骤1发布的OSPF和BGP路由

IBGP:as-path Nil

EBGP: as-path 100

EBGP: as-path 100

无路由,丢包

4:RouterB

优选EBGP路由,

BGP和OSPF都向邻居发布路由

O_ASE: pref 150

EBGP: as-path 100

IBGP:as-path 100

EBGP: as-path 100

O_ASE: pref 150

5:RouterA

优选O_ASE路由,

发BGP路由给RouterB

O_ASE: pref 150

BGP: import ospf

EBGP: as-path 100

IBGP: as-path 100

IBGP:as-path Nil

EBGP: as-path 100

O_ASE: pref 150

6:RouterB

优选IBGP路由,

撤销步骤4发布的OSPF和BGP路由

EBGP: as-path 100

IBGP:as-path Nil

EBGP: as-path 100

无路由,丢包

7:重复步骤1到6

...

...

 

 

 

根因
OSPF与IBGP互引,且没有对互引的路由做严格限制,导致环路。
解决方案

【Resolution Summary】configure policy to break routing loop between OSPF and BGP
【Resolution Details】Solution Analysis:routing loops on network between OSPF and BGP. Resolution Detail: configure policy to break routing loop between OSPF and BGP// Risk of Solution:Risky Operation

方案一:

配置ip-prefix,对BGP需要引入的OSPF路由网段做限制,同时对OSPF需要引入的BGP路由网段做限制。

优点:简单直观。需过滤的网段较少且较稳定的情况,比较适合此方案。

缺点:如果需要过滤的网段较多而且分散,配置工作量会很大。另外,ip-prefix无法适应动态变化,每次路由网段变化时,都需要更改ip-prefix。

 

方案二:

在OSPF配置import-route bgp route-policy xxx,通过路由策略添加tag值,在BGP配置import-route ospf route-policy yyy,路由策略通过此tag值做过滤。防止RouterA上EBGP路由被引入OSPF,在RouterB又从OSPF重新引回到BGP。

优点:动态过滤,弥补了方案一的不足。

缺点:RouterA把O_ASE发给RouterB后,RouterB上虽然BGP不会再引回这些路由,但下一跳为RouterA的O_ASE路由优于EBGP路由,造成不必要的绕行。

 

方案三:

在OSPF配置import-route bgp route-policy xxx,通过路由策略添加tag值,同时在OSPF配置filter-policy yyy import,对此tag值做过滤,不下发IP路由表。因此,在RouterA和RouterB上仍优选EBGP路由,BGP不会再引入这些路由,流量也不会绕行。

优点:动态过滤,弥补了前两个方案的不足。

 

建议与总结
解决办法有很多,在满足客户需求的同时,也要考虑到扩展性和健壮性,即要适应业务的动态变化,又不能引入新的问题。

END