network-bgp-diagnostics

network-bgp-diagnostics

熱門

僅限診斷的 BGP 故障排除模式,適用於檢查鄰居狀態、路由交換、前綴策略、AS Path 檢視以及安全的事證收集。

24萬星標
3.6萬分支
更新於 2026/8/3
SKILL.md
唯讀
名稱
network-bgp-diagnostics
描述

僅限診斷的 BGP 故障排除模式,適用於檢查鄰居狀態、路由交換、前綴策略、AS Path 檢視以及安全的事證收集。

Network BGP Diagnostics

當 BGP 連線中斷、頻繁震盪 (Flapping)、已建立 (Established) 但缺少預期路由,或正宣告非預期的前綴 (Prefix) 時,請使用此 Skill。預設工作流程僅進行唯讀事證收集;調整策略或重置連線等操作應留待經過審核的變更維護窗口 (Change Window) 中執行。

使用時機

  • BGP 鄰居卡在 Idle、Connect、Active、OpenSent 或 OpenConfirm 狀態。
  • 連線已進入 Established,但缺少預期的 Prefix。
  • route-map、prefix-list、max-prefix 限制或 AS path 策略可能正在過濾路由。
  • 需要記錄 BGP 變更前/變更後的事證。
  • 正要審查用於解析 BGP 摘要輸出的自動化腳本。

唯讀初判排查流程

  1. 確認確切的鄰居 (Neighbor)、位址族群 (Address Family)、VRF,以及本機/遠端 ASN。
  2. 擷取摘要狀態與上一次重置的原因。
  3. 驗證連往 Peer 來源位址的可達性 (Reachability)。
  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 時,請使用平台專屬的 Address-Family 命令,勿預設為全域 IPv4 Unicast。

狀態判讀

狀態 首要檢查項目
Established 且有 Prefix 計數 路由交換正常;請檢視策略與路由表選擇
Established 且 Prefix 計數為零 檢查 Inbound 策略、max-prefix、宣告的路由以及 AFI/SAFI
Active TCP 連線未完成;檢查路由、來源位址、ACL 與 Peer 可達性
Connect TCP 連線建立中;檢查路徑與遠端監聽狀態
OpenSent/OpenConfirm TCP 運作正常;檢查 ASN、認證、Timer、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

若 Peer 來源為 Loopback,請確認雙向皆可路由至 Loopback 位址,且鄰居設定使用的是預期的 Update Source。

切勿將關閉 ACL 或防火牆策略當作診斷捷徑。請先讀取計數器 (Hit counters)、日誌與路徑狀態。

路由策略檢查

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 與 Prefix 審查

show bgp regexp _65001_
show bgp regexp ^65001$
show bgp <prefix>
show bgp neighbors <peer> advertised-routes | include Network|Path|<prefix>

請謹慎使用 AS-path Regex。_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

若環境支援,建議優先使用結構化的解析器輸出;但仍應將原始輸出隨故障事件紀錄保存,因為各平台與 Address Family 的 BGP 摘要格式可能有所不同。

僅限變更維護窗口

以下操作會影響路由,切勿建議作為自動化診斷動作:

  • 清除 (Clear) BGP Session。
  • 修改鄰居認證、Timer、Update Source、route-maps 或 prefix-lists。
  • 啟用額外的 received-route 儲存功能。
  • 放寬防火牆、ACL 或 Control-Plane 策略。

若重置操作已獲批准,請優先選用平台支援且影響最小的 Soft 重置或 Route Refresh 選項,並詳細記錄其安全理由。

反模式

  • 誤以為 Active 一定代表遠端設備已宕機 (Down)。
  • 忽略 VRF、Address Family 或 Update-Source 的差異。
  • 使用未加 Token 邊界限制的寬鬆 AS-path Regex。
  • 在讀取上次重置原因與日誌前,直接對 Peer 進行硬重置 (Hard Reset)。
  • 將缺少 received-routes 的輸出直接視為未收到任何路由的證據。

相關參考

  • Skill: cisco-ios-patterns
  • Skill: network-config-validation
  • Skill: network-interface-health