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