Ce que compare le critère #8
Pour chaque chemin BGP encore en lice, le routeur regarde le NEXT_HOP associé, puis consulte sa table de routage pour connaître le coût IGP pour atteindre cette adresse. La route avec le coût le plus bas est sélectionnée.
Valeur "metric" dans show ip bgp
Dans show ip bgp, le champ metric affiché pour les routes iBGP correspond à la métrique IGP vers leur NEXT_HOP. Pour les routes eBGP (NEXT_HOP directement connecté), la métrique est typiquement 0.
Sensibilité aux changements IGP
Si la topologie IGP change (lien en panne, coût modifié), la métrique vers un NEXT_HOP peut changer. BGP recalcule automatiquement le best path via le mécanisme de Next-Hop Tracking (NHT).
Désactivation possible
La commande bgp bestpath igp-metric ignore permet de sauter le critère #8. Les chemins à coût IGP différents sont alors comparés à égalité → possibilité d'ECMP même avec métriques IGP inégales.
AS 65001 ┌─────────────────────────────────────────────┐ │ │ │ R3 (RR) ──────── R1 (border-W) │ │ │ cost=10 │ eBGP │ │ │ 203.0.113.1 (ISP-A) │ │ │ │ │ R4 ──────────── R2 (border-E) │ │ cost=50 │ eBGP │ │ 203.0.113.2 (ISP-A aussi) │ │ │ │ R3 reçoit les deux routes via iBGP depuis │ │ R1 (NH=203.0.113.1) et R2 (NH=203.0.113.2) │ └─────────────────────────────────────────────┘
| Type de route résolvant le NH | Métrique utilisée en #8 | Cas typique |
|---|---|---|
| Directement connectée | 0 | eBGP peer sur lien direct |
| Route statique | 0 (ou AD statique) | NH statique vers peer eBGP |
| OSPF (intra-area) | Coût OSPF cumulé | iBGP peer loopback via OSPF |
| OSPF (inter-area) | Coût OSPF total | Topologie multi-area |
| EIGRP | Métrique composite EIGRP | Réseau EIGRP interne |
| IS-IS | Métrique IS-IS | Réseau opérateur SP |
| Non résolvable | Route invalide | NH unreachable → rejetée |
! NH iBGP = 10.255.0.2 (loopback R1) ! Vérification dans la table de routage de R3 R3# show ip route 10.255.0.2 Routing entry for 10.255.0.0/24 Known via "ospf 1", distance 110, metric 10, type intra area Last update from 10.0.13.1 on GigabitEthernet0/0, 00:05:12 ago Routing Descriptor Blocks: * 10.0.13.1, from 10.255.0.1, 00:05:12 ago, via GigabitEthernet0/0 Route metric is 10, traffic share count is 1 ! BGP utilisera metric=10 pour le critère #8 sur ce chemin ! Si un autre chemin a NH résolvable avec metric=5 → ce chemin perd en #8 R3# show ip bgp 172.16.0.0/24 ... 10.255.0.2 (metric 10) from 10.255.0.2 (10.255.0.2) valid, internal
AS 65001 ┌────────────────────────────────────────────────────────┐ │ │ │ ┌──── R1 (border-W) ────┐ eBGP → ISP (65100) │ │ │ Loopback: 1.1.1.1 │ │ │ OSPF │ cost W→R3 = 10 │ │ │ │ │ │ │ R3 ────┤ │ │ │ (RR) │ Loopback: 2.2.2.2 │ │ │ └──── R2 (border-E) ────┘ eBGP → ISP (65100) │ │ cost E→R3 = 50 │ │ │ │ Préfixe : 172.16.0.0/16 annoncé par les 2 ISP │ │ R1 NH = 203.0.113.1, R2 NH = 203.0.113.2 │ │ Sur R3 : IGP metric vers 1.1.1.1 = 10 │ │ IGP metric vers 2.2.2.2 = 50 │ └────────────────────────────────────────────────────────┘
R3# show ip bgp 172.16.0.0/16 BGP routing table entry for 172.16.0.0/16, version 8 Paths: (2 available, best #1, table Default-IP-Routing-Table) Advertised to update-groups: 1 65100 203.0.113.1 (metric 10) from 1.1.1.1 (1.1.1.1) ← via R1 Origin IGP, metric 0, localpref 100, valid, internal, best ↑ metric=10 (IGP cost vers NH 1.1.1.1) — critère #8 : 10 < 50 → best ✅ 65100 203.0.113.2 (metric 50) from 2.2.2.2 (2.2.2.2) ← via R2 Origin IGP, metric 0, localpref 100, valid, internal ↑ metric=50 (IGP cost vers NH 2.2.2.2) — critère #8 : 50 > 10 → perd ❌
| Critère | Chemin via R1 | Chemin via R2 | Résultat |
|---|---|---|---|
| #1 Weight | 0 | 0 | Égal — suivant |
| #2 LOCAL_PREF | 100 | 100 | Égal — suivant |
| #3 NH=0.0.0.0 | Non | Non | Égal — suivant |
| #4 AS-PATH | 1 hop (65100) | 1 hop (65100) | Égal — suivant |
| #5 Origin | IGP (i) | IGP (i) | Égal — suivant |
| #6 MED | 0 | 0 | Égal — suivant |
| #7 eBGP/iBGP | internal | internal | Égal — suivant |
| #8 IGP metric | 10 | 50 | ✅ R1 gagne (10 < 50) |
R3(config-router)# bgp bestpath igp-metric ignore R3# show ip bgp 172.16.0.0/16 BGP routing table entry for 172.16.0.0/16 Paths: (2 available, best #1, table Default-IP-Routing-Table) 65100 203.0.113.1 (metric 10) from 1.1.1.1 (1.1.1.1) Origin IGP, localpref 100, valid, internal, best ← #9+ départage 65100 203.0.113.2 (metric 50) from 2.2.2.2 (2.2.2.2) Origin IGP, localpref 100, valid, internal ! Critère #8 ignoré → les deux chemins sont "égaux" jusqu'à #9+ ! Si maximum-paths ibgp 2 configuré : ECMP possible malgré metric différente
Événements déclencheurs
- NH devient inaccessible (route disparaît)
- NH redevient accessible (route réapparaît)
- Métrique IGP vers NH change (→ critère #8)
- Prochain saut IGP change (next-hop change)
Délai de réaction (dampening)
Par défaut, BGP attend 5 secondes après un événement IGP avant de recalculer le best path. Ce délai évite les oscillations en cas de flapping IGP.
bgp nexthop trigger delay <0-100>
0 = réaction immédiate (non recommandé)
! NHT est activé par défaut. Personnalisation : router bgp 65001 bgp nexthop trigger delay 10 ! Attendre 10s après changement IGP bgp nexthop trigger enable ! Activer (par défaut) ! Désactiver NHT (déconseillé en production) : router bgp 65001 no bgp nexthop trigger enable ! Ignorer le critère #8 (métriques IGP ne comptent plus) : router bgp 65001 bgp bestpath igp-metric ignore
! Voir l'état de tous les next-hops BGP R3# show ip bgp nexthops BGP nexthop path by IGP metric table Nexthop Resolved Metric Last RIB Change Priority 1.1.1.1 yes 10 00:01:05 0 2.2.2.2 yes 50 00:01:05 0 203.0.113.1 yes 0 00:00:30 0 ! Voir les détails d'un next-hop spécifique R3# show ip bgp nexthops 1.1.1.1 ! Voir la configuration NHT R3# show ip bgp summary ! Chercher : "BGP scan interval" et "BGP table version" ! Debug NHT (attention : très verbeux en production) R3# debug ip bgp nexthop R3# debug ip bgp 1.1.1.1 events
| Événement | Action NHT | Impact BGP |
|---|---|---|
| Lien IGP tombe (NH inaccessible) | NH marqué invalide après délai NHT | Route BGP invalidée, retirée de la table |
| Lien IGP remonte (NH accessible) | NH marqué valide après délai NHT | Route BGP réactivée, best path recalculé |
| Coût OSPF modifié (ex: 10→5) | Métrique mise à jour après délai NHT | Best path peut changer si critère #8 s'applique |
| Route IGP remplacée par statique | NH toujours résolvable, métrique=0 | Chemin peut gagner en #8 (metric 0 < OSPF cost) |
maximum-paths permet d'installer plusieurs chemins en ECMP. Pour que deux chemins soient éligibles à l'ECMP, ils doivent être identiques sur les critères 1 à 8 (ou les critères différents doivent être explicitement ignorés).
router bgp 65001 ! ECMP entre chemins eBGP (max 32 sur la plupart des plateformes) maximum-paths 4 ! ECMP entre chemins iBGP maximum-paths ibgp 4 ! ECMP eBGP + iBGP combinés (contexte VPN/MPLS) maximum-paths eibgp 4 ! Ignorer la métrique IGP pour permettre ECMP même si coûts différents bgp bestpath igp-metric ignore ! Relaxer la contrainte AS-PATH pour ECMP multi-ISP (même préfixe, AS-PATH différents) bgp bestpath as-path multipath-relax
| Condition | eBGP ECMP | iBGP ECMP |
|---|---|---|
| Weight identique | ✅ Requis | ✅ Requis |
| LOCAL_PREF identique | ✅ Requis | ✅ Requis |
| AS-PATH identique (longueur) | ✅ Requis (ou multipath-relax) | ✅ Requis |
| Origin identique | ✅ Requis | ✅ Requis |
| MED identique | ⚠️ Selon config | ⚠️ Selon config |
| IGP metric identique | → ou igp-metric ignore | → ou igp-metric ignore |
| maximum-paths configuré | ✅ Requis (>1) | ✅ Requis (ibgp >1) |
! Scénario : deux ISP différents (AS-PATH différents mais même longueur) ! R3 veut faire ECMP vers 172.16.0.0/16 via R1 (ISP-A 65100) et R2 (ISP-B 65200) router bgp 65001 maximum-paths 2 bgp bestpath as-path multipath-relax ! AS-PATH différents OK pour ECMP bgp bestpath igp-metric ignore ! Ignorer #8 si métriques IGP différentes ! Vérification ECMP dans la table de routage R3# show ip route 172.16.0.0 Routing entry for 172.16.0.0/16 Known via "bgp 65001", distance 200, metric 0 Tag 65100, type internal Last update from 1.1.1.1 00:00:10 ago Routing Descriptor Blocks: * 203.0.113.1, from 1.1.1.1, 00:00:10 ago Route metric is 0, traffic share count is 1 203.0.113.2, from 2.2.2.2, 00:00:08 ago Route metric is 0, traffic share count is 1 ! Deux next-hops → ECMP ✅
R3# show ip bgp 172.16.0.0/16 BGP routing table entry for 172.16.0.0/16 Paths: (2 available, best #1, table Default-IP-Routing-Table) Advertised to update-groups: 1 65100 203.0.113.1 (metric 10) from 1.1.1.1 (1.1.1.1) Origin IGP, localpref 100, valid, internal, multipath, best 65100 203.0.113.2 (metric 10) from 2.2.2.2 (2.2.2.2) Origin IGP, localpref 100, valid, internal, multipath ! "multipath" indique que les deux chemins sont installés en ECMP
⚡ NH inaccessible = route invalide (jamais critère #8)
Si le NEXT_HOP d'un chemin BGP n'est pas résolvable dans la table de routage, la route est invalide et ne participe pas à la sélection. Le critère #8 ne s'applique même pas. Le prérequis de résolvabilité du NEXT_HOP est évalué avant tout critère.
⚡ Confusion : metric BGP (MED) vs metric IGP (#8)
Dans show ip bgp, le champ metric affiché peut représenter deux choses différentes : la MED (critère #6, attribut BGP reçu du voisin) ou la métrique IGP vers le NEXT_HOP (critère #8, calculée localement). Ne pas confondre.
⚡ bgp bestpath igp-metric ignore sans maximum-paths
Ignorer la métrique IGP sans configurer maximum-paths ne crée pas d'ECMP. Le critère #9+ départagera toujours les chemins. Pour réellement profiter de l'ECMP, il faut combiner igp-metric ignore + maximum-paths ibgp N.
⚡ ECMP asymétrique et load balancing inégal
En ECMP BGP, la répartition du trafic dépend du mécanisme de CEF (per-destination ou per-packet). Par défaut, IOS utilise le hash CEF per-flow (5-tuple). Si les flux sont asymétriques, la charge ne sera pas parfaitement équilibrée même avec ECMP.
⚡ NHT trigger delay trop bas — instabilité
Configurer bgp nexthop trigger delay 0 en production peut causer des oscillations BGP si l'IGP flap. Chaque micro-changement de métrique IGP déclencherait immédiatement un recalcul BGP complet. Garder la valeur par défaut (5s) ou augmenter.
⚡ as-path multipath-relax sans vérification de politique
Activer bgp bestpath as-path multipath-relax peut créer de l'ECMP vers des AS différents avec des politiques de routage différentes. Vérifier que les deux chemins sont vraiment équivalents du point de vue politique avant d'activer.
✅ Bonne pratique — next-hop-self + NHT
Configurer next-hop-self sur les border routers garantit que les NEXT_HOP iBGP sont des loopbacks internes, toujours résolvables via IGP. Cela rend le critère #8 fiable et prévisible, et évite les routes invalides dues à des NH externes non connus de l'IGP interne.
✅ Bonne pratique — monitorer show ip bgp nexthops
En production, surveiller régulièrement show ip bgp nexthops pour détecter les NH non résolus ou avec des métriques anormales. Un NH avec Resolved: no signifie que des routes BGP sont invalides et que le trafic peut être impacté.
Cliquez sur une carte pour révéler la réponse.
bgp bestpath igp-metric ignore dans le processus BGP. Les chemins avec des métriques IGP différentes seront alors considérés comme égaux sur ce critère, et le comparateur passera au critère #9 (AIGP).
maximum-paths ibgp N dans le processus BGP. Condition : les chemins doivent être identiques sur les critères 1 à 8 (ou les différences doivent être explicitement ignorées avec igp-metric ignore et/ou as-path multipath-relax).
bgp nexthop trigger delay, défaut = 5s).
metric dans show ip bgp peut représenter deux choses : la MED (critère #6, valeur reçue dans l'attribut BGP) ou la métrique IGP vers le NEXT_HOP (critère #8, calculée localement). Pour les routes iBGP, c'est généralement la métrique IGP vers le NH.