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 摘要輸出的自動化腳本。
唯讀初判排查流程
- 確認確切的鄰居 (Neighbor)、位址族群 (Address Family)、VRF,以及本機/遠端 ASN。
- 擷取摘要狀態與上一次重置的原因。
- 驗證連往 Peer 來源位址的可達性 (Reachability)。
- 在推斷為傳輸層故障前,先檢查路由策略的引用設定。
- 在平台支援該命令的前提下,比對已宣告 (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






