故障一点通 >> 路由产品线 >> 03.IP路由协议 >> 3.4 BGP >> 3.4.2 BGP邻居关系正常,但无法学到路由 >>

1、故障现象

部署BGP路由协议,邻居建立正常,但在路由表中无法看到路由表。

2、故障可能原因

1)协议支持地址族能力异常

2)没有学到BGP路由

3)学到BGP路由,但计算失败

3、故障排查步骤

步骤1、确认设备运行的BGP协议是否支持地址族

通过show ip bgp neighbor查看

BGP邻居可同时支持多个地址族能力,只有地址族能力协商成功后,才能学习该地址族对应的路由。协商结果如下:

1)advertised:本地设备有激活能力,邻居设备未激活,协商失败。

2)received:  本地设备未激活能力,邻居设备有激活,协商失败。

3)advertised and received:本地和邻居设备都激活能力,协商成功。

步骤2、若协议对地址族的支持正常,则确认是否有学到BGP路由

通过show ip bgp来查看BGP路由表中是否存在路由表

相关查看命令

show bgp ipv4 unicast A.B.C.D

查看IPv4 Unicast路由,效果同show ip bgp A.B.C.D

如果BGP路由存在,则确认是否路由计算失败,转入步骤3进行排查。

如果BGP路由不存在,则表示为从邻居学到BGP路由,需要对本端和对端设备进行排查

详细排查步骤如下:

本地设备:

1)打开debug开关

debug ip bgp update in 、debug ip bgp warn(隐藏命令),打开调试开关。

2)clear ip bgp peer-ip soft in  软重启BGP邻居,让邻居重新通告路由

3)确认信息

如果本地设备有接收到该路由,查看BGP debug开关打印出的路由过滤信息,格式如Peer-IP-incoming/outgoing [RIB] Update: Prefix A.B.C.D/32 denied due to Reason,其中Reason为一个字符串,包含多种如下

A)attr comon check fail

表示报文解码时发现非法字段,路由被过滤。如果是这种错误,在这个打印的同时,会有其他信息进一步提示什么字段非法,如:

i)"%s-%s [DECODE] Attr OrigID: OrigID(%r) same as Self, Ignoring UPDATE..." 路由Originate-id是本地设备,路由环路。

ii)"%s-%s [DECODE] Attr Cluster: my cluster-id in the cluster-list"路由cluster-id包含本地设备,路由环路。

iii)"%s-%s [DECODE] Update: Invalid Nexthop: %r" 路由下一跳为无效IP地址、或者路由下一跳为本地设备的某个接口IP。

B)MPLS VPN/BGP implicit inbound filter

表示L3VPN或L2VPN路由的RT属性匹配失败,需要检查本地VRF或VFI的import route-target配置是否正确。

C)as-path contains our own AS

表示AS-PATH环路。

D)filter

表示路由被入向策略过滤,需要检查邻居的入向过滤策略配置,包括filter-list、prefix-list和distribute-list。

E)route-map

表示路由被route-map in过滤,需要检查路由图配置。

F)non-connected next-hop

表示从EBGP直连邻居接收到的IPv4路由下一跳,不是直连接口,需要检查网络配置。

G)  max prefix overflow

表示从邻居接收到的路由,超过max限制导致溢出,需要检查邻居的配置和接收到的路由条目(show ip bgp summary),确认是否溢出。

H)address-family overflow

表示地址族下路由表总容量异常,检查BGP地址族下的maximum-prefix配置。

如果本地确认没有接收到对端的路由更新,则到邻居设备进行排查

对端设备:

1)确认network语句是否正确,要求和IGP路由表的网络号和掩码必须严格一致。

2)先通过show命令查看路由状态,如show ip bgp A.B.C.D

A)(inaccessible):表示路由计算失败,确认是否路由下一跳计算失败。

B)(suppressed due to dampening):表示本地设备开启了dampening功能,路由被震荡抑制,此时需要进一步检查网络是否一直在震荡。

C)检查路由团体属性,确认是否包含No_Export、Local_AS、NO_Advertise等抑制路由通告的属性。

3)查看是否有配置路由聚合,并且该路由聚合带有summary-only选项。

如果有,路由会被正常抑制通过,邻居设备想要学习路由需要撤销summary-only参数,或者在本地设备针对该邻居配置unsuppress-map。

也可以通过show ip bgp 进行查看,被聚合summary-only抑制的路由,最前面会有s标记。(这个show 命令只能在少量路由状态下使用)

4)如果上述两部确认路由没有被抑制,需要进一步调试路由被抑制通告出去的其他原因:

debug ip bgp update out

debug ip bgp filter

debug ip bgp warn(隐藏命令)

打开上述调试开关。

5)clear ip bgp peer-ip soft out,软重启BGP邻居,向邻居重新通告路由

根据打印调试信息,确认路由未通告出去的原因,可能如下:

A)"%s-%s [RIB] Announce Check: %O Originator-ID is same as Remote Router-ID"

路由Originate-ID与邻居设备相同,路由环路抑制。

B)"%s-%s [RIB] Announce Check: %O site-of-origin is same as peer site"

路由SOO属性与邻居设备相同,路由环路抑制。

C)"%s-%s [RIB] Announce Check: %O is denied by out filter"

路由被出向策略过滤,需要检查邻居配置,包括filter-list、prefix-list和distribute-list。

D)"%s-%s [RIB] Announce Check: %O No announcement since AS %u is in AS Path"

AS-PATH检测出环路。

E)"%s-%s [RIB] Announce Check: %O is denied by unsuppress-map"

已经处于suppress状态的路由,没有被邻居的unsuppress-map配置匹配成功。

F)"%s-%s [RIB] Announce Check: %O is denied by out routemap"

路由被route-map out过滤,检查邻居路由图配置。

步骤3、确认BGP的路由状态,明确是否路由计算失败

通过show ip bgp来确认

例如:

inaccessible表示路由下一跳不可达,这样的BGP路由无法计算出来。

需要进一步确认是否有有效IGP路由到达这个下一跳,如上图所示路由,可通过show ip route 3.3.3.3查看。

步骤4、收集信息,拨打4008-111-000寻求技术支持

收集信息详见BGP故障信息收集