network-bgp-diagnostics

network-bgp-diagnostics

热门

仅限诊断的 BGP 排查模式,涵盖邻居状态、路由交换、前缀策略、AS Path 检查及安全排查证据采集。

24万Star
3.6万Fork
更新于 2026/8/3
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 输出的自动化代码。

只读排查流程

  1. 确认具体的邻居、地址族(address family)、VRF 以及本地/对端 ASN。
  2. 采集汇总状态与上次重置原因。
  3. 验证到对端源地址的可达性。
  4. 在假设传输层故障之前,先检查路由策略引用。
  5. 在设备支持相关命令的前提下,对比已宣告(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