SKILL.md
只读
名称
network-bgp-diagnostics
描述
仅限诊断的 BGP 排查模式,涵盖邻居状态、路由交换、前缀策略、AS Path 检查及安全排查证据采集。
Network BGP Diagnostics
当 BGP 会话中断、频繁抖动(flapping)、已建立但丢失路由、或宣告了异常前缀时,使用此 Skill。默认工作流为只读排查证据采集;策略修改与会话重置等操作应在经评审的变更窗口中进行。
适用场景
- BGP 邻居卡在 Idle、Connect、Active、OpenSent 或 OpenConfirm 状态。
- 会话处于 Established 状态,但预期的前缀未接收到。
- route-map、prefix-list、max-prefix 限制或 AS Path 策略可能过滤了路由。
- 需要采集 BGP 变更前后的排查证据。
- 正在审查解析 BGP summary 输出的自动化代码。
只读排查流程
- 确认具体的邻居、地址族(address family)、VRF 以及本地/对端 ASN。
- 采集汇总状态与上次重置原因。
- 验证到对端源地址的可达性。
- 在假设传输层故障之前,先检查路由策略引用。
- 在设备支持相关命令的前提下,对比已宣告(advertised)、已接收(received)和已安装(installed)的路由。
show bgp summary
show bgp neighbors <peer>
show ip route <peer>
show tcp brief | include <peer>|:179
show logging | include BGP|<peer>
show running-config | section router bgp
show ip prefix-list
show route-map
当设备使用 VRF、IPv6、VPNv4 或 EVPN 时,请使用特定平台的地址族命令。切勿默认假设为全局 IPv4 单播。
状态解读
| 状态 | 优先检查项 |
|---|---|
| Established(带有前缀计数) | 路由交换正常;检查策略及路由表优选 |
| Established(前缀计数为零) | 检查入站策略、max-prefix、已宣告路由及 AFI/SAFI |
| Active | TCP 会话未能完成建立;检查路由、源地址、ACL 及对端可达性 |
| Connect | TCP 连接建立中;检查路径及对端监听状态 |
| OpenSent/OpenConfirm | TCP 通畅;检查 ASN、认证、定时器、能力协商(capabilities)及日志 |
| Idle | 邻居可能已被禁用、缺少配置、被策略阻断,或处于退避定时器(backoff timer)等待期 |
传输层检查
ping <peer> source <local-source>
traceroute <peer> source <local-source>
show ip route <peer>
show bgp neighbors <peer> | include BGP state|Last reset|Local host|Foreign host
如果对端基于 Loopback 接口建立,请确认双向均能路由到对方的 Loopback 地址,且邻居配置中指定了正确的更新源(update source)。
避免将禁用 ACL 或防火墙策略作为诊断捷径。请优先查看命中计数器、日志和路径状态。
路由策略检查
show bgp neighbors <peer> advertised-routes
show bgp neighbors <peer> routes
show ip prefix-list <name>
show route-map <name>
show bgp <prefix>
部分设备平台需要开启额外配置才能查看 received-routes。除非得到操作人员批准,否则切勿在故障处置期间直接添加该配置。
AS Path 与前缀审查
show bgp regexp _65001_
show bgp regexp ^65001$
show bgp <prefix>
show bgp neighbors <peer> advertised-routes | include Network|Path|<prefix>
请谨慎使用 AS-path 正则表达式。_65001_ 会将 AS 65001 作为独立 Token 匹配。直接使用 65001 可能会误匹配到更长的 ASN 或无关文本。
解析器模式
import re
from typing import Any
BGP_SUMMARY_RE = re.compile(
r"^(?P<neighbor>\d{1,3}(?:\.\d{1,3}){3})\s+"
r"(?P<version>\d+)\s+"
r"(?P<remote_as>\d+)\s+"
r"(?P<msg_rcvd>\d+)\s+"
r"(?P<msg_sent>\d+)\s+"
r"(?P<table_version>\d+)\s+"
r"(?P<input_queue>\d+)\s+"
r"(?P<output_queue>\d+)\s+"
r"(?P<uptime>\S+)\s+"
r"(?P<state_or_prefixes>\S+)$",
re.M,
)
def parse_bgp_summary(raw: str) -> list[dict[str, Any]]:
rows = []
for match in BGP_SUMMARY_RE.finditer(raw):
state_or_prefixes = match.group("state_or_prefixes")
if state_or_prefixes.isdigit():
state = "Established"
prefixes_received = int(state_or_prefixes)
else:
state = state_or_prefixes
prefixes_received = None
rows.append({
"neighbor": match.group("neighbor"),
"remote_as": int(match.group("remote_as")),
"state": state,
"prefixes_received": prefixes_received,
"uptime": match.group("uptime"),
})
return rows
若有结构化解析器输出请优先使用,但同时需在故障记录中保存原始文本输出,因为不同设备平台和地址族的 BGP summary 输出格式存在差异。
仅限变更窗口操作
以下操作会影响路由选择,切勿作为自动诊断手段直接推荐:
- 重置/清除(Clear)BGP 会话。
- 修改邻居认证、定时器、更新源、route-map 或 prefix-list。
- 开启额外的未接收路由(received-route)存储。
- 放宽防火墙、ACL 或控制平面(control-plane)策略。
若重置操作已获得批准,应优先选择平台支持且影响最小的软重置(soft reset)或路由刷新(route-refresh)方案,并明确记录其安全可行性依据。
反模式
- 误以为
Active状态一定意味着对端宕机。 - 忽视 VRF、地址族或更新源的差异。
- 使用未加 Token 边界的宽泛 AS-path 正则表达式。
- 在查看上次重置原因和日志前直接硬重置邻居。
- 将没有
received-routes输出直接当成对端未发送路由的证据。
参见
- Skill:
cisco-ios-patterns - Skill:
network-config-validation - Skill:
network-interface-health






