ネットワーク BGP 診断
このスキルは、BGPセッションがダウンしている、フラッピングしている、Established だが経路が欠落している、または予期しないプレフィックスを広告している場合に使用します。デフォルトのワークフローは読み取り専用の証拠収集です。ポリシーやリセットアクションは、レビューされた変更承認フローに委ねます。
使用するタイミング
- 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 かつプレフィックス数ゼロ | インバウンドポリシー、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