步骤2:检查路由状态

注意:DEBUG操作有风险(最坏情况可能需要重启设备才能恢复),需要客户知晓风险并同意后才能收集,建议在低峰期操作(若是核心设备,必须更加慎重评估)!若故障排查还需要抓包,DEBUG和抓包最好同时收集!

如果BGP邻居正常,路由却没有学习到,有两种可能:a) BGP路由没学到;b) BGP路由有学习到,但没有计算出来。

1)检查BGP路由表中是否存在路由,通过show ip bgp A.B.C.D 查看。

相关命令:

show bgp ipv4 unicast A.B.C.D

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

show bgp ipv6 unicast X:X::X::X/XX

查看IPv6 Unicast路由,

show bgp vpnv4 unicast all A.B.C.D

查看VPN路由,会同时显示公网VPNv4路由、和私网VRF下的路由。

 

2)如果BGP路由存在,但核心路由表没有,则是因为路由计算失败,如下:

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

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

3)如果BGP路由不存在,则表示没有从邻居学习到路由,需要进一步到对端设备上,重复上一步(步骤2)的动作,查看邻居设备上是否有路由。

如果邻居设备也没有路由,需要进一步向上游查询。

4)打开Debug开关,调试本地设备是否接收到邻居的路由通告报文。

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

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

相关命令:

clear bgp ipv4 unicast A.B.C.D soft in

软重启IPv4 Unicast邻居的入向路由,效果同clear ip bgp A.B.C.D soft in

clear bgp ipv6 unicast X:X::X::X soft in

软重启IPv6 Unicast邻居的入向路由。

clear bgp vpnv4 unicast A.B.C.D soft in

软重置VPNv4邻居的入向路由。

如果本地设备有接收到该路由,查看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配置。

5)如果上一步中本地设备没接收到路由更新消息,则表示邻居设备没有通告路由,需要到邻居设备上进行调试。

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

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

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

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

相关命令:

show bgp ipv4 unicast A.B.C.D

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

show bgp ipv6 unicast X:X::X::X/XX

查看IPv6 Unicast路由,

show bgp vpnv4 unicast all A.B.C.D

查看VPN路由,会同时显示公网VPNv4路由、和私网VRF下的路由。

 

二、查看是否有配置路由聚合,并且该路由聚合带有summary-only选项。如果有,路由会被正常抑制通过,邻居设备想要学习路由需要撤销summary-only参数,或者在本地设备针对该邻居配置unsuppress-map。

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

 

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

debug ip bgp update out

debug ip bgp filter

debug ip bgp warn(隐藏命令)

打开上述调试开关。

 

四、clear ip bgp peer-ip soft out

软重启BGP邻居,向邻居重新通告路由。

相关命令:

clear bgp ipv4 unicast A.B.C.D soft out

软重启IPv4 Unicast邻居的出向路由,效果同clear ip bgp A.B.C.D soft out

 

clear bgp ipv6 unicast X:X::X::X soft out

软重启IPv6 Unicast邻居的出向路由。

 

clear bgp vpnv4 unicast A.B.C.D soft out

软重置VPNv4邻居的出向路由。

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

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过滤,检查邻居路由图配置。