Mรฉcanisme de scalabilitรฉ iBGP qui supprime l'obligation de full-mesh. Un RR rรฉflรฉchit les routes entre ses clients sans que ceux-ci aient besoin de sessions directes entre eux.
La rรจgle iBGP fondamentale : un routeur ne rรฉannonce pas ร un peer iBGP une route apprise via iBGP (iBGP split-horizon). Sans mรฉcanisme correctif, tous les routeurs iBGP d'un AS doivent avoir une session directe avec tous les autres.
| Nombre de routeurs | Sessions full-mesh requises | Verdict |
|---|---|---|
| 5 | 10 | โ Gรฉrable |
| 10 | 45 | โ Complexe |
| 50 | 1 225 | โ Ingรฉrable |
| 100 | 4 950 | โ Hors de question |
Routeur configurรฉ pour rรฉflรฉchir (relayer) les routes iBGP ร ses clients. Il contourne l'iBGP split-horizon pour les routes venant de ses clients. Configurรฉ avec route-reflector-client sur les neighbors concernรฉs.
Routeur qui a une session iBGP avec le RR et est dรฉclarรฉ comme client (route-reflector-client du cรดtรฉ RR). N'a pas besoin de sessions avec les autres clients โ c'est le RR qui leur transmet les routes.
Routeur iBGP du mรชme AS qui n'est pas client du RR. Les routes apprises d'un non-client ne sont pas rรฉflรฉchies vers les autres non-clients (split-horizon classique maintenu). Typiquement un autre RR.
Ensemble formรฉ par un RR et ses clients. Identifiรฉ par un Cluster-ID (par dรฉfaut = Router-ID du RR). Plusieurs clusters peuvent coexister dans le mรชme AS, avec ou sans hiรฉrarchie.
route-reflector-client est unilatรฉrale, cรดtรฉ RR uniquement. Le client voit juste un peer iBGP normal.Le comportement du RR dรฉpend de la source de la route reรงue :
Avant de rรฉflรฉchir une route, le RR effectue deux vรฉrifications :
Si le propre Cluster-ID du RR est dรฉjร prรฉsent dans la CLUSTER_LIST de la route reรงue โ route rejetรฉe silencieusement. Boucle de rรฉflexion dรฉtectรฉe.
Si le Router-ID local du routeur correspond ร l'ORIGINATOR_ID de la route reรงue โ route rejetรฉe. Le routeur est lui-mรชme l'annonceur original.
Quand un RR rรฉflรฉchit une route pour la premiรจre fois, il ajoute deux attributs BGP :
| Attribut | Type | Flags | Contenu | Critรจre best-path |
|---|---|---|---|---|
ORIGINATOR_ID |
9 | Optional Non-Transitive | Router-ID de l'annonceur original โ ajoutรฉ une seule fois par le 1er RR | #11 (remplace Router-ID du peer) |
CLUSTER_LIST |
10 | Optional Non-Transitive | Liste des Cluster-IDs traversรฉs โ chaque RR prepend son Cluster-ID | #12 (shortest wins) |
show ip bgp ne les affichera pas โ c'est normal.! Annonceur C1 envoie 192.168.10.0/24 au RR1
! โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
!
! C1 โ RR1 :
! ORIGINATOR_ID : (absent) CLUSTER_LIST : (absente)
!
! RR1 rรฉflรฉchit โ C2, C3, RR2 :
! ORIGINATOR_ID : 10.0.1.1 CLUSTER_LIST : [1.1.1.1]
! (Router-ID C1) (Cluster-ID RR1)
!
! RR2 rรฉflรฉchit โ C4, C5 :
! ORIGINATOR_ID : 10.0.1.1 CLUSTER_LIST : [2.2.2.2, 1.1.1.1]
! (inchangรฉ !) (RR2 prepend son ID)
!
! C4 reรงoit :
! ORIGINATOR_ID : 10.0.1.1 CLUSTER_LIST : [2.2.2.2, 1.1.1.1]
! longueur = 2 sauts RR
! โโ RR1 : configuration Route Reflector โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ router bgp 65000 bgp router-id 1.1.1.1 ! Cluster-ID = Router-ID par dรฉfaut โ configurer explicitement recommandรฉ bgp cluster-id 1.1.1.1 ! โโ Clients (sessions avec route-reflector-client) โโ neighbor 10.0.1.1 remote-as 65000 neighbor 10.0.1.1 update-source Loopback0 neighbor 10.0.1.1 route-reflector-client neighbor 10.0.1.2 remote-as 65000 neighbor 10.0.1.2 update-source Loopback0 neighbor 10.0.1.2 route-reflector-client neighbor 10.0.1.3 remote-as 65000 neighbor 10.0.1.3 update-source Loopback0 neighbor 10.0.1.3 route-reflector-client ! โโ Clients n'ont PAS besoin de session entre eux โโ ! C1, C2, C3 : aucune configuration iBGP inter-client nรฉcessaire
! โโ Deux RRs pour la HA โ MรME Cluster-ID obligatoire โโโโโโโโโโโโโโโโโโโ ! ! Si RR1 et RR2 ont des Cluster-IDs diffรฉrents : ! Route C1 โ RR1 โ RR2 โ C3 : CLUSTER_LIST = [2.2.2.2, 1.1.1.1] (2 IDs) ! ! Avec le MรME Cluster-ID : ! Route C1 โ RR1 โ RR2 โ C3 : CLUSTER_LIST = [10.0.0.100] (1 seul ID) ! โ CLUSTER_LIST plus courte โ meilleur au critรจre #12 ! โโ RR1 โโ router bgp 65000 bgp router-id 1.1.1.1 bgp cluster-id 10.0.0.100 ! mรชme valeur sur RR1 et RR2 neighbor 10.0.1.1 remote-as 65000 neighbor 10.0.1.1 route-reflector-client neighbor 10.0.1.2 remote-as 65000 neighbor 10.0.1.2 route-reflector-client neighbor 2.2.2.2 remote-as 65000 ! RR2 = non-client (peer iBGP normal) neighbor 2.2.2.2 update-source Loopback0 ! โโ RR2 โโ router bgp 65000 bgp router-id 2.2.2.2 bgp cluster-id 10.0.0.100 ! mรชme que RR1 โ clรฉ de la config neighbor 10.0.1.1 remote-as 65000 neighbor 10.0.1.1 route-reflector-client neighbor 10.0.1.2 remote-as 65000 neighbor 10.0.1.2 route-reflector-client neighbor 1.1.1.1 remote-as 65000 ! RR1 = non-client neighbor 1.1.1.1 update-source Loopback0
! โโ RR de niveau 1 (RR-TOP) โ ses clients sont des RRs de niveau 2 โโโโโโ router bgp 65000 bgp router-id 10.10.10.1 bgp cluster-id 10.10.10.1 ! Les RRs de niveau 2 sont clients du RR-TOP neighbor 1.1.1.1 remote-as 65000 neighbor 1.1.1.1 route-reflector-client ! RR niveau 2 โ rรฉgion Ouest neighbor 2.2.2.2 remote-as 65000 neighbor 2.2.2.2 route-reflector-client ! RR niveau 2 โ rรฉgion Est ! โโ RR de niveau 2 (RR-OUEST) โ ses clients sont les PE/PE routeurs โโโโโ router bgp 65000 bgp router-id 1.1.1.1 bgp cluster-id 1.1.1.1 ! Client = RR-TOP (non-client du point de vue de RR-OUEST) neighbor 10.10.10.1 remote-as 65000 neighbor 10.10.10.1 update-source Loopback0 ! NON route-reflector-client ! Clients PE de la rรฉgion Ouest neighbor 10.0.1.1 remote-as 65000 neighbor 10.0.1.1 route-reflector-client neighbor 10.0.1.2 remote-as 65000 neighbor 10.0.1.2 route-reflector-client
1 RR, N clients. รlimine la full-mesh mais crรฉe un SPOF. Convient aux petits AS ou pour les labs CCIE.
2 RRs (mรชme cluster-id) servent les mรชmes clients. Chaque client a 2 sessions iBGP. Haute disponibilitรฉ sans SPOF.
Pour les trรจs grands AS (opรฉrateurs). RR de niveau 1 (core) โ RR de niveau 2 (rรฉgional) โ clients PE. Chaque niveau ajoute un Cluster-ID โ pรฉnalise lรฉgรจrement le critรจre #12.
Plusieurs clusters indรฉpendants dans le mรชme AS. Chaque cluster a son propre RR. Les RRs forment une mini full-mesh entre eux (non-clients). Topologie typique des gros datacenters et providers.
Les Route Reflectors introduisent deux nouveaux critรจres dans l'algorithme BGP :
| Critรจre | Attribut | Rรจgle | Condition |
|---|---|---|---|
| #11 | ORIGINATOR_ID |
Lowest ORIGINATOR_ID wins | Remplace le critรจre Router-ID du peer quand ORIGINATOR_ID est prรฉsent |
| #12 | CLUSTER_LIST |
Shortest CLUSTER_LIST wins | Nombre de Cluster-IDs (sauts RR). Absent = longueur 0 โ prรฉfรฉrรฉ |
! โโโ Exemple : PE reรงoit deux chemins vers 10.10.10.0/24 โโโโโโโโโโโโโโโโ
!
! Chemin A โ via RR1 (1 saut) :
! Originator: 10.0.1.1 Cluster list: 1.1.1.1
! longueur = 1
!
! Chemin B โ via RR2 โ RR3 (2 sauts) :
! Originator: 10.0.1.1 Cluster list: 3.3.3.3, 2.2.2.2
! longueur = 2
!
! Critรจres #1 ร #10 : identiques
! Critรจre #11 (ORIGINATOR_ID) : 10.0.1.1 = 10.0.1.1 โ รGALITร
! Critรจre #12 (CLUSTER_LIST) : longueur 1 < longueur 2 โ Chemin A GAGNE
La Confederation (RFC 5065) est l'autre solution au problรจme full-mesh. Elle divise un AS en plusieurs sous-AS internes. ร l'intรฉrieur de chaque sous-AS, une full-mesh rรฉduite est maintenue. Entre sous-AS, un mรฉcanisme pseudo-eBGP est utilisรฉ.
| Critรจre | Route Reflector | Confederation |
|---|---|---|
| Complexitรฉ config | Faible | รlevรฉe |
| Transparence AS-PATH | AS-PATH inchangรฉ | CONFED_SEQ/SET visibles en interne |
| Policies diffรฉrentes par zone | Difficile | Naturel (sous-AS distincts) |
| Visibilitรฉ opรฉrationnelle | Simple | Plus complexe ร dรฉboguer |
| Usage en production | Dominant | Rare (opรฉrateurs historiques) |
! โโ Confederation โ configuration de base โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ ! AS public = 65000 (visible depuis l'extรฉrieur) ! Sous-AS internes = 65001 et 65002 ! โโ Routeur dans le sous-AS 65001 โโ router bgp 65001 bgp confederation identifier 65000 ! AS public bgp confederation peers 65002 ! autres sous-AS ! Sessions vers sous-AS 65002 : eBGP-like (CONFED eBGP) neighbor 10.1.2.1 remote-as 65002 ! Sessions intra sous-AS 65001 : iBGP normal (full-mesh rรฉduite) neighbor 10.1.1.2 remote-as 65001
! โโ Vรฉrifier qu'un neighbor est bien configurรฉ comme client RR โโโโโโโโโโ show ip bgp neighbors 10.0.1.1 ! โ "Route-Reflector Client" โ confirme le rรดle ! โ "Member of cluster-id: 1.1.1.1" ! โโ Voir le Cluster-ID local โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ show ip bgp summary show running-config | include cluster-id ! โโ Vรฉrifier ORIGINATOR_ID et CLUSTER_LIST sur une route โโโโโโโโโโโโโโโโ show ip bgp 192.168.10.0/24 ! Originator: 10.0.1.1, Cluster list: 2.2.2.2, 1.1.1.1 ! โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ ! ORIGINATOR_ID (critรจre #11) CLUSTER_LIST (critรจre #12) ! longueur = 2 โ 2 sauts RR ! โโ Toutes les routes avec CLUSTER_LIST (= passรฉes par un RR) โโโโโโโโโโโ show ip bgp | include Cluster ! โโ Comparer deux chemins vers un prรฉfixe โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ show ip bgp 10.10.10.0/24 ! Paths: (2 available, best #1) ! ! Path 1 (best) : ! 10.0.1.1 from 1.1.1.1 (1.1.1.1) ! Originator: 10.0.1.1, Cluster list: 1.1.1.1 โ longueur 1 ! ! Path 2 : ! 10.0.3.1 from 3.3.3.3 (3.3.3.3) ! Originator: 10.0.1.1, Cluster list: 3.3.3.3, 2.2.2.2 โ longueur 2 ! โโ Vรฉrifier si le RR rรฉflรฉchit bien une route โโโโโโโโโโโโโโโโโโโโโโโโโโ show ip bgp 192.168.10.0/24 ! "Advertised to update-groups:" โ prรฉsent = le RR annonce bien la route ! Si absent โ route non rรฉflรฉchie = vรฉrifier la config RR ou l'anti-boucle ! โโ Debug (production avec prรฉcaution) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ debug ip bgp 10.0.1.1 updates ! updates envoyรฉs/reรงus vers ce peer
| Piรจge | Symptรดme | Fix |
|---|---|---|
| RRs redondants avec Cluster-IDs diffรฉrents | CLUSTER_LIST grossit de 2 entrรฉes par passage (au lieu de 1) โ critรจre #12 dรฉfavorisรฉ | bgp cluster-id identique sur les deux RRs |
| Route non rรฉflรฉchie entre non-clients | Deux RRs ne s'รฉchangent pas les routes de leurs clients respectifs | Session iBGP directe (non-client โ non-client) entre les RRs |
| next-hop non rรฉsolu chez le client | Route prรฉsente dans la table BGP mais pas installรฉe dans la RIB | neighbor X.X.X.X next-hop-self sur le RR, ou IGP qui connaรฎt le next-hop eBGP |
| Critรจre #11/#12 ignorรฉ | En full-mesh iBGP sans RR, ces critรจres ne s'appliquent jamais | Normal โ ORIGINATOR_ID et CLUSTER_LIST inexistants sans RR |
| CLUSTER_LIST visible cรดtรฉ eBGP | Attribut absent dans show ip bgp sur un peer eBGP |
Normal โ Non-Transitive, stripped avant envoi eBGP |