Network BGP Diagnostics (ネットワークBGP診断)
このスキルは、BGPセッションがダウンしている、フラッピングしている、確立されているが経路が欠落している、または予期しないプレフィックスを広告している場合に使用します。デフォルトのワークフローは読み取り専用の証拠収集です。ポリシーの変更やリセットアクションは、レビューを経た変更ウィンドウ内で行う必要があります。
使用すべき状況
- BGPネイバーが Idle、Connect、Active、OpenSent、または OpenConfirm 状態でスタックしている。
- セッションは Established だが、期待されるプレフィックスが欠落している。
- route-map、prefix-list、max-prefix制限、またはASパスポリシーが経路をフィルタリングしている可能性がある。
- BGP変更の前後で証拠を収集する必要がある。
- BGPサマリー出力を解析する自動化をレビューしている。
読み取り専用トリアージフロー
- 正確なネイバー、アドレスファミリ、VRF、およびローカル/リモートASNを特定する。
- サマリー状態と最終リセット理由を取得する。
- ピアの送信元アドレスへの到達可能性を確認する。
- トランスポート障害を推定する前に、ルートポリシー参照を確認する。
- プラットフォームがサポートするコマンドを使用して、広告済み、受信済み、およびインストール済みの経路を比較する。
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 (プレフィックス数0) | 受信ポリシー、max-prefix、広告済み経路、および AFI/SAFI を確認する |
| Active | TCPセッションが完了していない。ルーティング、送信元、ACL、およびピア到達可能性を確認する |
| Connect | TCP接続が進行中。パスとリモートリスナーを確認する |
| OpenSent/OpenConfirm | TCPは動作中。ASN、認証、タイマー、ケイパビリティ、およびログを確認する |
| Idle | ネイバーが無効化されている、設定が欠落している、ポリシーでブロックされている、またはバックオフタイマーが動作している可能性がある |
トランスポート確認
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
ピアがループバックを送信元としている場合、双方向でループバックアドレスへの経路が存在し、ネイバー設定が期待される更新送信元を使用していることを確認します。
診断の近道として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パスおよびプレフィックスのレビュー
show bgp regexp _65001_
show bgp regexp ^65001$
show bgp <prefix>
show bgp neighbors <peer> advertised-routes | include Network|Path|<prefix>
ASパス正規表現は注意して使用してください。_65001_ はトークンとしてAS 65001に一致します。単なる 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サマリーフォーマットはプラットフォームやアドレスファミリによって異なるため、生の出力もインシデントレコードと一緒に保存してください。
変更ウィンドウ限定
以下のアクションはルーティングに影響を与える可能性があるため、自動診断として提案すべきではありません。
- BGPセッションのクリア。
- ネイバー認証、タイマー、更新送信元、route-map、またはprefix-listの変更。
- 追加の受信経路ストレージの有効化。
- ファイアウォール、ACL、またはコントロールプレーンポリシーの緩和。
リセットが承認された場合は、プラットフォームがサポートする最も影響の少ないソフトまたはルートリフレッシュオプションを優先し、なぜそれが安全であるかを正確に文書化してください。
アンチパターン
Activeが常にリモート側のダウンを意味すると想定する。- VRF、アドレスファミリ、または更新送信元の違いを無視する。
- トークン境界なしで広範なASパス正規表現を使用する。
- 最終リセット理由とログを読む前にピアをハードリセットする。
received-routes出力の欠落を、経路が到着していない証拠として扱う。
関連情報
- スキル:
cisco-ios-patterns - スキル:
network-config-validation - スキル:
network-interface-health