01-BGP故障处理手册
本章节下载: 01-BGP故障处理手册 (454.69 KB)
本地路由器与对等体/对等体组建立的BGP会话无法进入Established状态。
本类故障的常见原因主要包括:
· BGP报文转发受阻。
· 建立/维持BGP TCP连接的报文被ACL过滤。
· 自治系统内,BGP邻居间的Router ID产生冲突。
· 指定了错误的对等体/对等体组的AS号。
· 指定对等体的地址为Loopback接口的IP地址时,对端未通过peer connect-interface命令将建立TCP连接所使用的源接口配置为Loopback接口,或者对端未通过peer source-address命令将建立TCP连接所使用的源地址配置为Loopback接口的地址。
· 建立BGP TCP连接时,BGP会话两端发送的TCP报文长度过大,在转发时被出接口MTU较小且无法对报文分片的中间节点丢弃,导致BGP TCP连接失败。
· 指定EBGP对等体的地址为Loopback接口的IP地址时,对端未配置peer ebgp-max-hop命令,以允许本地路由器同非直连邻居建立EBGP会话。
· BGP会话的两端未通过peer password命令配置相同的密钥,导致MD5认证失败。
· 配置peer ttl-security命令以开启指定对等体/对等体组的GTSM功能时,到达对等体/对等体组的最大跳数配置错误,导致对等体/对等体组无法通过GTSM检查。
· 对等体向本地路由器发送的BGP路由数量超过了peer route-limit命令设定的最大值,导致BGP会话断开。
· BGP路由器上配置了peer ignore、ignore all-peers或shutdown process命令,禁止建立BGP会话。
· 本地路由器与对端路由器没有在相同的地址族视图下使能路由信息交换能力。
本类故障的诊断流程如图1-1所示:
图1-1 BGP会话无法进入Established状态的故障诊断流程图
(1) 检查与BGP邻居之间的通信链路是否正常。
a. 检查与邻居建立BGP会话的相关接口是否处于UP状态。
b. 通过ping命令方式检查与BGP邻居的连通性。如果Ping的结果为可达,则说明本地路由器与BGP邻居之间的通信链路正常,请执行步骤(2)。如果Ping的结果为不可达,请执行步骤c。
建议使用ping –a source-ip –s packet-size命令和ping ipv6 –a source-ipv6 –s packet-size命令来检测与BGP邻居的连通性。–a source-ip和–a source-ipv6参数指定了ICMP回显请求报文的源地址,方便用户同时检测两端的链路是否都正常;–s packet-size参数指定了发送的ICMP回显请求报文的长度,方便用户检测长报文在链路中的传输情况。Ping操作的源IP地址取用本端建立BGP会话使用的接口的IP地址,目的IP地址取用对端建立BGP会话使用的接口的IP地址。
c. 执行ping –a source-ip –s packet-size命令进行Ping操作,并逐步减小–s packet-size参数输入的值,当该参数减小到某个值时,Ping的结果变为可达,则表示建立BGP TCP连接时发送的TCP报文由于长度过长,在转发过程中被设备丢弃,导致了BGP会话无法进入Established状态。
- 此时可以重复执行ping –a source-ip –s packet-size命令,调整–s packet-size参数的取值,直至找到一个合适的取值(Ping的结果为可达的前提下,取尽量大的值,以提高转发效率),然后将该值设置为BGP报文转发出接口的MTU值。可通过在接口上执行ip/ipv6 mtu mtu-size或tcp mss value命令,或者在BGP实例视图/BGP-VPN实例视图下执行peer tcp-mss命令来设置出接口的MTU值;其中,ip/ipv6 mtu mtu-size命令配置的是MTU值,tcp mss value和peer tcp-mss命令配置的是TCP MSS值(TCP MSS=MTU值-IP头部长度-TCP头部长度)。
- 也可以无需重复进行Ping操作,直接在系统视图下执行tcp path-mtu-discovery命令,开启TCP连接的Path MTU探测功能。之后,设备会根据探测机制自动获得建立TCP连接的路径上最小的MTU值,并计算得到MSS值,后续建立BGP TCP连接时,会使用计算得到的MSS值作为TCP报文的长度。
如果无论怎么调整–s packet-size参数的取值,Ping的结果均为不可达,请参见“三层技术-IP业务类故障处理”手册中的“Ping不通的定位思路”进行后续的检查。
d. 如果故障仍不能排除,请执行步骤(2)
(2) 检查BGP TCP连接是否建立。
执行display tcp命令,查看显示信息中是否存在地址为本地路由器地址以及BGP邻居的地址、对端端口号为179、TCP连接状态为ESTABLISHED的条目。例如:
<Sysname> display tcp
*: TCP connection with authentication
Local Addr:port Foreign Addr:port State PCB
0.0.0.0:179 12.1.1.2:0 LISTEN 0xffffffffffffff9d
12.1.1.1:28160 12.1.1.2:179 ESTABLISHED 0xffffffffffffff9e
如果存在,则执行步骤(3);如果不存在,则进行以下检查:
¡ 执行display ip routing-table或display ipv6 routing-table命令,查看路由表中是否存在对端建立BGP会话使用的IPv4/IPv6地址的IGP路由,如果不存在,请检查IGP路由的配置。常见的IGP路由协议故障处理方法,请参见“三层技术-IP路由类故障处理”手册中的“OSPF故障处理”、“OSPFv3故障处理”或“IS-IS故障处理”。
¡ 执行display acl all命令,查看是否存在拒绝端口号为bgp的规则,例如:
<Sysname> display acl all
Advanced IPv4 ACL 3077, 2 rules,
ACL's step is 5
rule 1 deny tcp destination-port eq bgp
rule 2 deny tcp source-port eq bgp
如果存在这样的规则,请执行undo rule命令取消这些配置。
¡ 执行debugging tcp packet命令,根据Debug信息判断BGP建立TCP连接时是否存在安全认证失败,例如:
<Sysname> debugging tcp packet acl 3000
*Feb 5 20:03:39:289 2021 Sysname SOCKET/7/INET: -MDC=1;
TCP Input: Failed to check md5, drop the packet.
上述信息表明BGP建立TCP连接时MD5认证失败。请在建立BGP TCP连接的两端设备上均执行peer password命令配置相同的密钥。
<Sysname> debugging tcp packet acl 3000
*Feb 5 20:03:39:289 2021 Sysname SOCKET/7/INET: -MDC=1;
TCP Input: Failed to check keychain, drop the packet.
上述信息表明BGP建立TCP连接时keychain认证失败。请确保建立BGP TCP连接的两端设备上均通过执行peer keychain命令配置了keychain认证,并且同一时间内使用的key的标识符相同,以及相同标识符的key的认证算法和认证密钥一致。
<Sysname> debugging tcp packet acl 3000
*Feb 5 20:03:39:289 2021 Sysname SOCKET/7/INET: -MDC=1;
TCP Input: Failed to get IPSEC profile, index 500, name profile1(inpcb profile2), return 0x3fff.
上述信息表明BGP建立TCP连接时IPsec认证失败。请检查BGP会话两端设备的IPsec配置并确保在两端设备上均通过执行peer ipsec-profile命令应用了IPsec安全框架。
如果故障仍不能排除,请执行步骤(3)。
(3) 检查Router ID是否存在冲突,AS号是否配置错误。
a. 执行display bgp peer命令,根据显示信息中的“BGP local router ID”字段,判断是否存在Router ID配置冲突,如果存在冲突,请在需要建立BGP会话的BGP实例视图或BGP-VPN实例视图下执行router-id命令,修改BGP路由器的Router ID。例如:
<Sysname> display bgp peer ipv4 unicast
BGP local router ID: 12.1.1.1
Local AS number: 10
Total number of peers: 1 Peers in established state: 1
* - Dynamically created peer
Peer AS MsgRcvd MsgSent OutQ PrefRcv Up/Down State
12.1.1.2 20 3 3 0 0 00:00:25 Established
b. 执行display bgp peer命令,根据显示信息中的“AS”字段,判断是否为BGP对等体/对等体组指定了错误的AS号。如果AS号配置错误,则执行peer as-number命令为BGP对等体/对等体组指定正确的AS号。例如:
<Sysname> display bgp peer ipv4 unicast
BGP local router ID: 12.1.1.1
Local AS number: 10
Total number of peers: 1 Peers in established state: 1
* - Dynamically created peer
Peer AS MsgRcvd MsgSent OutQ PrefRcv Up/Down State
12.1.1.2 20 3 3 0 0 00:00:25 Established
c. 如果故障仍不能排除,请执行步骤(4)。
(4) 在BGP实例视图下执行display this命令,检查是否存在影响BGP会话的配置。
表1-1 影响BGP会话的配置检查项
检查项 |
描述 |
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } connect-interface interface-type interface-number |
本端存在该配置时,BGP邻居也需要使用Loopback接口的地址建立BGP会话,可通过本命令或peer source-address命令配置 |
peer ipv4-address [ mask-length ] source-address source-ipv4-address peer ipv6-address [ prefix-length ] source-address source-ipv6-address |
本端存在该配置时,BGP邻居也需要使用Loopback接口的地址建立BGP会话,可通过本命令或peer connect-interface命令配置 |
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } ebgp-max-hop [ hop-count ] |
非直连网络上的邻居建立EBGP会话,或者直连网络设备使用Loopback接口建立EBGP会话时,BGP会话两端均需要配置本命令,为EBGP会话指定相应的最大跳数 |
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } ttl-security hops hop-count |
存在该配置时,本地路由器从指定对等体收到的BGP报文中,TTL需要在255-“hop-count”+1到255之间,否则BGP报文将会被丢弃,如果本地路由器与对等体之间的跳数超过了hop-count,请通过本命令进行配置修改 |
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] | link-local-address interface interface-type interface-number } route-limit prefix-number [ reconnect reconnect-time | percentage-value ] * |
存在该配置时,表示如果本地路由器从指定对等体/对等体组接收的路由数量大于prefix-number值,路由器会自动断开与指定对等体/对等体组的会话。可通过降低对等体/对等体组发送的路由数量,或配置更大的prefix-number值,来避免BGP会话断开 |
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] | link-local-address interface interface-type interface-number } ignore [ graceful graceful-time { community { community-number | aa:nn } | local-preference preference | med med } * ] |
存在该配置时,BGP将不会与指定的对等体/对等体组建立BGP会话,此时可以通过执行undo peer ignore命令允许建立与对等体/对等体组的会话 |
ignore all-peers [ graceful graceful-time { community { community-number | aa:nn } | local-preference preference | med med } * ] |
存在该配置时,表明BGP禁止与所有对等体建立BGP会话。此时设备可能处于网络升级维护中,BGP进程暂时不可用,建议在网络升级维护完成后,执行undo peer ignore命令或undo ignore all-peers命令允许建立BGP会话 |
shutdown process |
存在该配置时,表明BGP禁止与所有对等体建立BGP会话。此时设备可能处于网络升级维护中,BGP进程暂时不可用,建议在网络升级维护完成后,执行undo shutdown process命令允许建立BGP会话 |
地址族下的peer enable命令 |
建立BGP会话时,两端需要在同一个地址族下指定对端配置peer enable命令使能路由信息交互能力。存在该配置时,请检查对端是否也在相同地址族下配置了peer enable命令 |
如果故障仍不能排除,请执行步骤(5)。
(5) 如果故障仍然未能排除,请收集如下信息,并联系技术支持人员。
¡ 上述步骤的执行结果。
¡ 设备的配置文件、日志信息、告警信息。
在系统视图下执行snmp-agent trap enable bgp命令后,BGP会话的状态机发生变化时会产生如下告警信息。
模块名:BGP4-MIB
· bgpBackwardTransition (1.3.6.1.2.1.15.7.2)
无
在设备上观察到BGP/5/BGP_STATE_CHANGED提示BGP会话状态变为Idle的日志打印信息,会话状态从Established变为Idle。
本类故障的常见原因主要包括:
· Keepalive或Update消息收发超时。
· TCP连接建立失败。
· 设备达到内存门限。
· BGP报文解析发生错误。
本类故障的诊断流程如图1-2所示。
图1-2 BGP会话Down的故障诊断流程图
执行display bgp peer log-info命令,根据该命令的显示信息进一步确认BGP会话Down的原因。几种常见的BGP会话Down的原因如下:
· BGP定时器超时导致断开会话
如果log-info信息与下面的显示信息相似:
<Sysname> display bgp peer ipv4 3.3.3.3 log-info
Peer: 3.3.3.3
Date Time State Notification
Error/SubError
17-Jan-2022 14:48:34 Down Receive notification with error 4/0
Hold Timer Expired/ErrSubCode Unspecified
Keepalive last triggered time: 14:48:31-2022.1.17
Keepalive last sent time : 14:48:31-2022.1.17
Update last sent time : 14:48:24-2022.1.17
EPOLLOUT last occurred time : 14:48:30-2022.1.17
则表示BGP会话Down的原因是在会话保持时间时间内未能收到对等体发送的Keepalive或Update消息。在BGP会话保持定时器超时后,设备则会主动断开BGP会话,并向对端对等体发送Notification消息。
定时器超时的原因可能是设备正常发送了Keepalive或Update消息,但报文由于链路故障等原因无法到达对等体或对等体处理不及时,或者设备调度故障导致未能及时产生Keepalive或Update消息等。如需解决此问题,请在BGP会话的两端设备的Probe视图下,均执行display system internal bgp log命令,并收集该命令的显示信息,联系技术支持人员进行进一步分析。
· TCP连接错误导致BGP会话断开
如果log-info信息与下面的显示信息相似:
<Sysname> display bgp peer ipv4 1.1.1.1 log-info
Peer: 1.1.1.1
Date Time State Notification
Error/SubError
17-Jan-2022 14:42:01 Down Receive TCP_Connection_Failed event
则BGP会话Down的原因是TCP连接错误。BGP使用TCP作为其传输层协议,如果BGP会话两端设备间的TCP连接发生错误,BGP会话也会断开。如果用户观察到的显示信息与上述举例不相似,但是显示信息中包含了Notification消息错误码5/0,则也是由于TCP连接错误导致的BGP会话断开。
确认TCP连接发生错误后,请在BGP会话Down的两端设备的Probe视图中,均执行view /proc/tcp/tcp_log slot x命令(所有的单板/成员设备各执行一次),并收集该命令的显示信息,联系技术支持人员进行进一步分析。
· 内存不足导致BGP会话断开
如果log-info信息与下面的显示信息相似:
<Sysname> display bgp peer ipv4 1.1.1.1 log-info
Peer: 1.1.1.1
Date Time State Notification
Error/SubError
17-Jan-2022 15:38:53 Down Send notification with error 6/8
Entered severe memory state
17-Jan-2022 14:53:51 Down Send notification with error 6/8
No memory to process the attribute
表明设备没有足够内存处理BGP模块相关功能,导致BGP会话断开。此类错误原因对应log-info信息中的错误码6/8。
此时请在BGP会话Down的两端设备上,均执行display memory-threshold命令,获取内存告警门限相关信息,并记录display bgp peer log-info命令的显示信息,联系技术支持人员进行进一步分析。
· 报文解析错误导致BGP会话断开:
BGP会话两端的设备如果报文解析能力不同或版本不匹配,则BGP可能无法解析接收到的报文,导致BGP会话断开。此类错误原因对应log-info信息中的消息差错码1、2和3(即“Error/SubError”中的“Error”为1、2或3)。
请在BGP会话Down的两端设备上,均执行debugging bgp raw-packet、debugging bgp open以及debugging bgp update命令,并收集这些命令的显示信息以及display bgp peer log-info命令的显示信息,联系技术支持人员进行进一步分析。
· 如果display bgp peer log-info命令的显示信息中,提示的BGP会话Down的原因不属于以上任何一种常见的原因,请收集如下信息,并联系技术支持人员。
¡ display bgp peer log-info命令的显示信息。
¡ display system internal bgp log命令的显示信息。
¡ view /proc/tcp/tcp_log slot x命令的显示信息(所有的单板/成员设备各执行一次)。
¡ 设备的配置文件、日志信息、告警信息。
作为参考,BGP会话断开的详细原因及其对应的错误码如表1-2所示。
差错码/差错子码 |
会话断开的详细原因 |
说明 |
1/1 |
connection not synchronized |
连接不同步,目前实现为收到的报文的报文头前16字节不全为F |
1/2 |
bad message length |
报文长度无效 |
1/3 |
bad message type |
报文的类型无效 |
3/1 |
the withdrawn length is too large |
撤销信息长度过长 |
the attribute length is too large |
属性长度过长 |
|
one attribute appears more than once |
同一个属性在一个Update消息中出现了多次 |
|
the attribute length is too small |
属性长度字段不足2字节 |
|
exntended length field is less than two octets |
属性长度为可扩展长度,但长度字段不足2字节 |
|
the length field is less than one octet |
属性长度为正常长度,但长度字段不足1字节 |
|
link-state attribute error |
链路状态属性形式错误 |
|
3/2 |
unrecognized well-known attribute |
不支持的公认属性 |
3/3 |
attribute-type attribute missed |
attribute-type类型的属性丢失,attribute-type取值包括: · ORIGIN · AS_PATH · LOCAL_PREF · NEXT_HOP |
3/4 |
attribute flags error |
属性标记错误 |
3/5 |
attribute-type attribute length error |
attribute-type类型的属性长度错误,attribute-type取值包括: · AS_PATH · AS4_PATH · CLUSTER_LIST · AGGREGATOR · AS4_AGGREGATOR · ORIGIN · NEXT_HOP · MED · LOCAL_PREF · ATOMIC_AGGREGATE · ORIGINATOR_ID · MP_REACH_NLRI · COMMUNITIES · extended communities |
attribute length exceeds |
属性长度越界 |
|
3/6 |
invalid ORIGIN attribute |
ORIGIN属性无效 |
3/8 |
invalid NEXT_HOP attribute |
下一跳属性无效 |
3/9 |
invalid nexthop length in MP_REACH_NLRI (address-family) |
address-family地址族MP_REACH_NLRI属性的Nexthop长度错误,address-family的取值包括: · 4u:表示IPv4单播地址族 · IPv4 Flowspec:表示IPv4 Flowspec地址族 · MPLS:表示MPLS地址族 · VPNv4:表示VPNv4地址族 · 6u:表示IPv6单播地址族 · VPNv6:表示VPNv6地址族 · L2VPN:表示L2VPN地址族 |
the length of MP_UNREACH_NLRI is too small |
MP_UNREACH_NLRI的长度小于3字节 |
|
the MP NLRI attribute length exceeds |
MP_REACH_NLRI 或MP_UNREACH_NLRI属性长度越界 |
|
erroneous MP NLRI attribute end position |
可达或不可达前缀结束位置与报文属性结束位置不同 |
|
3/10 |
invalid network field |
网络字段无效 |
3/11 |
malformed AS_PATH |
AS路径形式不对 |
4/0 |
Keepalive last triggered time |
最后一次触发发送Keepalive消息时间 |
Keepalive last sent time |
最后一次发送Keepalive消息时间 |
|
Update last sent time |
最后一次发送Update消息时间 |
|
EPOLLOUT last occurred time |
最后一次发生EPOLLOUT时间 |
|
Keepalive last received time |
最后一次接收Keepalive消息时间 |
|
Update last received time |
最后一次接收Update消息时间 |
|
EPOLLIN last occurred time |
最后一次发生EPOLLIN时间 |
|
5/0 |
connection retry timer expires |
ConnectRetry定时器超时 |
TCP_CR_Acked event received |
收到了TCP_CR_Acked事件 |
|
TCP_Connection_Confirmed event received |
收到了TCP_Connection_Confirmed事件 |
|
5/3 |
open message received |
收到open消息 |
6/0 |
manualstop event received |
收到manualstop事件 |
physical interface configuration changed |
物理配置改变,比如接口变化 |
|
session down event received from BFD |
收到BFD会话down事件 |
|
6/1 |
maximum number of prefixes reached |
前缀数超过peer route-limit所配置的数目 |
maximum number of address-family prefixes reached |
address-family地址族的前缀数超过peer route-limit所配置的数目,address-family的取值包括: · IPv4 unicast:表示IPv4单播地址族 · IPv6 unicast:表示IPv6单播地址族 · VPNv4:表示VPNv4地址族 · VPNv6:表示VPNv6地址族 |
|
6/2 |
configuration of peer ignore changed |
配置peer ignore命令 |
6/3 |
address family deleted |
地址族被删除 |
peer disabled |
关闭对等体 |
|
6/4 |
administrative reset |
执行reset bgp命令或者配置改变导致BGP会话重启 |
6/5 |
connection rejected |
连接被拒绝 |
6/6 |
other configuration change |
其他配置变化 |
6/7 |
connection collision resolution |
连接冲突 |
two connections exist and MD5 authentication is configured for the neighbor |
存在两个连接,且其中一个配置了MD5认证 |
|
6/8 |
· no memory to process the attribute:解析属性时内存不够 · no memory for the route:生成路由或者标签块信息时,获取不到内存 · no memory to generate unreachable NLRI:封装unreachable NLRI时申请不到内存 · no memory to generate a message:封装报文时申请不到内存 · can’t get the VPN RD:解析前缀时获取不到RD · can’t get the VPN routing table:解析前缀时获取不到VPN路由表 · can’t get the attributes:解析前缀时获取不到属性 · entered severe memory state:进入二级门限告警 · entered critical memory state:进入三级门限告警 |
无
· BGP/5/BGP_STATE_CHANGED
· BGP/5/BGP_STATE_CHANGED_REASON
· BGP/6/BGP_PEER_STATE_CHG
在图1-3所示的网络中,两个数据中心通过BGP协议跨AS进行互联。RR 1从数据中心2内的Border 3和Border 4处学习到前缀相同的BGP路由(假设路由前缀为10.110.0.0/16),路由的下一跳分别为Border 3和Border 4的Loopback接口地址,RR 1优选了来自Border 3或Border 4的路由。Border 1和Border 2通过BGP协议向RR 1发送缺省路由,缺省路由的下一跳分别为RR 1与Border 1之间的直连IP地址、RR 1与Border 2之间的直连IP地址。Border 3或Border 4重启时,在重启期间,数据中心1内的设备无法访问10.110.0.0/16网段,目的地址属于该网段内的数据报文在RR 1与Border 1之间或RR 1与Border 2之间循环发送,形成环路。
图1-3 跨AS域的数据中心互联场景组网图
在Border 3或Border 4未重启前,RR 1的BGP路由表和IP路由表与下表类似:
<RR1> display bgp routing-table ipv4
Total number of routes: 4
BGP local router ID is 9.9.9.9
Status codes: * - valid, > - best, d - dampened, h - history,
s - suppressed, S - stale, i - internal, e - external
a - additional-path
Origin: i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
* >i 0.0.0.0/0 19.1.1.1 100 0 i
* i 29.1.1.2 100 0 i
* >e 10.110.0.0/16 3.3.3.3 0 0 20i
* e 4.4.4.4 0 0 20i
<RR1> display ip routing-table
Destinations : 25 Routes : 25
Destination/Mask Proto Pre Cost NextHop Interface
0.0.0.0/0 BGP 255 0 19.1.1.1 GE0/0/1
0.0.0.0/32 Direct 0 0 127.0.0.1 InLoop0
1.1.1.1/32 O_INTRA 10 1 19.1.1.1 GE0/0/1
2.2.2.2/32 O_INTRA 10 1 29.1.1.2 GE0/0/2
3.3.3.3/32 O_INTRA 10 1 39.1.1.3 GE0/0/3
4.4.4.4/32 O_INTRA 10 1 49.1.1.4 GE0/0/4
9.9.9.9/32 Direct 0 0 127.0.0.1 InLoop0
10.10.10.10/32 BGP 255 0 1.1.1.1 GE0/0/1
19.1.1.0/24 Direct 0 0 19.1.1.9 GE0/0/1
19.1.1.0/32 Direct 0 0 19.1.1.9 GE0/0/1
19.1.1.9/32 Direct 0 0 127.0.0.1 InLoop0
19.1.1.255/32 Direct 0 0 19.1.1.9 GE0/0/1
10.110.0.0/16 BGP 255 0 3.3.3.3 GE0/0/3
29.1.1.0/24 Direct 0 0 29.1.1.9 GE0/0/2
29.1.1.0/32 Direct 0 0 29.1.1.9 GE0/0/2
29.1.1.9/32 Direct 0 0 127.0.0.1 InLoop0
29.1.1.255/32 Direct 0 0 29.1.1.9 GE0/0/2
39.1.1.0/24 Direct 0 0 39.1.1.9 GE0/0/3
39.1.1.0/32 Direct 0 0 39.1.1.9 GE0/0/3
39.1.1.9/32 Direct 0 0 127.0.0.1 InLoop0
39.1.1.255/32 Direct 0 0 39.1.1.9 GE0/0/3
49.1.1.0/24 Direct 0 0 29.1.1.9 GE0/0/2
49.1.1.0/32 Direct 0 0 29.1.1.9 GE0/0/2
49.1.1.9/32 Direct 0 0 127.0.0.1 InLoop0
49.1.1.255/32 Direct 0 0 29.1.1.9 GE0/0/2
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.0/32 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
127.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
255.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
在上表中,RR 1通过IGP协议学习到Border 3和Border 4的Loopback接口路由。BGP网段路由10.110.0.0/16迭代到通过IGP学习的Border 3和Border 4的Loopback接口路由上。
假设Border 4进行了设备重启,在Border 4重启后,会话保持时间内RR 1仍不会断开与Border 4的会话,RR 1的路由表中仍会保留从Border 4接收到的10.110.0.0/16网段路由。但是由于下一跳4.4.4.4的IGP路由已经失效,且RR 1上不存在包含地址4.4.4.4的其他网段路由,来自Border 4的10.110.0.0/16网段路由只能迭代到缺省路由0.0.0.0/0上。
此时RR 1的BGP路由表中,来自Border 3的10.110.0.0/16网段路由到达下一跳的IGP路由的Metric值为1(对应上表中的路由表项“3.3.3.3/32 O_INTRA 10 1 39.1.1.3 GE0/0/3”),而来自Border 4的10.110.0.0/16网段路由到达下一跳的IGP路由的Metric值为0(对应上表中的路由表项“0.0.0.0/0 BGP 255 0 19.1.1.1 GE0/0/1”)。按照BGP路由的优选规则,RR 1优选来自Border 4的10.110.0.0/16网段路由,在路由转发表中,网段10.110.0.0/16的下一跳变为GigabitEthernet0/0/1。在转发目的地址属于10.110.0.0/16网段的报文时,RR 1会把报文错误地发送给Border 1,并且由于Border 1上10.110.0.0/16网段的路由学习自RR 1,Border 1又会把报文转发回RR 1,如此往复造成环路。
本类故障的诊断流程如图1-4所示。
图1-4 跨AS域的数据中心互联场景BGP路由环路的故障诊断流程图
(1) 查看RR 1的BGP路由表和IP路由表。本步骤以图1-3的组网为例,来说明RR 1上的BGP路由表和IP路由表情况。
a. Border 4重启后,在RR 1与Border 4的会话断开前,在RR 1上执行display bgp routing-table ipv4命令可以看到来自Border 4的10.110.0.0/16网段路由仍然生效,并且被优选了。
<RR1> display bgp routing-table ipv4
Total number of routes: 5
BGP local router ID is 9.9.9.9
Status codes: * - valid, > - best, d - dampened, h - history,
s - suppressed, S - stale, i - internal, e - external
a - additional-path
Origin: i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
* >i 0.0.0.0/0 19.1.1.1 100 0 i
* i 29.1.1.2 100 0 i
* >e 10.110.0.0/16 4.4.4.4 0 0 20i
* e 3.3.3.3 0 0 20i
b. 在RR 1上执行display ip routing-table verbose命令,可以看到10.110.0.0/16网段路由的出接口和真实下一跳变为了RR 1与Border 1之间的直连接口GigabitEthernet0/0/1以及直连IP地址19.1.1.1。
<RR1> display ip routing-table 10.110.0.0/16 verbose
Summary count : 1
Destination: 10.110.0.0/16
Protocol: BGP instance default
Process ID: 0
SubProtID: 0x6 Age: 00h00m19s
FlushedAge: 00h00m19s
Cost: 0 Preference: 255
IpPre: N/A QosLocalID: N/A
Tag: 0 State: Active Adv
OrigTblID: 0x0 OrigVrf: default-vrf
TableID: 0x2 OrigAs: 20
NibID: 0x16000002 LastAs: 20
AttrID: 0x2
BkAttrID: 0xffffffff Neighbor: 4.4.4.4
Flags: 0x10060 OrigNextHop: 4.4.4.4
Label: NULL RealNextHop: 19.1.1.1
BkLabel: NULL BkNextHop: N/A
SRLabel: NULL Interface: GigabitEthernet0/0/1
BkSRLabel: NULL BkInterface: N/A
Tunnel ID: Invalid IPInterface: GigabitEthernet0/0/1
BkTunnel ID: Invalid BkIPInterface: N/A
InLabel: NULL ColorInterface: N/A
SIDIndex: NULL BkColorInterface: N/A
FtnIndex: 0x0 TunnelInterface: N/A
TrafficIndex: N/A BkTunnelInterface: N/A
Connector: N/A PathID: 0x0
UserID: 0x0 SRTunnelID: Invalid
SID Type: N/A NID: Invalid
FlushNID: Invalid BkNID: Invalid
BkFlushNID: Invalid StatFlags: 0x0
SID: N/A
BkSID: N/A
CommBlockLen: 0 Priority: Low
MemberPort: N/A
c. 执行display ip routing-table命令,可以看到IP路由表中没有包含地址4.4.4.4的其他网段路由,缺省路由的下一跳出接口和下一跳IP也为GigabitEthernet0/0/1和19.1.1.1,由此可以判断出,来自Border 4的10.110.0.0/16网段路由迭代到了缺省路由上。
<RR1> display ip routing-table
Destinations : 25 Routes : 25
Destination/Mask Proto Pre Cost NextHop Interface
0.0.0.0/0 BGP 255 0 19.1.1.1 GE0/0/1
0.0.0.0/32 Direct 0 0 127.0.0.1 InLoop0
1.1.1.1/32 O_INTRA 10 1 19.1.1.1 GE0/0/1
2.2.2.2/32 O_INTRA 10 1 29.1.1.2 GE0/0/2
3.3.3.3/32 O_INTRA 10 1 39.1.1.3 GE0/0/3
9.9.9.9/32 Direct 0 0 127.0.0.1 InLoop0
10.10.10.10/32 BGP 255 0 1.1.1.1 GE0/0/1
19.1.1.0/24 Direct 0 0 19.1.1.9 GE0/0/1
19.1.1.0/32 Direct 0 0 19.1.1.9 GE0/0/1
19.1.1.9/32 Direct 0 0 127.0.0.1 InLoop0
19.1.1.255/32 Direct 0 0 19.1.1.9 GE0/0/1
10.110.0.0/16 BGP 255 0 4.4.4.4 GE0/0/1
29.1.1.0/24 Direct 0 0 29.1.1.9 GE0/0/2
29.1.1.0/32 Direct 0 0 29.1.1.9 GE0/0/2
29.1.1.9/32 Direct 0 0 127.0.0.1 InLoop0
29.1.1.255/32 Direct 0 0 29.1.1.9 GE0/0/2
39.1.1.0/24 Direct 0 0 39.1.1.9 GE0/0/3
39.1.1.0/32 Direct 0 0 39.1.1.9 GE0/0/3
39.1.1.9/32 Direct 0 0 127.0.0.1 InLoop0
39.1.1.255/32 Direct 0 0 39.1.1.9 GE0/0/3
49.1.1.0/24 Direct 0 0 29.1.1.9 GE0/0/2
49.1.1.0/32 Direct 0 0 29.1.1.9 GE0/0/2
49.1.1.9/32 Direct 0 0 127.0.0.1 InLoop0
49.1.1.255/32 Direct 0 0 29.1.1.9 GE0/0/2
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.0/32 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
127.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
255.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
如果查看路由表项的结果与上述情形不符,请联系技术支持人员获得帮助。
(2) 通过以下两种方式中的一种消除路由环路。
¡ 配置根据路由策略来过滤迭代到的下一跳路由。
在RIB IPv4地址族视图下配置protocol bgp nexthop recursive-lookup route-policy route-policy-name命令后,所有IPv4地址前缀的BGP路由的下一跳都只能迭代到通过路由策略route-policy-name过滤的路由上;在RIB IPv6地址族视图下配置protocol bgp4+ nexthop recursive-lookup route-policy route-policy-name命令后,所有IPv6地址前缀的BGP路由的下一跳都只能迭代到通过路由策略route-policy-name过滤的路由上。
在本故障诊断的场景下,可以在RR 1上创建一个缺省路由无法通过过滤的路由策略,并配置protocol bgp nexthop recursive-lookup route-policy route-policy-name或protocol bgp nexthop recursive-lookup route-policy route-policy-name命令指定该路由策略,使得BGP路由无法迭代到缺省路由上,从而消除BGP路由环路。
¡ 配置BGP与BFD联动功能。
开启BGP与BFD联动功能后,RR 1和Border 3、Border 4之间会使用BFD会话来检测链路,当Border 3或Border 4重启时,BFD可以快速检测到链路故障,RR 1会及时断开BGP会话,删除失效路由,即从Border 3或Border 4学习到的路由。BGP与BFD联动功能通过peer bfd命令进行配置,配置的详细指导以及注意事项请参见命令参考手册。
(3) 如果故障仍未能排除,请收集如下信息,并联系技术支持人员。
¡ 上述步骤的执行结果。
¡ 设备的配置文件、日志信息、告警信息。
无
无
在图1-5所示的网络中,Spine设备与Leaf设备处在不同的AS域中。Spine设备之间建立全互联的BGP连接,Spine 1和Spine 2与Leaf建立EBGP连接。Spine 2开启了负载分担功能,并且可以在EBGP和IBGP路由之间进行负载分担。Spine 1重启时,经过Spine 2到Leaf的流量有一半丢失。
图1-5 Spine和Leaf设备跨AS连接场景组网图
在Spine 1重启前,Spine 2的BGP路由表与下表类似:
<Spine2> display bgp routing-table ipv4
Total number of routes: 3
BGP local router ID is 2.2.2.2
Status codes: * - valid, > - best, d - dampened, h - history,
s - suppressed, S - stale, i - internal, e - external
a - additional-path
Origin: i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
* >i 0.0.0.0/0 24.1.1.4 100 0 i
* >e 100.1.1.0/24 23.1.1.3 0 0 20i
* i 1.1.1.1 0 100 0 20i
Leaf 2分别从Leaf 1(23.1.1.3)和Spine 1(1.1.1.1)接收到100.1.1.0/24网段路由,从Spine 1接收到的100.1.1.0/24网段路由的下一跳为Spine 1的Loopback接口地址。
Spine 2的IP路由表与下表类似:
<Spine2> display ip routing-table
Destinations : 24 Routes : 25
Destination/Mask Proto Pre Cost NextHop Interface
0.0.0.0/0 BGP 255 0 24.1.1.4 GE0/0/1
0.0.0.0/32 Direct 0 0 127.0.0.1 InLoop0
1.1.1.1/32 O_INTRA 10 1 12.1.1.1 GE0/0/2
2.2.2.2/32 Direct 0 0 127.0.0.1 InLoop0
4.4.4.4/32 O_INTRA 10 1 24.1.1.4 GE0/0/1
12.1.1.0/24 Direct 0 0 12.1.1.2 GE0/0/2
12.1.1.0/32 Direct 0 0 12.1.1.2 GE0/0/2
12.1.1.2/32 Direct 0 0 127.0.0.1 InLoop0
12.1.1.255/32 Direct 0 0 12.1.1.2 GE0/0/2
14.1.1.0/24 O_INTRA 10 2 12.1.1.1 GE0/0/2
O_INTRA 10 2 24.1.1.4 GE0/0/1
23.1.1.0/24 Direct 0 0 23.1.1.2 GE0/0/3
23.1.1.0/32 Direct 0 0 23.1.1.2 GE0/0/3
23.1.1.2/32 Direct 0 0 127.0.0.1 InLoop0
23.1.1.255/32 Direct 0 0 23.1.1.2 GE0/0/3
24.1.1.0/24 Direct 0 0 24.1.1.2 GE0/0/1
24.1.1.0/32 Direct 0 0 24.1.1.2 GE0/0/1
24.1.1.2/32 Direct 0 0 127.0.0.1 InLoop0
24.1.1.255/32 Direct 0 0 24.1.1.2 GE0/0/1
100.1.1.0/24 BGP 255 0 23.1.1.3 GE0/0/3
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.0/32 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
127.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
255.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
对于来自Leaf的100.1.1.0/24网段路由,到达其下一跳的IGP路由为23.1.1.0/24,该IGP路由的Metric为0;对于来自Spine 1的100.1.1.0/24网段路由,到达其下一跳的IGP路由为1.1.1.1/32该IGP路由的Metric值为1。由于到达两条路由的下一跳的IGP路由的Metric值不相同,BGP路由表中两条100.1.1.0/24网段路由无法形成负载分担。这也是网络管理员需要的结果:到达Spine 2的目的地址属于100.1.1.0/24网段的流量,会被Spine 2全部直接转发给Leaf;而不是先发往Spine 1,再由Spine 1转发至Leaf。
Spine 3通过BGP协议向Spine 2发送了缺省路由,缺省路由的下一跳为Spine 3与Spine 2直连的接口IP地址。Spine 1重启后,在会话保持时间内,Spine 2仍不会断开与Spine 1的会话,Spine 2的路由表中仍会保留从Spine 1接收到的100.1.1.0/24网段路由。但是由于下一跳1.1.1.1的IGP路由已经失效,且Spine 2上不存在包含地址1.1.1.1的其他网段路由,来自Spine 1的100.1.1.0/24网段路由只能迭代到缺省路由0.0.0.0/0上。
此时Spine 2的BGP路由表中,来自Spine 1的100.1.1.0/24网段路由到达下一跳的IGP路由的Metric值变为0(对应上表中的路由表项“0.0.0.0/0 BGP 255 0 24.1.1.4 GE0/0/1”),与来自Leaf的100.1.1.0/24网段路由到达下一跳的IGP路由的Metric值相同。来自不同BGP对等体的两条100.1.1.0/24网段路由形成负载分担,导致经过Spine 2的目的地址属于100.1.1.0/24网段的流量有一半通过负载分担被发送给了Spine 3。而由于Spine 3上100.1.1.0/24的网段路由学习自Spine 1和Spine 2,Spine 3又会把流量转发回Spine 2,造成环路和路由丢失。
本类故障的诊断流程如图1-6所示。
图1-6 Spine和Leaf设备跨AS连接场景BGP路由环路的诊断流程图
(1) 查看Spine 2的BGP路由表和IP路由表。本步骤以图1-5的组网为例,来说明Spine 2上的BGP路由表和IP路由表情况。
a. Spnie 1重启后,在Spnie 1与Spnie 2的会话断开前,在Spnie 2上执行display bgp routing-table ipv4命令可以看到来自不同设备的两条100.1.1.0/24网段路由同时被优选。
<Spine2> display bgp routing-table ipv4
Total number of routes: 3
BGP local router ID is 2.2.2.2
Status codes: * - valid, > - best, d - dampened, h - history,
s - suppressed, S - stale, i - internal, e - external
a - additional-path
Origin: i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
* >i 0.0.0.0/0 24.1.1.4 100 0 i
* >e 100.1.1.0/24 23.1.1.3 0 0 20i
* >i 1.1.1.1 0 100 0 20i
b. 在Spine 2上执行display ip routing-table verbose命令,可以看到100.1.1.0/24网段的两条路由形成了等价,并且其中一条路由的真实下一跳为Spine 3的接口IP地址24.1.1.4、出接口为Spine 2与Spine 3直连的接口。
<Spine2> display ip routing-table 100.1.1.0/24 verbose
Summary count : 2
Destination: 100.1.1.0/24
Protocol: BGP instance default
Process ID: 0
SubProtID: 0x5 Age: 00h00m13s
FlushedAge: 00h00m13s
Cost: 0 Preference: 255
IpPre: N/A QosLocalID: N/A
Tag: 0 State: Active Adv
OrigTblID: 0x0 OrigVrf: default-vrf
TableID: 0x2 OrigAs: 20
NibID: 0x16000002 LastAs: 10
AttrID: 0x2
BkAttrID: 0xffffffff Neighbor: 1.1.1.1
Flags: 0x10060 OrigNextHop: 1.1.1.1
Label: NULL RealNextHop: 24.1.1.4
BkLabel: NULL BkNextHop: N/A
SRLabel: NULL Interface: GigabitEthernet0/0/1
BkSRLabel: NULL BkInterface: N/A
Tunnel ID: Invalid IPInterface: GigabitEthernet0/0/1
BkTunnel ID: Invalid BkIPInterface: N/A
InLabel: NULL ColorInterface: N/A
SIDIndex: NULL BkColorInterface: N/A
FtnIndex: 0x0 TunnelInterface: N/A
TrafficIndex: N/A BkTunnelInterface: N/A
Connector: N/A PathID: 0x0
UserID: 0x0 SRTunnelID: Invalid
SID Type: N/A NID: Invalid
FlushNID: Invalid BkNID: Invalid
BkFlushNID: Invalid StatFlags: 0x0
SID: N/A
BkSID: N/A
CommBlockLen: 0 Priority: Low
MemberPort: N/A
Destination: 100.1.1.0/24
Protocol: BGP instance default
Process ID: 0
SubProtID: 0x6 Age: 01h18m22s
FlushedAge: 00h00m13s
Cost: 0 Preference: 255
IpPre: N/A QosLocalID: N/A
Tag: 0 State: Active Adv
OrigTblID: 0x0 OrigVrf: default-vrf
TableID: 0x2 OrigAs: 20
NibID: 0x16000000 LastAs: 20
AttrID: 0x0
BkAttrID: 0xffffffff Neighbor: 23.1.1.3
Flags: 0x10060 OrigNextHop: 23.1.1.3
Label: NULL RealNextHop: 23.1.1.3
BkLabel: NULL BkNextHop: N/A
SRLabel: NULL Interface: GigabitEthernet0/0/3
BkSRLabel: NULL BkInterface: N/A
Tunnel ID: Invalid IPInterface: GigabitEthernet0/0/3
BkTunnel ID: Invalid BkIPInterface: N/A
InLabel: NULL ColorInterface: N/A
SIDIndex: NULL BkColorInterface: N/A
FtnIndex: 0x0 TunnelInterface: N/A
TrafficIndex: N/A BkTunnelInterface: N/A
Connector: N/A PathID: 0x0
UserID: 0x0 SRTunnelID: Invalid
SID Type: N/A NID: Invalid
FlushNID: Invalid BkNID: Invalid
BkFlushNID: Invalid StatFlags: 0x0
SID: N/A
BkSID: N/A
CommBlockLen: 0 Priority: Low
MemberPort: N/A
c. 执行display ip routing-table命令,可以看到IP路由表中没有包含地址1.1.1.1的其他网段路由,缺省路由的下一跳出接口和下一跳IP也为GigabitEthernet0/0/1和24.1.1.4,由此可以判断出,来自Spine 1的100.1.1.0/24网段路由迭代到了缺省路由上。
<Spine2> display ip routing-table
Destinations : 23 Routes : 24
Destination/Mask Proto Pre Cost NextHop Interface
0.0.0.0/0 BGP 255 0 24.1.1.4 GE0/0/1
0.0.0.0/32 Direct 0 0 127.0.0.1 InLoop0
2.2.2.2/32 Direct 0 0 127.0.0.1 InLoop0
4.4.4.4/32 O_INTRA 10 1 24.1.1.4 GE0/0/1
12.1.1.0/24 Direct 0 0 12.1.1.2 GE0/0/2
12.1.1.0/32 Direct 0 0 12.1.1.2 GE0/0/2
12.1.1.2/32 Direct 0 0 127.0.0.1 InLoop0
12.1.1.255/32 Direct 0 0 12.1.1.2 GE0/0/2
14.1.1.0/24 O_INTRA 10 2 24.1.1.4 GE0/0/1
23.1.1.0/24 Direct 0 0 23.1.1.2 GE0/0/3
23.1.1.0/32 Direct 0 0 23.1.1.2 GE0/0/3
23.1.1.2/32 Direct 0 0 127.0.0.1 InLoop0
23.1.1.255/32 Direct 0 0 23.1.1.2 GE0/0/3
24.1.1.0/24 Direct 0 0 24.1.1.2 GE0/0/1
24.1.1.0/32 Direct 0 0 24.1.1.2 GE0/0/1
24.1.1.2/32 Direct 0 0 127.0.0.1 InLoop0
24.1.1.255/32 Direct 0 0 24.1.1.2 GE0/0/1
100.1.1.0/24 BGP 255 0 1.1.1.1 GE0/0/1
BGP 255 0 23.1.1.3 GE0/0/3
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.0/32 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
127.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
255.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
如果查看路由表项的结果与上述情形不符,请联系技术支持人员获得帮助。
(2) 通过以下三种方式中的一种来消除路由环路。
¡ 配置根据路由策略来过滤迭代到的下一跳路由。
在RIB IPv4地址族视图下配置protocol bgp nexthop recursive-lookup route-policy route-policy-name命令后,所有IPv4地址前缀的BGP路由的下一跳都只能迭代到通过路由策略route-policy-name过滤的路由上;在RIB IPv6地址族视图下配置protocol bgp4+ nexthop recursive-lookup route-policy route-policy-name命令后,所有IPv6地址前缀的BGP路由的下一跳都只能迭代到通过路由策略route-policy-name过滤的路由上。
在本故障诊断的场景下,可以在Spine 2上创建一个缺省路由无法通过过滤的路由策略,并配置protocol bgp nexthop recursive-lookup route-policy route-policy-name或protocol bgp nexthop recursive-lookup route-policy route-policy-name命令指定该路由策略,使得BGP路由无法迭代到缺省路由上,从而消除BGP路由环路。
¡ 配置BGP与BFD联动功能。
开启BGP与BFD联动功能后,Spine 1和Spine 2之间会使用BFD会话来检测链路,当Spine 1重启时,BFD可以快速检测到链路故障,Spine 2会及时断开BGP会话,删除失效路由,即从Spine 1学习到的路由。BGP与BFD联动功能通过peer bfd命令进行配置,配置的详细指导以及注意事项请参见命令参考手册。
¡ 配置BGP负载分担时,不允许设备在EBGP和IGBP路由之间进行负载分担。
本例中的两条100.1.1.0/24网段路由分别来自IBGP会话和EBGP会话,在BGP进程中配置balance命令时,只要不指定eibgp参数,设备就不会在EBGP和IBGP路由之间进行负载分担,Spine 2就能根据BGP的选路规则只优选来自Leaf的100.1.1.0/24网段路由,保证全部流量的正常转发。
(3) 如果故障仍未能排除,请收集如下信息,并联系技术支持人员。
¡ 上述步骤的执行结果。
¡ 设备的配置文件、日志信息、告警信息。
无
无
经过BGP网络转发的公网流量中断。
本类故障的常见原因主要包括:
· BGP公网路由的下一跳不可达。
· BGP公网路由的发布/接收策略配置不当,导致路由发布/接收失败。
· BGP公网路由的数量超过允许接收的最大数量,导致路由被丢弃。
本类故障的诊断流程如图1-7所示。
图1-7 BGP公网流量中断的故障诊断流程图
(1) 检查BGP公网路由是否存在且有效。
根据BGP路由的下一跳、公网流量预计转发路径、网络拓扑规划等信息,找到BGP公网路由的发布端,在发布端上执行display bgp routing-table ipv4 unicast或display bgp routing-table ipv6 unicast命令,查看BGP公网路由信息。
a. 如果需要发布的BGP公网路由不存在,请通过import-route命令或network命令,配置生成需要发布的BGP公网路由。完成BGP路由的生成后,或需要发布的BGP公网路由已经存在,请执行步骤b。
b. 判断BGP公网路由是否为有效路由。只有下一跳路由可达的BGP路由能生效。以路由10.2.1.0/24为例,路由信息中存在标记“*”,则表示该路由为有效路由。
<Sysname> display bgp routing-table ipv4 unicast
Total number of routes: 4
BGP local router ID is 192.168.100.1
Status codes: * - valid, > - best, d - dampened, h - history
s - suppressed, S - stale, i - internal, e - external
a – additional-path
Origin: i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
* > 10.2.1.0/24 10.2.1.1 0 0 i
e 10.2.1.2 0 0 4294967295 i
根据显示信息进行判断:
- 如果BGP公网路由不是有效路由,说明IP路由表中不存在能到达BGP路由下一跳(NextHop)的路由,请排查IP路由相关配置(IGP路由协议或静态路由配置),确保IP路由表中能够存在到达BGP路由下一跳的路由。
- 如果BGP公网路由是有效路由,则执行步骤(2)。
(2) 检查BGP公网路由的接收/发布策略配置是否正确。
根据BGP路由的下一跳、公网流量预计转发路径、网络拓扑规划等信息,找到BGP公网路由的发布端和接收端,并在BGP公网路由的发布端以及接收端上,均执行display current-configuration configuration bgp命令,查看设备上生效的BGP功能模块配置。
如下显示信息所示,影响BGP路由接收/发布策略的命令有:
¡ peer prefix-list
¡ peer filter-policy
¡ peer as-path-acl
¡ filter-policy
¡ peer route-policy
<Sysname> display current-configuration configuration bgp
#
bgp 20
peer 12.1.1.1 as-number 10
peer 23.1.1.3 as-number 30
#
address-family ipv4 unicast
filter-policy 2088 export
network 9.9.9.9 255.255.255.255
peer 12.1.1.1 enable
peer 12.1.1.1 filter-policy 2077 export
peer 12.1.1.1 route-policy test export
peer 23.1.1.3 as-path-acl 2 export
peer 23.1.1.3 enable
peer 23.1.1.3 next-hop-local
peer 23.1.1.3 prefix-list abc export
#
return
有关上述命令如何影响BGP路由的接收/发布的详细介绍,请参见《XX命令参考》中“三层技术-IP路由命令参考”中的“BGP”。查看设备上生效的BGP功能模块配置后,检查已配置的接收/发布策略是否会影响BGP公网路由的接收/发布:
¡ 如果影响,请修改这些配置使得BGP公网路由能够正常地发布和接收。
¡ 如果不影响,请执行步骤(3)。
(3) 检查路由数量是否超过限制的最大数量。
在BGP公网路由的接收端执行display current-configuration configuration bgp命令,查看是否存在peer route-limit命令的配置。
¡ 如果存在peer route-limit命令的配置,并且在接收端设备上打印了如下日志信息:
BGP/4/BGP_EXCEED_ROUTE_LIMIT: BGP.: The number of routes from peer 1.1.1.1 (IPv4-UNC) exceeds the limit 100.
说明BGP公网路由的发送端发送了过多的BGP路由,导致部分BGP公网路由无法被接收端接收。此时可以通过如下方式保障路由的接收:
- 在BGP路由的发送端,通过aggregate命令创建聚合路由,并通过aggregate命令的detail-suppressed或suppress-policy参数抑制具体路由的发布,以减少BGP路由的数量。
- 在BGP路由的接收端,通过peer route-limit命令调大允许接收的最大路由数量。
¡ 如果不存在peer route-limit命令的配置;或者存在peer route-limit命令的配置,但接收端设备并未接收到超过最大数量限制的路由(接收端设备上未打印过BGP/4/BGP_EXCEED_ROUTE_LIMIT日志),请执行步骤(4)。
(4) 如果故障仍未能排除,请收集如下信息,并联系技术支持人员。
¡ 上述步骤的执行结果。
¡ 设备的配置文件、日志信息、告警信息。
· 1.3.6.1.4.1.25506.2.202.4.0.1 hh3cBgpPeerRouteNumThresholdExceed
· 1.3.6.1.4.1.25506.2.202.4.0.2 hh3cBgpPeerRouteNumThresholdCleard
· 1.3.6.1.4.1.25506.2.202.4.0.3 hh3cBgpPeerRouteExceed
· 1.3.6.1.4.1.25506.2.202.4.0.4 hh3cBgpPeerRouteExceedClear
· 1.3.6.1.4.1.25506.2.202.4.0.5 hh3cBgpPeerEstablished
· 1.3.6.1.4.1.25506.2.202.4.0.6 hh3cBgpPeerBackwardTransition
· BGP/4/BGP_EXCEED_ROUTE_LIMIT
· BGP/5/BGP_REACHED_THRESHOLD
在图1-8所示组网中,骨干网使用BGP作为控制面协议,承载路由信息。Device A接入的用户网络流量可以通过多条路径到达数据中心或云网络。当Device C发生故障时,Device A通过BFD等功能检测到故障,并触发FRR功能,将流量转发路径切换到Device F。当Device C故障恢复后,FRR功能回切到途径Device C的主用路径时,发生丢包。
图1-8 FRR回切后出现丢包故障组网图
Device C故障恢复后,会向Device A发送路由更新,Device A收到路由更新后将流量切换到途径Device C的主用路径上,但此时Device C的转发表项未更新完成,导致流量到达时没有表项指导转发,从而造成丢包。
本类故障的诊断流程如图1-9所示。
图1-9 FRR回切后出现丢包的故障诊断流程图
(1) 缺省情况下,BGP不延迟优选路由,延迟路由优选功能需要手动开启。因此,请在Device A的FRR功能对应的BGP地址族下,执行route-select delay delay-value命令配置路由优选延迟时间。配置此命令后,Device A会在触发路由优选时延迟一段时间后再进行优选,以保证路径切换时,路径上的所有设备都完成了转发表项更新。
(2) 如果故障仍未能排除,请收集如下信息,并联系技术支持人员。
¡ 上述步骤的执行结果。
¡ 设备的配置文件、日志信息、告警信息。
无
无
不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!