I - Architecture traditionnelle Core, Aggregation, Access
10. Qu'est-ce que BGP ?
BGP pour Border Gateway Protocol est un protocole de routage dynamique successeur du protocole EGP pour Exterior Gateway Protocol en raison des limitations de EGP quant à la gestion des boucles réseaux. La première version de BGP a été définie dans la RFC-1105 en 1989, qui a été déclinée en plusieurs versions jusqu’à la version actuelle BGPv4 définie pour la première fois en 1994 avec la RFC- 1654 (réactualisée en 1995 avec la RFC-1771 et en 2006 avec la RFC-4271).
La version actuelle de BGP intègre la gestion du CIDR (Classless Inter-Domain Routing) afin de permettre une gestion efficiente de l’agrégation des routes. A l'inverse des autres protocoles de routage dynamique (OSPF, EIGRP et IS-IS), BGP est conçu pour gérer le routage à travers plusieurs systèmes autonomes (AS). Il est également capable de prendre en charge des tables de routage avec plusieurs milliers de routes. Cela en fait un protocole de routage très utilisé par les fournisseurs d’accès internet et les fournisseurs de Cloud.
BGP est décomposé en deux branches iBGP (Interior BGP) et eBGP (Exterior BGP) ; iBGP est utilisé pour le routage au sein d’un même AS tandis que eBGP est utilisé pour le routage inter-AS. Plus concrètement, prenons l’exemple des opérateurs A et B disposant chacun de leur AS, le protocole utilisé sera eBGP pour communiquer de l’opérateur A à B ; à l’inverse pour communiquer entre deux routeurs du même opérateur, le protocole utilisé sera iBGP. Il est à noter que les routes iBGP ne sont pas redirigées vers d’autres routeurs iBGP, afin de ne pas créer de boucles réseaux. Pour ce qui est des routes eBGP, elles peuvent être aussi bien redirigées vers d’autres routeurs eBGP ou iBGP.
Pour rentrer un peu plus dans le détail, vous pouvez retenir les informations dans le tableau ci-dessous :
| Protocoles | Distance Administrative (AD) par défaut | TTL par défaut |
|---|---|---|
| iBGP | 200 | 255 |
| eBGP | 20 | 1 |
Pour fonctionner, BGP doit établir des relations de voisinage appelées paires , ces paires doivent être configurées manuellement. Une fois que les paires sont configurées sur les deux routeurs, la relation de voisinage est établie via des messages OPEN avec une connexion TCP sur le port 179. La connexion est ensuite maintenue active via le message KEEPALIVE . Les tables de routage sont échangées et mises à jour avec le message UPDATE . Le message NOTIFICATION est réservé pour les fins de session entre paires en cas d’erreur ou de reconfiguration. Rentrons plus en profondeur dans les paquets BGP :
Le paquet OPEN est composé des éléments suivants :
Le paquet KEEPALIVE est composé des éléments suivants :
Le paquet UPDATE est composé des éléments suivants :
Le paquet NOTIFICATION est composé des éléments suivants :
Les routeurs BGP vont durant leur configuration passer par les 6 états suivants :
1. Idle : Dans cet état, le routeur est en cours de configuration et d’initialisation du timer ConnectRetry . Il n’a pas encore établi de connexion avec une paire. Cependant, il écoute et envoie activement des paquets pour établir une connexion. Dès réception d’un paquet, le routeur BGP passera en état Connect .
2. Connect : Dans cet état, le routeur parvient à un échange de paquets et attend que la connexion TCP soit complétement établie. En cas de succès, le routeur BGP passe en état OpenSent , dans le cas d’un échec le routeur BGP passe en état Active . L’expiration du timer ConnectRetry relancera une tentative de connexion TCP.
3. Active : Dans cet état, le routeur BGP va tenter une nouvelle fois d’établir une connexion TCP. En cas de succès, le routeur BGP passe en état OpenSent , dans le cas d’un échec ou d’expiration du timer ConnectRetry il retournera à l’état Connect . A noter qu’une réinitialisation manuelle du protocole renvoie à l’état Idle .
4. OpenSent : Dans cet état, le routeur BGP attend la réception du message OPEN du routeur voisin. Une fois le message reçu, il vérifie la cohérence de configuration, en cas d’incohérence ou de réinitialisation manuelle, il renvoie un message NOTIFICATION et retourne à l’état Idle . Dans le cas d’erreur de session TCP, il renvoie un message NOTIFICATION et retourne à l’état “Active”. Si aucune erreur de configuration ou de session TCP n’est détectée, l’échange des messages KEEPALIVE commence et le routeur BGP entre en état OpenConfirm .
5. OpenConfirm : Dans cet état, le routeur BGP attend la réponse KEEPALIVE de son voisin, une fois le message reçu le routeur BGP passera en état Established . Si un message NOTIFICATION est reçu le routeur retourne en état Idle . De même que si le message KEEPALIVE n’arrive pas dans le temps imparti par le timer, le routeur retournera dans l’état Idle .
6. Established : Dans cet état, le routeur BGP est maintenant prêt à échanger ses routes avec son voisin. L’échange périodique de messages KEEPALIVE permet de maintenir la connexion, en cas d’absence de message dans le temps imparti (90 secondes), le routeur retournera dans l’état Idle .
BGP est un protocole dit à vecteur de chemin c’est-à-dire qu’il transmet des informations détaillées en vue de choisir la meilleure route à emprunter pour atteindre une destination. Dans cet objectif, il s’appuie sur 10 attributs pour déterminer la route qui sera préférée. Les attributs sont traités dans l’ordre et de la manière suivante :
1. Weight : Propriétaire sur les équipements CISCO, est défini de manière locale sur le routeur, l’influence de cet attribut est uniquement locale. Plus le Weight est élevé, plus la route sera préférée.
2. Local Preference : Elle est définie au niveau de l’AS pour influencer la sélection de la route, plus elle est élevée plus la route sera prioritaire.
3. Self Orginated : Les routes originaires du même routeur seront préférées.
4. AS Path : A chaque AS traversé par une route, le chemin AS Path est incrémenté, plus le AS Path est court, plus la route est préférée.
5. Origine : Les routes annoncées par iBGP sont privilégiées par rapport à celles annoncées par eBGP.
6. Multi-Exit Discriminator : Permet de sélectionner une priorité quand il y a plusieurs chemins vers une même AS, la MED la plus faible sera préférée.
7. External : Les routes priorisées sont celles qui disposent d’un chemin externe par rapport à un chemin interne. Cela permet une optimisation de performance, mais également de limiter le risque de boucles réseaux.
8. IGP Cost : La distance la plus petite vers le prochain saut, calculée par le protocole de routage interne (OSPF, IS-IS etc....) sera toujours préférée.
9. eBGP peering : En raison de sa large zone d’impact, BGP est conçu pour préférer la stabilité. C’est pour cette raison que la route la plus ancienne sera prioritaire.
10. Routeur ID : Le dernier attribut que BGP utilisera pour trancher entre deux possibilités de route est RID, la plus petite valeur sera préférée.
Ce processus de sélection complexe, les interactions à très grande échelle, ainsi que le besoin de stabilité font que BGP est le protocole de routage qui a la vitesse de convergence la plus lente.
Une fois configuré, BGP va maintenir à jour trois tables indispensables à son fonctionnement à savoir :
La table de voisinage qui contient chacune des paires avec leurs informations : état de la connexion, adresse IP, le numéro d’AS, la version du protocole, le nombre de messages envoyés et reçus, etc...
La table BGP est constituée de toutes les routes possibles transmises par les paires, les routes sont accompagnées de leurs attributs (MED, LocPrf, WeiGGHT, AS_PATH etc.…). C’est à partir de cette table que le routeur va choisir les meilleures routes qui seront utilisées en fonction de leurs attributs.
La table routage IP n’est pas uniquement utilisée par BGP, mais aussi par les autres protocoles de routage, elle contient donc toutes les routes utilisées par le routeur. Elle est mise à jour avec les meilleures routes contenues dans la table BGP, pour chacune des destinations.
Nous avons détaillé l’utilisation et le fonctionnement de BGP mais il reste un point crucial à aborder, sa sécurisation. En effet, BGP étant le protocole de routage le plus utilisé à l’échelle d’internet, son exposition est maximale et son bon fonctionnement est critique. Les grandes menaces sont l’usurpation de route (ou Hijcaking), le spoofing et l’injection de routes malveillantes. Il existe aujourd’hui trois grandes manières de sécuriser l’utilisation de BGP, le BGPsec, le RPIK et l’authentification.
BGPsec repose sur l’utilisation d’une infrastructure de clés publiques et privées, dans l’objectif de permettre à chacun des AS traversés d’ajouter une signature numérique. Cela offre donc la possibilité de vérifier l’authenticité de bout en bout du chemin, mais aussi d’empêcher toute injection et/ou modification de routes non autorisées durant le transit. Cette solution de sécurité est extrêmement lourde à mettre en oeuvre du fait que tous les AS traversés doivent être compatibles.
RPIK pour Ressource Public Key Infrastructure , s’appuie sur des clés publiques qui mettent en relation des blocs d’IP publiques et les AS autorisés à leur utilisation. Quand une route est réceptionnée par un autre AS, elle est donc en mesure de contrôler via le préfixe IP que l’annonce est légitime. Cette sécurité permet de limiter grandement l’usurpation de routes. La complexité de mise en place est due à des problèmes de comptabilité pour la prise en charge des certificats et le niveau de gestion et de coordination des registres de blocs IP.
BGPsec et RPIK combinés représentent une véritable couche de sécurité renforcée qui, bien qu’applicable sur iBGP, ne présente pas le plus grand intérêt, sa mise en oeuvre sera le plus souvent réservée à eBGP.
La sécurisation de iBGP, bien que fortement conseillée, est souvent moins répandue. L’authentification des paires BGP par mot de passe, MD5 (obsolète aujourd'hui) et SHA256 est le minimum requis.
Maintenant que BGP n’a plus aucun secret pour vous, nous allons voir comment nous pouvons l’intégrer dans notre architecture à trois niveaux. Dans le cadre d’infrastructures de très grande taille, iBGP peut être utilisé pour interconnecter la couche Core et la couche Aggregration , tout comme d’autres IGP (IS-IS, EIGRP, OSPF) pourraient être utilisés. Pour eBGP, il sera exclusivement utilisé sur la couche Core , afin d’effectuer la connexion avec l’AS de notre opérateur ou d’autres partenaires. Mais il pourrait également être utilisé dans le cadre d’une redondance de lien WAN avec plusieurs opérateurs pour l’optimisation des flux et de la disponibilité.
Dans l’infrastructure que nous allons mettre en place dans ce cours, nous utiliserons BGP pour la connexion avec l’opérateur.