Diagnostic BGP Réseau
Utilisez ce skill lorsqu'une session BGP est en panne, instable, établie mais avec des routes manquantes, ou qu'elle annonce des préfixes inattendus. Le workflow par défaut est la collecte d'évidences en lecture seule ; les actions de politique et de réinitialisation relèvent d'une fenêtre de changement validée.
Quand l'utiliser
- Les voisins BGP sont bloqués dans les états Idle, Connect, Active, OpenSent ou OpenConfirm.
- Une session est établie mais les préfixes attendus sont absents.
- Une route-map, une prefix-list, une limite max-prefix ou une politique de chemin AS filtre peut-être les routes.
- Vous avez besoin d'évidences avant/après pour un changement BGP.
- Vous révisez une automatisation qui analyse la sortie du résumé BGP.
Flux de triage en lecture seule
- Identifiez le voisin exact, la famille d'adresses, la VRF et les ASN locaux/distance.
- Capturez l'état du résumé et la dernière raison de réinitialisation.
- Prouvez l'accessibilité à l'adresse source du pair.
- Vérifiez les références de politique de route avant de supposer un problème de transport.
- Comparez les routes annoncées, reçues et installées là où la plateforme prend en charge ces commandes.
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
Utilisez les commandes spécifiques à la famille d'adresses de la plateforme lorsque l'appareil utilise des VRFs, IPv6, VPNv4 ou EVPN. Ne présumez pas d'une unicast IPv4 globale.
Interprétation des états
| État | Premières vérifications |
|---|---|
| Established avec nombre de préfixes | L'échange de routes est actif ; inspectez la politique et la sélection de table |
| Established avec zéro préfixes | Vérifiez la politique entrante, max-prefix, les routes annoncées et AFI/SAFI |
| Active | La session TCP ne se termine pas ; vérifiez le routage, la source, les ACLs et l'accessibilité du pair |
| Connect | La connexion TCP est en cours ; vérifiez le chemin et l'écouteur distant |
| OpenSent/OpenConfirm | TCP fonctionne ; vérifiez ASN, l'authentification, les timers, les capacités et les logs |
| Idle | Le voisin peut être désactivé, une configuration manquante, bloqué par une politique ou le temporisateur de backoff |
Vérifications de transport
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
Si le pair est source depuis une loopback, confirmez que les deux directions acheminent vers les adresses de loopback et que la configuration du voisin utilise la source de mise à jour attendue.
Évitez de désactiver les ACLs ou les politiques de pare-feu comme raccourci de diagnostic. Lisez d'abord les compteurs de hits, les logs et l'état du chemin.
Vérifications de politique de route
show bgp neighbors <peer> advertised-routes
show bgp neighbors <peer> routes
show ip prefix-list <name>
show route-map <name>
show bgp <prefix>
Certaines plateformes nécessitent une configuration supplémentaire pour que received-routes soit disponible. N'ajoutez pas cette configuration pendant le triage d'incident à moins que l'opérateur n'approuve le changement.
Examen du chemin AS et des préfixes
show bgp regexp _65001_
show bgp regexp ^65001$
show bgp <prefix>
show bgp neighbors <peer> advertised-routes | include Network|Path|<prefix>
Utilisez les regex de chemin AS avec précaution. _65001_ correspond à l'AS 65001 en tant que jeton. Un simple 65001 peut correspondre à des ASN plus longs ou à du texte sans rapport.
Modèle d'analyse
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
Privilégiez la sortie d'analyse structurée lorsqu'elle est disponible, mais stockez la sortie brute avec l'enregistrement de l'incident car les formats de résumé BGP varient selon la plateforme et la famille d'adresses.
Fenêtre de changement uniquement
Ces actions peuvent affecter le routage et ne doivent pas être suggérées comme diagnostics automatiques :
- Réinitialiser une session BGP.
- Modifier l'authentification du voisin, les timers, la source de mise à jour, les route-maps ou les prefix-lists.
- Activer un stockage supplémentaire de routes reçues.
- Assouplir les politiques de pare-feu, ACL ou de plan de contrôle.
Si une réinitialisation est approuvée, privilégiez l'option de soft reset ou de route-refresh la moins perturbatrice prise en charge par la plateforme et documentez précisément pourquoi elle est sûre.
Anti-patrons
- Supposer que
Activesignifie toujours que le côté distant est en panne. - Ignorer les différences de VRF, de famille d'adresses ou de source de mise à jour.
- Utiliser une regex de chemin AS large sans limites de jeton.
- Réinitialiser brutalement un pair avant de lire la dernière raison de réinitialisation et les logs.
- Traiter l'absence de sortie
received-routescomme preuve qu'aucune route n'est arrivée.
Voir aussi
- Skill:
cisco-ios-patterns - Skill:
network-config-validation - Skill:
network-interface-health