đ°ïž BGP (Border Gateway Protocol)
Analyse dense : AS (Peering/Transit), eBGP/iBGP, Algorithme Best Path, Hijacking & RPKI.
Concept : BGP (EGP vs IGP)
Le "GPS" d'Internet. Le protocole "Externe" (EGP) qui relie les réseaux, par opposition à "Interne" (IGP) qui fonctionne à l'intérieur.
EGPIGPPolitique (Policy)L'Unité : SystÚme Autonome (AS)
L'Internet est un "réseau de réseaux". L'AS est l'unité de base : un réseau (ex: Orange, Google) avec sa propre politique.
Autonomous SystemASNBusiness : Peering vs Transit
Le "business" d'Internet. Transit (Client-Fournisseur, payant) vs Peering (Partenariat, gratuit). Le rĂŽle des IXP.
TransitPeeringIXPArchitecture : eBGP vs iBGP
eBGP (parler Ă un *autre* AS) vs iBGP (propager les routes *dans* son propre AS). ProblĂšme : Full-Mesh. Solution : Route Reflectors.
eBGPiBGPRoute ReflectorLogique : Path Vector (AS_PATH)
BGP n'est pas "distance vector", c'est "path vector". L'attribut AS_PATH est la "carte" et le mécanisme anti-boucle.
AS_PATHPath VectorAnti-BoucleLogique : Best Path Selection
Le "cerveau" de BGP. L'algorithme de décision (13 étapes) pour choisir la *meilleure* route (pas la plus courte).
Best PathAlgorithmeLOCAL_PREFMEDSécurité : Hijacking & Leaks
Le "pĂȘchĂ© originel" (la confiance). BGP Hijacking (ex: YouTube/Pakistan) et Route Leaks (fuites de routes).
HijackingRoute LeakConfianceSécurité : RPKI & ROA
La solution cryptographique. RPKI (l'infra de clés) et ROA (le "certificat de propriété" d'un préfixe). Le "Route Origin Validation".
RPKIROAROVInternet n'est pas un seul réseau. C'est un **"réseau de réseaux"** (plus de 100 000 réseaux indépendants). Le **BGP (Border Gateway Protocol)** est le protocole de routage qui relie ces réseaux entre eux. C'est le "GPS" ou le "service postal mondial" qui permet aux données de trouver leur chemin d'un réseau (ex: Orange) à un autre (ex: Google).
1. IGP (Interior Gateway Protocol) - Le Routage *Interne*
- Exemples : OSPF, EIGRP, IS-IS.
- RÎle : Gérer le routage **à l'intérieur** d'un seul réseau (un seul "Autonomous System", voir 1.2).
- Analogie : C'est le systÚme de courrier *interne* de votre entreprise. Il sait (trÚs bien) comment amener une lettre du bureau A (au 1er étage) au bureau B (au 10Úme étage).
- Philosophie : **Confiance & Vitesse.**
- Confiance : Tous les routeurs sont sous votre contrĂŽle. Vous leur faites confiance.
- Vitesse (Convergence) : L'objectif est de trouver le chemin le plus *court* (le plus rapide, basé sur une "métrique" comme la bande passante) et de converger (se mettre à jour) quasi-instantanément si un lien tombe.
- Limites : Ne "scale" (ne passe à l'échelle) pas. Vous ne pouvez pas faire tourner OSPF avec les 1 million de routes de l'Internet mondial. Il est trop "bavard" et trop complexe.
2. EGP (Exterior Gateway Protocol) - Le Routage *Externe*
- Exemple : BGP (c'est le seul EGP utilisé aujourd'hui).
- RÎle : Gérer le routage **entre** des réseaux indépendants (entre des "Autonomous Systems").
- Analogie : C'est le **Service Postal Mondial**. Il ne sait pas comment aller au "Bureau B" de votre entreprise. Il sait seulement comment amener une lettre du "SiĂšge Social d'Orange (Paris)" au "SiĂšge Social de Google (Mountain View)".
- Philosophie : **MĂ©fiance & Ăchelle.**
- Méfiance : Vous ne faites **PAS** confiance à votre concurrent (Google). Vous ne voulez pas lui annoncer toutes vos routes internes. Vous ne lui annoncez que ce qui est nécessaire.
- Ăchelle (Scalability) : BGP est conçu pour gĂ©rer la **"Table de Routage Globale" (DFZ - Default-Free Zone)**, qui contient plus d'1 million de prĂ©fixes (routes). Il est plus lent, mais incroyablement robuste et "lĂ©ger" (il n'envoie que les mises Ă jour, pas des "hello" constants).
3. BGP = Routage par Politique (Policy-Based Routing)
C'est le concept le plus important Ă comprendre.
Un IGP (OSPF) prend des décisions basées sur la **technique** (Quel est le chemin le plus *rapide* ?).
Un EGP (BGP) prend des décisions basées sur la **politique (Policy)** (Quel est le chemin le plus *rentable* ou *stratégique* ?).
Votre AS (Orange) a deux chemins pour atteindre Google (AS15169) :
- Un "Peering" direct et gratuit (0âŹ) (voir 1.3).
- Un "Transit" payant via un fournisseur (ex: Cogent, 10 000âŹ/mois).
MĂȘme si le chemin de Transit est *techniquement* plus rapide (moins de latence), votre **politique BGP** (votre "business") forcera le trafic Ă prendre le chemin de Peering (gratuit).
BGP n'est pas un protocole de "routage", c'est un protocole "d'accessibilité" (reachability). Il ne dit pas "voici le meilleur chemin", il dit "voici les chemins que je connais, et voici les *attributs* (les 'politiques') qui leur sont associés". C'est le "cerveau" (voir 3.2) qui applique ensuite ces politiques.
L'Internet n'est pas un "nuage". C'est une **collection de "SystÚmes Autonomes" (AS)**. Un AS est un réseau (ou un groupe de réseaux) géré par une seule entité administrative qui maintient une politique de routage unifiée.
ASN (Autonomous System Number)
Chaque AS est identifié par un numéro unique, l'**ASN (Autonomous System Number)**, assigné par des RIRs (Regional Internet Registries) comme le RIPE (Europe) ou l'ARIN (Amérique du Nord).
- Exemples d'ASNs :
- AS15169 : Google
- AS7018 : AT&T
- AS3356 : Level 3 / Lumen
- AS3215 : Orange S.A.
- AS16509 : Amazon (AWS)
- Taille : Historiquement 16-bit (65 535 ASNs). Aujourd'hui 32-bit (4.2 milliards d'ASNs) pour gérer la croissance.
Préfixes IP & Origine
Un AS "possÚde" (ou loue) des blocs d'adresses IP, appelés **"Préfixes"**.
L'objectif principal de BGP est pour un AS d'**"annoncer" (originate)** au reste du monde les préfixes qu'il contrÎle.
Annonce BGP (simplifiée) : "Je suis l'AS15169 (Google), et j'annonce que je suis l'origine (le propriétaire) du préfixe 8.8.8.0/24 (le DNS de Google). Si vous voulez atteindre ce préfixe, envoyez-moi le trafic."
Un **AS (SystĂšme Autonome)**...
...utilise **BGP (le protocole)**...
...pour annoncer ses **Préfixes (les routes IP)**...
...en appliquant une **Politique (le business)**.
Toutes les connexions BGP (eBGP) ne sont pas identiques. Elles suivent deux modÚles économiques principaux qui définissent *quelles* routes sont échangées.
1. Transit (Relation Client-Fournisseur)
- Relation : Client (ex: un FAI local) paie un Fournisseur (ex: un "Tier-1" comme Orange, Cogent, Lumen).
- Contrat : "Je (Client) vous paie (Fournisseur) (ex: au Mégabit/s) pour que vous m'envoyiez le trafic du *monde entier*."
- Ăchange de Routes BGP :
- Le **Fournisseur (Transit)** annonce au Client la **Table ComplÚte (DFZ - Default-Free Zone)**. C'est la "route par défaut" (
0.0.0.0/0) + toutes les routes spécifiques (~1M de préfixes). - Le **Client** annonce au Fournisseur *uniquement* ses propres préfixes (et ceux de *ses* clients).
- Le **Fournisseur (Transit)** annonce au Client la **Table ComplÚte (DFZ - Default-Free Zone)**. C'est la "route par défaut" (
- RĂšgle d'Or (Fuite de Route) : Un Client ne doit **JAMAIS** annoncer les routes apprises d'un Fournisseur (A) Ă un autre Fournisseur (B). S'il le fait, il devient un "Transit" gratuit (et un trou noir) pour A et B. C'est une "Route Leak" (voir 4.1).
2. Peering (Relation de Partenariat)
- Relation : Deux AS de taille similaire (ex: Orange et Free) qui s'accordent pour échanger du trafic **gratuitement**.
- Contrat : "Je (Orange) t'envoie mon trafic (pour tes clients), tu (Free) m'envoies ton trafic (pour mes clients). Nous n'avons plus besoin de payer un Fournisseur de Transit (ex: Cogent) pour parler entre nous." C'est du "Settlement-Free Peering".
- Ăchange de Routes BGP :
- Orange annonce à Free *uniquement* ses préfixes clients (et les siens).
- Free annonce à Orange *uniquement* ses préfixes clients (et les siens).
- RĂšgle d'Or : Orange n'annonce **PAS** Ă Free les routes qu'il a apprises de son *autre* peer (ex: Google) ou de son *propre* fournisseur de Transit. C'est une relation "non-transitive".
3. Le Lieu : IXP (Internet Exchange Point)
OĂč le "Peering" a-t-il lieu ? Dans un data center neutre appelĂ© **IXP** (ex: France-IX Ă Paris, DE-CIX Ă Francfort).
- Concept : L'IXP est un simple **switch (commutateur) L2** (ou un ensemble de switches).
- Mécanisme : Au lieu de tirer 100 cùbles (Orange-Free, Orange-Google, Free-Google...), les 100 AS se connectent (1 cùble chacun) au switch de l'IXP.
- BGP (Route Server) : Ils établissent des sessions BGP (peering) entre eux, soit directement (N:N), soit (plus efficacement) en "peerant" tous avec le **Route Server** de l'IXP, qui agit comme un "Route Reflector" (voir 2.1) centralisé pour tous les membres.
BGP a deux "saveurs" (types de sessions) qui ont des rÚgles et des objectifs trÚs différents.
1. eBGP (External BGP)
- Objectif : Parler Ă un **autre** AS (un "voisin" BGP).
- Usage : C'est le BGP utilisé pour le **Peering** et le **Transit** (voir 1.3).
- Configuration (Cisco) :
router bgp 64512 neighbor 1.1.1.2 remote-as 65001
(Mon AS est 64512. Je parle à 1.1.1.2, qui est dans l'AS 65001). - RÚgles (Comportement par Défaut) :
- TTL (Time-to-Live) : Le TTL du paquet est mis Ă **1**. Cela force les routeurs eBGP Ă ĂȘtre (gĂ©nĂ©ralement) **directement connectĂ©s** physiquement. (On peut changer cela avec `ebgp-multihop`).
- AS_PATH (Anti-Boucle) : Quand un routeur envoie une route à un peer eBGP, il **ajoute (prepend)** son propre ASN au début de l'attribut `AS_PATH` (voir 3.1).
- Next-Hop (Saut Suivant) : Le "next-hop" (prochain saut) est mis Ă l'adresse IP de l'interface de sortie du routeur.
2. iBGP (Internal BGP) - Le ProblĂšme (Full-Mesh)
- Objectif : Propager les routes (apprises par eBGP) **à l'intérieur** de son propre AS.
- Scénario :
- Mon AS (64512) a 3 routeurs de bordure : R1 (Paris), R2 (Londres), R3 (New York).
- R1 (Paris) apprend la route de Google (8.8.8.0/24) via eBGP (de son peer).
- R1 doit maintenant informer R2 (Londres) et R3 (New York) de cette route, au cas oĂč le lien de R1 tombe.
- Cette communication (R1 -> R2, R1 -> R3) se fait en **iBGP**.
- Configuration (Cisco) :
router bgp 64512 neighbor 2.2.2.2 remote-as 64512 neighbor 3.3.3.3 remote-as 64512
(Les "remote-as" sont mon *propre* ASN). - RÚgle (Split-Horizon BGP) : Pour éviter les boucles de routage *internes*, BGP a une rÚgle stricte :"Une route apprise d'un voisin iBGP ne sera **JAMAIS** propagée à un autre voisin iBGP."
- ProblĂšme (NÂČ Full-Mesh) :
- Si R1 (Paris) envoie la route Ă R2 (Londres) (via iBGP).
- R2 **NE PEUT PAS** la re-propager Ă R3 (New York) (Ă cause du split-horizon).
- Conséquence : Pour que R3 connaisse la route de R1, R1 doit avoir une session iBGP **directe** avec R3.
- Conclusion : Dans un réseau iBGP, **tous les routeurs** doivent avoir une session iBGP **avec tous les autres routeurs** (une "Full-Mesh").
- Scalabilité : 10 routeurs = 45 sessions (`n(n-1)/2`). 100 routeurs = 4950 sessions. C'est ingérable.
3. iBGP - La Solution (Route Reflectors)
Pour résoudre le problÚme de la "Full-Mesh", on utilise des **Route Reflectors (RR)** (Réflecteurs de Route).
- Concept : On désigne un (ou deux, pour la redondance) routeur(s) comme "Route Reflector".
- RÚgle : Le RR est le *seul* routeur qui est autorisé à **enfreindre la rÚgle du split-horizon iBGP**.
- Architecture (Hub & Spoke) :
- Les autres routeurs (les "Clients") n'ont plus besoin d'une "Full-Mesh".
- Chaque routeur "Client" n'établit qu'**une seule** session iBGP : vers le Route Reflector.
- Flux de Route :
- R1 (Client) apprend une route eBGP.
- R1 l'annonce (via iBGP) au RR.
- Le RR reçoit la route (iBGP) de R1.
- Le RR **"reflĂšte"** (re-propage) cette route (iBGP) Ă R2, R3, R4...
Attributs (Clustering) : Pour éviter les boucles *entre* les RRs (s'il y en a plusieurs), le RR ajoute deux attributs : `CLUSTER_ID` (l'ID du RR) et `ORIGINATOR_ID` (le Routeur-ID du Client qui a originé la route).
1. Les 4 Messages BGP (Session TCP Port 179)
BGP ne fonctionne pas sur UDP (comme OSPF). Il utilise **TCP (Port 179)** car il a besoin d'une connexion **fiable et ordonnée**. Perdre un "retrait de route" (Withdrawal) est catastrophique (créerait un "trou noir").
Une fois la session TCP établie, les routeurs (peers) n'échangent que 4 types de messages :
OPEN: Le premier message. "Bonjour, je suis AS 64512, mon routeur-ID est 1.1.1.1. Je supporte ces 'capabilities' (ex: 32-bit ASN, RPKI). Es-tu d'accord pour 'peer' (pairer) ?".UPDATE: Le message "cheval de bataille". C'est le seul qui contient des routes. Un seul `UPDATE` peut contenir :- NLRI (Network Layer Reachability Info) : Une liste de préfixes (routes) qui sont **annoncés** (ex: `192.0.2.0/24`).
- WITHDRAWN Routes : Une liste de préfixes qui sont **retirés** (ne sont plus accessibles par ce chemin).
- Path Attributes (Attributs) : La liste des attributs (AS_PATH, LOCAL_PREF, MED...) qui s'appliquent à *tous* les préfixes NLRI de ce message.
KEEPALIVE: Un petit message (19 octets) envoyĂ© (par dĂ©faut) toutes les **60 secondes**. Il sert de "heartbeat" (battement de cĆur). "Je suis toujours lĂ , la session est active."NOTIFICATION: Le message d'erreur. "Tu m'as envoyĂ© un `OPEN` avec un mauvais ASN" ou "Ton `UPDATE` est malformĂ©". Le routeur envoie la `NOTIFICATION` (avec un code d'erreur) et **ferme immĂ©diatement** la session TCP.
2. Le Protocole "Path Vector" (Vecteur de Chemin)
BGP n'est ni "Distance Vector" (RIP) ni "Link State" (OSPF).
- Distance Vector (Ex: RIP) : Ne connaßt que la *métrique* (distance). "Pour aller à X, c'est 5 sauts. J'envoie à mon voisin." (Sujet aux boucles de routage).
- Link State (Ex: OSPF) : Connaßt la *topologie complÚte* (la carte) de son propre réseau.
- Path Vector (BGP) : Ne connaĂźt pas la topologie complĂšte d'Internet (trop gros). Il connaĂźt le **chemin complet des AS** pour atteindre une destination.
L'Attribut `AS_PATH`
C'est l'attribut le plus important de BGP. Il a deux fonctions :
Fonction 1 : La "Carte" (Policy)
L'AS_PATH est la liste (ordonnée) des ASNs qu'un paquet doit traverser. L'algorithme "Best Path" (voir 3.2) **préfÚre le chemin AS_PATH le plus court** (toutes choses étant égales par ailleurs).
R1# show ip bgp 8.8.8.0
BGP routing table entry for 8.8.8.0/24
Paths: 2 available
(Path 1)
3356 15169
From: 1.1.1.1 (Peer A)
Metric: 100
(Path 2)
701 209 15169
From: 2.2.2.2 (Peer B)
Metric: 50
Ici, le routeur R1 choisira le "Path 1" car son `AS_PATH` (longueur 2) est plus court que le "Path 2" (longueur 3), *mĂȘme si* le "Path 2" a une meilleure mĂ©trique (50 < 100).
Fonction 2 : L'Anti-Boucle (Loop Prevention)
C'est le mécanisme anti-boucle **fondamental** de BGP.
- AS 64512 annonce son préfixe `192.0.2.0/24`. L'attribut est `AS_PATH: [64512]`.
- AS 65001 le reçoit (via eBGP). Il le propage à son voisin, AS 65002. L'attribut est maintenant `AS_PATH: [65001, 64512]`.
- AS 65002 le reçoit. Il le propage... (le chemin s'allonge).
- ... Finalement, la route revient (par erreur) Ă l'AS 64512.
- Le routeur de l'AS 64512 reçoit l'UPDATE. Il inspecte l'AS_PATH : `[..., 65002, 65001, 64512]`.
- Il voit son **propre ASN (64512)** dans la liste. Il sait que c'est une **boucle**.
- Il **rejette (discard)** immédiatement cette annonce.
3. Les 4 Catégories d'Attributs
L'attribut `AS_PATH` n'est qu'un des nombreux "attributs" BGP. Ils sont classés par priorité :
| Catégorie | Signification | Exemples |
|---|---|---|
| 1. Well-Known, Mandatory (Connu, Obligatoire) | Doit ĂȘtre reconnu par *tous* les routeurs BGP. Doit ĂȘtre prĂ©sent dans *tous* les `UPDATE`. | AS_PATH, ORIGIN (IGP, EGP, Incomplete), NEXT_HOP. |
| 2. Well-Known, Discretionary (Connu, DiscrĂ©tionnaire) | Doit ĂȘtre reconnu par tous, mais n'est pas *obligĂ©* d'ĂȘtre prĂ©sent. | LOCAL_PREF, ATOMIC_AGGREGATE. |
| 3. Optional, Transitive (Optionnel, Transitif) | N'est pas obligĂ© d'ĂȘtre reconnu. S'il n'est pas reconnu, le routeur doit le marquer comme "partiel" et le **transmettre** Ă son voisin. | COMMUNITY (le plus important), AGGREGATOR. |
| 4. Optional, Non-Transitive (Optionnel, Non-Transitif) | N'est pas obligĂ© d'ĂȘtre reconnu. S'il n'est pas reconnu, le routeur l'**ignore** et ne le transmet *pas*. | MED (Multi-Exit Discriminator), ORIGINATOR_ID (pour les RRs). |
Un routeur BGP (ex: R1) peut apprendre plusieurs chemins (routes) pour un mĂȘme prĂ©fixe (ex: `8.8.8.0/24`) de la part de plusieurs voisins (eBGP et iBGP). Il ne peut en installer qu'**un seul** dans sa table de routage (RIB/FIB). C'est le **"Best Path"** (Meilleur Chemin).
L'algorithme de "Best Path Selection" est une **liste de "tie-breakers" (briseurs d'Ă©galitĂ©) sĂ©quentielle, en 13 Ă©tapes**. Le routeur compare tous les chemins (Path 1, Path 2, Path 3...) Ă l'Ătape 1. S'il y a un gagnant, il est choisi. S'il y a Ă©galitĂ©, seuls les gagnants passent Ă l'Ătape 2, et ainsi de suite. L'algorithme s'arrĂȘte au premier critĂšre qui permet de dĂ©signer un unique vainqueur.
Router(config)# show ip bgp 8.8.8.0/24 La route marquée d'un
> (chevron) est le "Best Path" installĂ© dans la RIB.L'Algorithme (Principales Ătapes, dans l'ordre)
- (Ătape 0) AccessibilitĂ© : Le `NEXT_HOP` est-il accessible (via IGP) ? Si non, ignorer la route.
- (Ătape 1) `WEIGHT` (Poids) : PrĂ©fĂ©rer le chemin avec le `WEIGHT` (Poids) le plus **Ă©levĂ©**.
- (Attribut propriétaire Cisco. Ne s'applique que *localement* à ce routeur. N'est *jamais* propagé. Utile pour "forcer" un routeur spécifique.)
- (Ătape 2) `LOCAL_PREF` (PrĂ©fĂ©rence Locale) : PrĂ©fĂ©rer le chemin avec la `LOCAL_PREF` la plus **Ă©levĂ©e**.
- (Attribut Well-Known, Discretionary. Propagé *uniquement* en iBGP, à l'intérieur de son propre AS).
- C'est l'outil n°1 pour la POLITIQUE DE SORTIE (Outbound). C'est le premier "vrai" attribut. "Peu importe ce qui se passe, tout mon AS (64512) préfÚre sortir par le lien A (LOCAL_PREF=200) plutÎt que par le lien B (LOCAL_PREF=100)."
- (Ătape 3) `LOCAL_ORIGIN` (Origine Locale) : PrĂ©fĂ©rer le chemin qui a Ă©tĂ© *originĂ©* (créé) localement par ce routeur (via `network` ou `aggregate-address`).
- (Ătape 4) `AS_PATH` (Longueur) : PrĂ©fĂ©rer le chemin avec l'attribut `AS_PATH` le plus **court**.
- (C'est le premier "vrai" critÚre de "distance". Si la politique (LOCAL_PREF) n'a rien décidé, BGP préfÚre le chemin qui traverse le moins d'AS.)
- (Ătape 5) `ORIGIN` Type (Origine) : PrĂ©fĂ©rer le type d'origine le plus bas :
- (i) IGP (Code 'i' - La route a été injectée dans BGP via la commande `network`) -> **Le meilleur**
- (e) EGP (Code 'e' - Appris d'un peer EGP, historique)
- (?) Incomplete (Code '?' - La route a été "redistribuée" (injectée) depuis un *autre* protocole de routage (ex: OSPF) dans BGP) -> **Le moins bon**
- (Ătape 6) `MED` (Multi-Exit Discriminator) : PrĂ©fĂ©rer le chemin avec le `MED` le plus **bas** (le plus "proche").
- (Attribut Optionnel, Non-Transitif).
- C'est l'outil n°1 pour la POLITIQUE D'ENTRĂE (Inbound). "Je (AS 64512) dis Ă mon voisin (AS 65001) : J'ai deux liens (A et B) vers toi. Si tu veux m'envoyer du trafic, merci de prĂ©fĂ©rer le Lien A (MED=100) au Lien B (MED=200)." Le voisin (65001) *peut* ignorer cette "suggestion".
- (Ătape 7) `eBGP` vs `iBGP` : PrĂ©fĂ©rer les routes apprises par **eBGP** (externe) plutĂŽt que par **iBGP** (interne).
- (Ătape 8) `IGP Metric` (MĂ©trique Interne) : PrĂ©fĂ©rer le chemin vers le `NEXT_HOP` BGP qui a la mĂ©trique IGP (OSPF/EIGRP) la plus basse. (Le "Hot Potato Routing" - se dĂ©barrasser du paquet le plus vite possible).
- (Ătapes 9-13) Tie-Breakers : ... (ex: le plus vieux chemin, le `Router-ID` le plus bas, l'adresse IP du voisin la plus basse...).
Le routage BGP est l'application de politiques business. Les FAI (ISP) utilisent les attributs BGP (comme LOCAL_PREF, MED, AS_PATH Prepending, Community) pour "tuner" l'algorithme de Best Path (voir 3.2) afin de forcer le trafic à suivre des chemins économiquement favorables.
1. ContrĂŽler son trafic SORTANT (Outbound) : LOCAL_PREF
Scénario : Je suis AS 100. J'ai deux fournisseurs de Transit : AS 200 (Contrat "Premium", cher) et AS 300 (Contrat "Best-Effort", bon marché).
Objectif : Je veux que tout mon trafic sorte (par défaut) par le chemin le moins cher (AS 300), et n'utilise AS 200 que si AS 300 tombe.
Mécanisme :
- (Routeur R1) apprend `8.8.8.0/24` de AS 200 (le cher).
- (Routeur R2) apprend `8.8.8.0/24` de AS 300 (le bon marché).
- Sur R2, j'applique une "route-map" (filtre) :
set local-preference 200. - Sur R1, j'applique :
set local-preference 100(100 est le défaut). - R1 et R2 s'annoncent ces routes (et leur LOCAL_PREF) via **iBGP**.
- Tous les routeurs de mon AS 100 vont comparer les deux chemins (via R1 et R2).
- **Algorithme (Ătape 2) :** `LOCAL_PREF 200` (R2/AS 300) > `LOCAL_PREF 100` (R1/AS 200).
- RĂ©sultat : 100% de mon AS enverra son trafic sortant vers R2 (le chemin bon marchĂ©), *mĂȘme si* le chemin AS_PATH via R1 Ă©tait plus court.
2. Influencer son trafic ENTRANT (Inbound)
C'est plus difficile. Vous ne pouvez pas *forcer* le reste du monde à vous envoyer du trafic d'une certaine maniÚre. Vous ne pouvez que le *suggérer* en modifiant les attributs que vous leur envoyez (via eBGP).
A. MED (Multi-Exit Discriminator)
ScĂ©nario : J'ai deux liens (Lien A, Lien B) vers le *mĂȘme* voisin (AS 200). Je veux qu'AS 200 m'envoie le trafic sur le Lien A (grosse capacitĂ©) et non le Lien B (petit backup).
Mécanisme :
- Sur Lien A (eBGP), j'annonce mes routes avec un `MED` (métrique) bas :
set metric 100. - Sur Lien B (eBGP), j'annonce mes routes avec un `MED` élevé :
set metric 500. - Le routeur d'AS 200 reçoit les deux annonces.
- Algorithme (Ătape 6) : Il voit que `MED 100` < `MED 500`. Il prĂ©fĂ©rera le Lien A pour m'envoyer du trafic. (Note : cet attribut est "Non-Transitif", AS 200 ne le propage pas).
B. AS_PATH Prepending (Allongement)
Scénario : J'ai deux fournisseurs (AS 200 et AS 300). Je veux que le *monde entier* préfÚre m'envoyer du trafic via AS 200 (mon lien principal).
Mécanisme :
- Quand j'annonce mes routes Ă AS 200 : `AS_PATH: [100]` (normal).
- Quand j'annonce mes routes Ă AS 300 (le backup) : j'ajoute (prepend) mon propre ASN 3 fois :
AS_PATH: [100, 100, 100]. - Un routeur distant (AS 500) apprend deux chemins pour m'atteindre :
- Chemin 1 (via AS 200) : `AS_PATH: [200, 100]` (Longueur 2)
- Chemin 2 (via AS 300) : `AS_PATH: [300, 100, 100, 100]` (Longueur 4)
- Algorithme (Ătape 4) : Il voit que `Longueur 2` < `Longueur 4`. Il prĂ©fĂ©rera le Chemin 1.
3. COMMUNITY (Les "Tags" de Politique)
Les attributs (LOCAL_PREF, MED) sont rigides. Les "Communities" (Optionnel, Transitif) sont des "tags" numériques (ex: 65001:100) que vous attachez à une route pour *signaler* une politique à vos voisins (ou à vos propres routeurs).
Cas d'Usage 1 (Politique Interne) : J'attache le tag 100:200 Ă une route apprise. Mes routeurs iBGP voient ce tag et (via une route-map) le traduisent en `LOCAL_PREF 200`.
Cas d'Usage 2 (Politique Externe) : Un fournisseur (ex: Cogent) peut définir un "contrat" public :
- "Si vous m'annoncez une route avec le tag
174:90, je mettrai la LOCAL_PREF Ă 90 pour vous." - "Si vous m'annoncez une route avec le tag
174:0, je n'annoncerai PAS cette route Ă mes pairs (NO_EXPORT)."
Cas d'Usage 3 (DDoS - BLACKHOLE) :
Je (AS 100) suis victime d'une attaque DDoS sur mon IP `1.2.3.4`. Mon lien est saturé.
- J'annonce à mon Fournisseur (AS 200) la route `1.2.3.4/32` (trÚs spécifique).
- J'y attache la "Community"
BLACKHOLE(ex:65535:666). - Le routeur d'AS 200 voit ce tag. Sa politique (prĂ©-configurĂ©e) est : "Si je reçois une route taguĂ©e 'BLACKHOLE', je mets son `NEXT_HOP` Ă
Null0(la poubelle)." - Résultat : AS 200 *rejette (drops)* tout le trafic d'attaque *avant* qu'il n'atteigne mon lien. (Je perds aussi le trafic légitime, mais je sauve mon infrastructure).
Le "pĂ©chĂ© originel" de BGP (conçu dans les annĂ©es 80) est qu'il est basĂ© sur la **confiance**. Il n'y a **aucun mĂ©canisme d'authentification** natif. BGP *suppose* que lorsque l'AS 15169 (Google) annonce `8.8.8.0/24`, c'est bien Google qui parle. Cette confiance peut ĂȘtre exploitĂ©e.
1. BGP Hijacking (Détournement d'Origine)
Définition : Un AS (Attaquant) annonce un préfixe (une route) qu'il ne **possÚde pas**. C'est un "vol d'identité" IP.
Mécanisme (La "Route la Plus Spécifique") :
- Ătat Normal : Google (AS 15169) annonce
8.8.0.0/16(un gros bloc). - L'Attaque : Un hacker (AS 666) annonce **
8.8.8.0/24** (un sous-ensemble, *plus spécifique*). - Le Choix BGP : Les routeurs Internet (partout) reçoivent deux routes pour atteindre `8.8.8.8` :
- Route A (de Google) :
8.8.0.0/16 - Route B (du Hacker) :
8.8.8.0/24
- Route A (de Google) :
- La rÚgle fondamentale du routage est de **toujours préférer la route la plus spécifique (le "longest prefix match")**.
- Résultat : 100% des routeurs préfÚrent la Route B. Tout le trafic mondial destiné au DNS de Google (8.8.8.8) est **détourné** vers l'AS 666 (le hacker).
Cas d'Ătude : Pakistan vs YouTube (2008)
- L'Ordre : Le gouvernement pakistanais ordonne Ă l'ISP "Pakistan Telecom" (AS 17557) de bloquer l'accĂšs Ă YouTube.
- L'Erreur (Interne) : Pour ce faire (en interne), l'ISP crée une "route poubelle" (vers Null0) pour le préfixe de YouTube :
208.65.153.0/24(plus spécifique que le/22de YouTube). - L'Erreur (Externe) : L'ISP (par erreur de configuration) **annonce (via eBGP)** cette route (
208.65.153.0/24) à son fournisseur de transit (PCCW). - La Propagation : PCCW (un Tier-1) voit cette route trÚs spécifique et, suivant la rÚgle, la propage à *tous* ses peers (le monde entier).
- RĂ©sultat : En quelques minutes, les tables de routage mondiales (DFZ) sont mises Ă jour. Tout le trafic mondial de YouTube est redirigĂ© vers l'AS 17557 (Pakistan), oĂč il est "blackholĂ©" (envoyĂ© Ă Null0). YouTube est "offline" mondialement pendant 2 heures, jusqu'Ă ce que PCCW applique un filtre manuel pour ignorer l'annonce pakistanaise.
2. Route Leak (Fuite de Route)
Une "fuite" est différente d'un "hijack". Ce n'est (généralement) pas malveillant, mais c'est tout aussi catastrophique. C'est une **violation de la politique de routage (Peering/Transit)**.
Scénario :
[ Provider A (Tier-1) ] <--> [ MOI (AS 64512) ] <--> [ Provider B (Tier-1) ]
(Transit 1) (Client) (Transit 2)
- Ătat Normal :
- Je paie A et B pour m'envoyer la "DFZ" (le monde).
- J'annonce mes préfixes (`1.2.3.0/24`) à A et B.
- A et B s'annoncent leurs routes (peering) *directement*.
- La Fuite (L'Erreur) :
- Je reçois (via iBGP) toutes les routes de A (ex: 500k routes).
- Mon routeur (mal configuré) **ré-annonce (via eBGP)** ces 500k routes à B.
- La Conséquence :
- Le Provider B voit maintenant *deux* chemins pour atteindre les routes de A :
- Le chemin normal (via son peering avec A).
- Un *nouveau* chemin (via moi, AS 64512).
- Si ce nouveau chemin (via moi) est (par erreur) *plus spécifique* ou a un *AS_PATH plus court*, B (et tous ses clients !) va maintenant essayer de joindre A en passant **par mon AS (64512)**.
- Le Provider B voit maintenant *deux* chemins pour atteindre les routes de A :
- Résultat : Mon petit AS (conçu pour 1 Gbit/s) reçoit soudainement 1 Tbit/s de trafic destiné à A. Mon réseau s'effondre (devient un "trou noir") et cause une panne massive.
C'est la violation de la "RĂšgle d'Or" du Transit (voir 1.3).
Comment résoudre le "péché originel" (la confiance) de BGP ? En ajoutant une **vérification cryptographique** externe. C'est le rÎle du **RPKI**.
1. Qu'est-ce que RPKI & ROA ?
RPKI (Resource Public Key Infrastructure)
C'est une "infrastructure à clé publique" (comme les certificats SSL/TLS pour HTTPS), mais pour les **ressources Internet (IP/ASN)**.
- Gérée par les **RIRs** (Regional Internet Registries - RIPE, ARIN, APNIC...).
- Le RIR (qui vous *alloue* légalement vos IPs/ASN) vous donne un "Certificat" RPKI.
- Ce certificat vous donne le droit (cryptographique) de "signer" des déclarations sur les ressources que vous possédez.
ROA (Route Origin Authorization) - "Le Certificat de Propriété"
L'objet que vous créez et signez est un **ROA (Route Origin Authorization)**. C'est la brique de base de la sécurité BGP.
Un ROA est un objet cryptographique simple qui lie un Préfixe à un ASN.
192.0.2.0/24) autorise l'AS 64512 à originer (annoncer) ce préfixe, avec une longueur maximale de /24."Ce ROA est publié dans le répertoire RPKI mondial.
2. Le Processus : ROV (Route Origin Validation)
Maintenant que cette base de données (ROAs) existe, comment les routeurs l'utilisent-ils ? Ils utilisent le **ROV (Route Origin Validation)**.
Un FAI (ISP) moderne (ex: Orange) installe un logiciel "Cache RPKI" (ou "Validator", ex: Routinator). Ce cache télécharge tous les ROAs du monde (ex: toutes les 5 minutes).
Ensuite, chaque routeur BGP (de bordure) d'Orange est configuré pour parler à ce cache.
Le Flux de Décision (Prévention du Hijack)
Scénario : Le routeur d'Orange reçoit une annonce BGP (un `UPDATE`).
Annonce Reçue : Préfixe : 192.0.2.0/24 AS_PATH : [ 666, ... ] (Origine = AS 666, le Hacker)
Processus de Validation (ROV) :
- 1. RequĂȘte : Le routeur demande au "Cache RPKI" : "Que sais-tu sur
192.0.2.0/24?". - 2. Réponse (ROA) : Le cache répond : "J'ai un ROA valide pour ce préfixe. Il dit : `{ asn: 64512, maxLength: 24 }`".
- 3. Comparaison : Le routeur compare l'Annonce (Origine = 666) au ROA (Origine = 64512). C'est un **mismatch**.
- 4. Ătat : Le routeur marque cette route comme **"RPKI-Invalid" (Invalide)**.
- 5. Action : La politique BGP standard est de **REJETER (Discard/Drop)** *toutes* les routes "Invalid".
Les 3 Ătats RPKI
| Ătat | DĂ©finition | Action |
|---|---|---|
| Valid (Valide) | L'annonce (ASN + Préfixe) **correspond** au ROA. | Accepter la route. |
| Invalid (Invalide) | L'annonce **contredit** le ROA (Mauvais ASN, ou Préfixe trop spécifique ex: `/25` si `maxLength` est `/24`). | Rejeter la route. |
| Unknown / NotFound | **Aucun ROA** n'existe pour ce préfixe (l'owner n'en a pas créé). | Accepter la route (par défaut). C'est le "vieux" BGP basé sur la confiance. |
