IBGP邻居间路由环路的故障解决步骤如下:
网络环境
在下图的网络中,RouterA和RouterC建立EBGP邻居关系,并且通过network方式发布所有路由给RouterC。RouterB和RouterD的配置与RouterA和RouterC完全对称。当RouterA和RouterC的互连接口down掉后,在RouterC上发现去往RouterA的所有网段都不通。
图 IBGP邻居间路由环路
故障分析
步骤 1 在RouterC上执行display current-configuratiion命令查看配置。
RouterC通过route-policy将如下城域网的路由再通告给RR的时候强制指定其下一跳为虚拟下一跳地址202.105.0.5。
- ip route-static 202.105.0.5 255.255.255.255 61.142.140.166
- ip route-static 202.105.0.5 255.255.255.255 61.142.140.170
- ip route-static 202.105.0.5 255.255.255.255 61.145.84.94
这三条静态路由的下一跳地址分别是RouterA和RouterC互连的三条链路接口地址(未指定出接口,RouterA上和RouterC互连的接口是POS1/0/0、POS2/0/0和POS2/1/0)。
在RouterC的ISIS中使用路由策略通过import方式引入这三条静态路由。
- ip ip-prefix virtualaddress index 10 permit 202.105.0.5 32
- route-policy virtual-to-IS-IS permit node 10
- if-match ip-prefix virtualaddress
- IS-IS
- cost-style wide-compatible
- network-entity 86.xxxx.2020.9702.8090.00
- import-route static cost 1 level-1-2 route-policy virtual-to-IS-IS
- preference 110
步骤 2 当RouterA和RouterC的互连接口down掉后,在RouterC上发现去往RouterA的路由下一跳还是虚拟下一跳202.105.0.5,但是出接口却指向了RouterE。
- <RouterC> dislay ip routing-table 61.145.84.90
- Destination/Mask Proto Pre Cost NextHop Interface
- 61.145.84.0/22 BGP 200 0 202.105.0.5 Pos6/0/0
- BGP 200 0 202.105.0.5 Pos6/0/0
步骤 3 当RouterC和城域网RouterA的互连接口down掉时,由于虚拟下一跳静态路由没有指定出接口,因此静态路由不会失效,此时虚拟下一跳通过路由迭代选择了BGP路由,该路由指向RouterE从而造成环路。
虚拟下一跳202.105.0.5地址是匹配手工添加的静态路由,且下一跳地址并未改变,只是由于原先的出接口已经down掉,因此现在的出接口发生变化指向RouterE。
- <RouterC> dislay ip routing-table 202.105.0.5
- Destination/Mask Proto Pre Cost NextHop Interface
- 202.105.0.5/32 Static 60 0 61.142.140.166 Pos6/0/0
- Static 60 0 61.142.140.170 Pos6/0/0
- Static 60 0 61.145.84.94 Pos6/0/0
选择虚拟下一跳202.105.0.5的其中一个下一跳地址61.142.140.166为例,发现61.142.140.166匹配了一条BGP路由,该路由的下一跳又重新指向了202.105.0.5。该路由是RouterC从RR接收到的城域网内部路由(RouterB通过EBGP关系通告城域网路由给RouterD,RouterD将这些路由发布给RR的同时将其下一跳改变为虚拟地址202.105.0.5,RR又将这些路由反射给RouterC)。这说明此时去往RouterA的路由在RouterC和RouterE之间发生了环路。
RouterA和RouterC之间的直连链路down掉后发现RouterC上到城域网的路由没有指向RouterD,而是指向RouterE。在RouterE上去往城域网的路由又指向了RouterC从而造成路由环路。
----结束
处理步骤
在RouterC和RouterD上分别执行如下操作。
步骤 1 执行system-view命令,进入系统视图。
步骤 2 执行ip route-static 202.105.0.5 32 Pos1/0/0 61.142.140.166、ip route-static 202.105.0.5 32 Pos2/0/0 61.142.140.170和ip route-static 202.105.0.5 32 Pos2/1/0 61.145.84.94命令,绑定出接口。
配置虚拟下一跳静态路由的时候没有和出接口进行关联,导致出接口down掉的时候这些静态路由还是生效的,因此配置虚拟下一跳静态路由的时候绑定出接口。
RouterD上的操作同RouterC。
当对端接口down掉的时候该静态路由会失效,此时由于RouterD上在ISIS中同时引入了虚拟下一跳静态路由,因此RouterC上对应虚拟下一跳202.105.0.5的路由应该指向了RouterD,从而不会出现上述情况导致的不通问题。
步骤 3 执行命令return退回到用户视图,执行命令save,保存对配置的修改。
----结束
配置完成后,在RouterC上执行ping命令可以ping通RouterA上的所有网段,故障排除。
案例总结
BGP虚拟下一跳是指通过Route-Policy在通告给BGP邻居路由的时候强制改变这些路由的下一跳地址为一个虚拟出来的地址。虚拟下一跳的应用中,建议配置静态路由的时候绑定出接口。
【编辑推荐】