Logique topologique
Une route apprise via eBGP vient d'un AS externe. Elle est supposée plus proche de la destination dans l'espace inter-AS. Un chemin iBGP est une route réfléchie à l'intérieur de l'AS, donc potentiellement moins direct.
Administrative Distance
eBGP AD = 20, iBGP AD = 200. L'AD ne fait pas partie de l'algorithme de sélection BGP interne, mais elle reflète la même philosophie : une route eBGP est jugée plus fiable qu'une route iBGP.
Immuable par attribut
Ce critère ne peut pas être modifié par un attribut BGP. La seule façon de renverser la décision est d'agir sur un critère supérieur (1–6) : Weight plus élevé, LOCAL_PREF plus élevé, AS-PATH plus court, meilleur Origin, ou MED plus bas sur le chemin iBGP.
Condition d'application
S'applique uniquement si le routeur dispose de plusieurs chemins valides vers le même préfixe, dont au moins un eBGP et au moins un iBGP, et si tous les critères 1 à 6 sont strictement égaux.
| Caractéristique | eBGP | iBGP |
|---|---|---|
| AS des peers | AS différents | Même AS |
| Administrative Distance | 20 | 200 |
| TTL par défaut | 1 (lien direct) | 255 (pas de limite) |
| NEXT_HOP | Modifié → IP du peer eBGP | Préservé (pas changé) |
| LOCAL_PREF | Non envoyé vers eBGP peers | Envoyé vers iBGP peers |
| MED | Envoyé vers eBGP peers | Reçu des eBGP, propagé en iBGP |
| AS-PATH | AS local ajouté (prepend) | AS local NON ajouté |
| Split horizon iBGP | N/A | Route iBGP NON re-annoncée à iBGP |
| Full mesh requis | N/A | Oui (ou RR / Confédération) |
| Critère #7 | ✅ Gagne sur iBGP | ❌ Perd face à eBGP |
ebgp-multihop — eBGP sur loopbacks (TTL > 1)
! Par défaut TTL=1 : seul un peer directement connecté peut établir eBGP ! Pour eBGP entre loopbacks (recommandé en production) : router bgp 65001 neighbor 10.255.1.2 remote-as 65002 neighbor 10.255.1.2 ebgp-multihop 2 ! TTL=2 neighbor 10.255.1.2 update-source Loopback0
next-hop-self — Résoudre le problème NEXT_HOP iBGP
! Problème : iBGP préserve le NEXT_HOP du peer eBGP (ex: 203.0.113.1) ! Les routeurs internes ne connaissent pas cette adresse → route invalide ! Solution : le border router annonce son propre IP comme NEXT_HOP router bgp 65001 neighbor 192.168.1.2 remote-as 65001 ! iBGP peer neighbor 192.168.1.2 next-hop-self ! Force NH = propre IP
iBGP full mesh — Requis par le split horizon
! iBGP split horizon : une route apprise via iBGP N'EST PAS re-annoncée ! à un autre iBGP peer. Solution : full mesh (n*(n-1)/2 sessions) ! ou Route Reflector / Confédération (voir onglet Confédération) router bgp 65001 ! Full mesh R1-R2-R3 (3 routeurs = 3 sessions) neighbor 10.0.0.2 remote-as 65001 neighbor 10.0.0.3 remote-as 65001
| Scénario | NEXT_HOP annoncé | Problème potentiel | Solution |
|---|---|---|---|
| eBGP → eBGP peer | IP propre (interface eBGP) | — | — |
| eBGP reçu → re-annoncé iBGP | IP du peer eBGP externe | NH inaccessible pour routeurs internes | next-hop-self ou IGP redistrib. |
| iBGP → iBGP peer | Préservé (NH original) | Même NH potentiellement inaccessible | next-hop-self sur border router |
| Route Reflector → client | Préservé (NH original) | NH externe non connu des clients | next-hop-self sur RR |
AS 65100 (ISP-A) AS 65001 (nous) AS 65200 (ISP-B)
┌──────────┐ eBGP ┌────────────────┐ eBGP ┌──────────┐
│ R-ISP-A │─────────────►│ R1 (border-1) │ │ R-ISP-B │
│10.1.1.1 │ │ 10.1.1.2 │ │10.2.1.1 │
└──────────┘ │ │◄─────────│ │
└────────┬───────┘ └──────────┘
│ iBGP │ eBGP
┌────────▼───────┐ │
│ R2 (border-2) │◄──────────────┘
│ 10.2.1.2 │
└────────────────┘
Préfixe annoncé : 172.16.0.0/24 (depuis AS 65100 ET AS 65200)
R1 : reçoit via eBGP (AS 65100)
R2 : reçoit via eBGP (AS 65200) + via iBGP depuis R1
R2# show ip bgp 172.16.0.0/24 BGP routing table entry for 172.16.0.0/24, version 5 Paths: (2 available, best #2, table Default-IP-Routing-Table) Advertised to update-groups: 1 65100 ← chemin 1 : via R1 (iBGP) 10.1.1.1 (metric 10) from 10.0.0.1 (10.0.0.1) Origin IGP, metric 0, localpref 100, valid, internal Community: 65001:100 65200 ← chemin 2 : via ISP-B (eBGP) 10.2.1.1 from 10.2.1.1 (10.2.1.1) Origin IGP, metric 0, localpref 100, valid, external, best ← ✅ critère #7
external (eBGP) gagne sur internal (iBGP).
| Critère | Chemin iBGP (via R1) | Chemin eBGP (direct) | Résultat |
|---|---|---|---|
| #1 Weight | 32768 (défaut) | 32768 (défaut) | Égal — suivant |
| #2 LOCAL_PREF | 100 | 100 | Égal — suivant |
| #3 NH=0.0.0.0 | Non (route reçue) | Non (route reçue) | Égal — suivant |
| #4 AS-PATH | 1 hop (65100) | 1 hop (65200) | Égal — suivant |
| #5 Origin | IGP (i) | IGP (i) | Égal — suivant |
| #6 MED | 0 | 0 | Égal — suivant |
| #7 eBGP/iBGP | internal | external | ✅ eBGP gagne |
| Marqueur | Signification |
|---|---|
> (chevron en début de ligne) | Best path sélectionné |
valid, external, best | Route eBGP, sélectionnée |
valid, internal | Route iBGP, valide mais non sélectionnée |
i en début de ligne (table summary) | Route iBGP (interne) |
metric X sur route iBGP | IGP metric vers le NEXT_HOP (critère #8) |
-
1
Weight (critère #1) — Appliquer un Weight plus élevé sur le chemin iBGP. S'applique localement sur le routeur recevant les deux chemins.
neighbor 10.0.0.1 weight 200 ← iBGP peer (défaut=0 pour iBGP reçu) -
2
LOCAL_PREF (critère #2) — Augmenter la LOCAL_PREF de la route reçue via iBGP (définie sur le border router eBGP entrant, propagée en iBGP). Portée AS-wide.
route-map RM-PREFER-IBGP permit 10 → set local-preference 200 -
3
AS-PATH prepend (critère #4) — Allonger l'AS-PATH du chemin eBGP indésirable via
set as-path prependdans une route-map sur le peer eBGP entrant. -
4
Origin (critère #5) — Changer l'Origin du chemin iBGP en
i(IGP) s'il est actuellement?oue. Le chemin iBGP gagnera sur critère #5 avant d'atteindre #7.
! Sur R2, favoriser le chemin reçu via iBGP (depuis R1) sur le chemin eBGP direct router bgp 65001 neighbor 10.0.0.1 remote-as 65001 ! iBGP peer R1 neighbor 10.0.0.1 route-map RM-WEIGHT-HIGH in route-map RM-WEIGHT-HIGH permit 10 match ip address prefix-list PL-172-16 set weight 200 ! Weight 200 > 0 (défaut eBGP) → iBGP gagne en #1 ! Vérification show ip bgp 172.16.0.0/24 ! → weight 200 sur chemin iBGP : "best" apparaît sur ce chemin
! Sur R1 (border eBGP vers ISP-A), dégrader la LOCAL_PREF des routes ISP-A ! R2 recevra LOCAL_PREF=50 pour ces routes → LOCAL_PREF 100 du chemin iBGP gagne route-map RM-ISP-A-IN permit 10 set local-preference 50 router bgp 65001 neighbor 10.1.1.1 route-map RM-ISP-A-IN in ! eBGP peer ISP-A
🔧 Maintenance eBGP
Pendant une maintenance sur un lien eBGP, élever la LOCAL_PREF du chemin iBGP alternatif pour forcer le trafic à passer par l'autre border router.
🏗️ Route Reflector préféré
Dans une architecture RR, forcer les clients à utiliser un chemin iBGP spécifique via Weight sur le RR, même si un chemin eBGP direct est disponible.
💰 Politique de coût
ISP-A moins cher qu'ISP-B : augmenter LOCAL_PREF des routes reçues de ISP-A afin que tous les routeurs internes préfèrent ce chemin, même s'ils ont un accès eBGP direct à ISP-B.
AS 65001 (AS public confédéré) ┌─────────────────────────────────────────────────┐ │ Sub-AS 65100 Sub-AS 65200 │ │ ┌──────────┐ CONFED ┌──────────┐ │ │ │ R1 │◄────────►│ R3 │ │ │ │ │ eBGP │ │ │ │ └──────────┘ └──────────┘ │ │ R1-R2 : iBGP (même sub-AS 65100) │ └─────────────────────────────────────────────────┘ Session R1-R3 : CONFED eBGP (sub-AS différents) → AS_CONFED_SEQUENCE utilisé dans AS-PATH → Traité comme iBGP pour critère #7
| Type de session | Traitement critère #7 | AS-PATH type |
|---|---|---|
| eBGP externe (vers autre AS) | ✅ Traité comme eBGP → gagne en #7 | AS_SEQUENCE |
| iBGP (même sub-AS) | ❌ Traité comme iBGP → perd en #7 | AS_SEQUENCE |
| CONFED eBGP (sub-AS différent) | ⚠️ Traité comme iBGP en #7 | AS_CONFED_SEQUENCE |
🔄 Route Reflector — comportement
Le RR reflète les routes iBGP vers ses clients. Quand un client RR reçoit une route réfléchie, elle reste une route iBGP pour le critère #7. Si le client a aussi un chemin eBGP direct pour le même préfixe, le chemin eBGP gagne toujours en critère #7.
Attributs ajoutés par le RR :
- ORIGINATOR_ID (type 9) — Router-ID de l'annonceur original
- CLUSTER_LIST (type 10) — Liste des clusters traversés (anti-boucle)
📋 Critère #12 — Cluster-list
Si deux routes iBGP arrivent au critère #12 (après avoir passé #7, #8, #9, #10, #11 à égalité), la route avec la CLUSTER_LIST la plus courte est préférée. Cela favorise les routes passant par moins de Route Reflectors.
router bgp 65100 ! Sub-AS local bgp confederation identifier 65001 ! AS public confédéré bgp confederation peers 65200 ! Autres sub-AS neighbor 10.0.0.3 remote-as 65200 ! CONFED eBGP (traité comme iBGP en #7) neighbor 10.0.0.2 remote-as 65100 ! iBGP classique (même sub-AS)
⚡ NEXT_HOP iBGP inaccessible
Le NEXT_HOP d'une route iBGP est préservé (IP du peer eBGP externe). Les routeurs internes ne connaissent pas cette adresse → route invalide, jamais installée.
Solution : next-hop-self sur le border router, ou redistribuer la route du peer eBGP dans l'IGP.
⚡ iBGP split horizon — routes non propagées
R1 apprend 172.16.0.0/24 via iBGP depuis R2. R1 ne re-annonce PAS cette route à R3 (autre iBGP peer). R3 ne connaît jamais le préfixe.
Solution : full mesh iBGP, ou déployer un Route Reflector / Confédération.
⚡ Confusion AD et critère #7
L'Administrative Distance (eBGP=20, iBGP=200) n'est pas un critère de l'algorithme de sélection BGP. Elle est utilisée lors de la comparaison inter-protocoles (BGP vs OSPF, etc.). Elle n'intervient jamais entre deux routes BGP.
⚡ ebgp-multihop oublié sur loopback
Session eBGP entre loopbacks (recommandé pour la stabilité) : TTL=1 par défaut → session ne s'établit jamais si les loopbacks ne sont pas directement connectées.
Solution : neighbor X.X.X.X ebgp-multihop 2 + update-source Loopback0.
⚡ CONFED eBGP confondu avec eBGP réel
En confédération, une session vers un sub-AS différent utilise remote-as d'un autre sub-AS → ressemble à eBGP. Mais pour le critère #7, cette session est traitée comme iBGP. La route ne bénéficiera pas de la priorité eBGP en #7.
⚡ Route reflétée écrase le chemin eBGP local
Un client RR avec session eBGP directe reçoit aussi la même route via le RR (iBGP). Il choisit son chemin eBGP direct en #7. OK. Mais si le chemin eBGP tombe, la route réfléchie prend le relais → convergence correcte. Ne pas filtrer les routes iBGP réfléchies inutilement.
✅ Bonne pratique — always use next-hop-self
Sur tous les border routers eBGP qui re-annoncent en iBGP, configurer systématiquement next-hop-self vers les peers iBGP. Cela garantit que le NEXT_HOP est toujours résolvable par les routeurs internes, quelle que soit la topologie IGP.
✅ Bonne pratique — Weight = 0 sur routes iBGP
Le Weight par défaut est 32768 pour les routes localement originées et 0 pour les routes reçues (eBGP et iBGP). Ne pas confondre : une route eBGP reçue a Weight=0 par défaut, pas 32768. Le Weight 32768 ne s'applique qu'aux routes injectées localement (network, redistribute).
Cliquez sur une carte pour révéler la réponse.
next-hop-self sur le border router, ou redistribution IGP.
neighbor X ebgp-multihop 2 (ou plus) + neighbor X update-source Loopback0.
valid, external, best → route apprise via eBGP, sélectionnée.valid, internal → route apprise via iBGP, valide mais non sélectionnée si un chemin eBGP existe.Le marqueur
i en début de ligne dans le summary indique aussi une route iBGP.