Tutoriel BGP : Dépanner le protocole de routage qui fait fonctionner Internet (2/2)
Border Gateway Protocol (BGP) est le protocole de routage complexe qui est au coeur du fonctionnement d'Internet. Ce tutoriel en deux parties vous explique tout d'abord les bases de BGP, puis vous propose plusieurs options de dépannage en cas de problème.
Cet article est la seconde partie d’un tutoriel en deux étapes sur BGP. Pour lire la première partie de ce document (Tutoriel BGP : Comprendre le protocole de routage qui fait fonctionner Internet), cliquez ici.
Avant de vous lancer dans le dépannage de BGP, vous devez identifier la source du problème de connectivité que vous êtes en train de déboguer. En général, vous pensez que BGP pourrait être impliqué si un de vos clients signale une connectivité Internet limitée ou inexistante. La première étape est d’effectuer un traceroute à partir d'un poste de travail sur le réseau local (LAN) problématique. Si la trace atteint le premier routeur parlant BGP - ou, mieux encore, si elle dépasse les limites de votre réseau - vous êtes probablement confronté à un problème BGP. Sinon, vérifiez si le routeur parlant BGP annonce un itinéraire par défaut dans votre réseau - sans itinéraire par défaut, les autres routeurs de votre réseau ne peuvent pas atteindre les destinations Internet.
Si vous n'avez pas accès à un poste de travail connecté au LAN, vous pouvez exécuter le traceroute à partir du routeur local, mais vous devez vous assurer que l'adresse IP source utilisée dans les paquets traceroute est l'adresse LAN du routeur.
Dépannage des problèmes de routeur BGP adjacents
BGP doit établir une session TCP entre les routeurs BGP adjacents avant qu'ils puissent échanger des routes. La première vérification à réaliser est donc de contrôler l'état des sessions BGP entre les routeurs.
Les voisins BGP sont configurés manuellement, et les deux erreurs de configuration les plus probables sont:
- Incohérence d'adresse IP entre voisins : L'adresse IP de destination configurée sur un voisin BGP doit correspondre à l'adresse IP source - ou à l'adresse IP de l'interface directement connectée - configurée sur l'autre routeur.
- Incohérence des numéros d’AS : Le numéro d’AS voisin configuré d'un côté de la session BGP doit correspondre au numéro d’AS BGP réel utilisé par le voisin.
Il est également possible qu’il y ait un problème avec les filtres de paquets déployés sur le routeur BGP. Ces filtres doivent autoriser les paquets vers et à partir du port TCP 179.
Dépannage de la propagation de routes BGP
Si vos utilisateurs souhaitent recevoir du trafic d'Internet, le préfixe IP attribué à votre réseau doit être visible sur Internet. Pour y arriver, trois étapes sont nécessaires:
- Votre routeur BGP doit insérer votre préfixe IP dans sa table BGP.
- Le préfixe IP doit être annoncé à ses voisins BGP.
- Le préfixe IP doit être propagé sur Internet.
La route est-elle insérée dans BGP? La plupart des protocoles de routage insèrent automatiquement des sous-réseaux IP directement connectés dans leurs tables ou bases de données de routage. En raison des exigences de sécurité, BGP est une exception. Il ne créera un préfixe IP que s'il est configuré manuellement pour le faire. Par exemple, les routeurs Cisco utilisent l'instruction network pour configurer les préfixes IP annoncés. Une autre option est la redistribution des routes, qui est fortement déconseillée dans l'environnement Internet.
Pour éviter d'attirer un trafic non routable, BGP annoncera un préfixe IP configuré uniquement s'il existe une route correspondante dans la table de routage IP. Vous pouvez générer la route IP correspondante en agrégant les routes (« route summarization »), mais il est généralement préférable de configurer une route statique pointant vers une interface nulle - ou son équivalent.
Pour vérifier si votre préfixe IP figure dans votre table de routage BGP, utilisez une commande BGP show - par exemple, show ip bgp prefix mask -, dans la CLI d’un routeur Cisco.
L'itinéraire est-il annoncé à vos voisins? Par défaut, tous les préfixes IP résidant dans la table BGP sont annoncés à tous les voisins BGP. En raison des exigences des politiques de sécurité et de routage, le comportement par défaut est généralement modifié avec un ensemble de filtres de sortie et d'entrée. Si vous avez appliqué des filtres de sortie à vos voisins BGP, vous devez vérifier si ces filtres permettent à votre préfixe IP d'être propagé aux voisins BGP externes. La commande permettant d'afficher les routes annoncées à un voisin BGP sur un routeur Cisco est: show ip bgp neighbor ip-address advertised.
L'itinéraire est-il visible sur Internet? Même si vous avez annoncé avec succès votre préfixe IP à vos voisins BGP, il se peut qu'il ne soit toujours pas diffusé sur Internet. Il est difficile de comprendre exactement ce qui se propage au-delà des limites de votre réseau. Les outils qui peuvent vous aider sont appelés BGP looking glasses (littéralement lunettes de vue BGP). À l'aide de ces outils, vous pouvez inspecter les tables BGP à différents points de l'Internet et vérifier si votre préfixe IP a atteint ces destinations.
Quelques facteurs pourraient entraîner le blocage de votre préfixe IP à un point donné de l’Internet. Le plus courant est ce que l’on appelle BGP route flap dampening (atténuation des fluctuations de routes BPG) : si un préfixe IP apparaît ou disparait à un rythme fréquent sur une courte période - par exemple, si vous effacez vos sessions BGP ou modifiez votre configuration BGP - le préfixe peut être bloqué pendant une période prolongée (par défaut, jusqu'à une heure). Si cela se produit, vous ne pouvez rien faire d'autre que d'attendre.
Vous pouvez également avoir une entrée non valide ou manquante dans les registres de routage IP, ou il pourrait y avoir des filtres entrants chez l'un des FAI en amont. Dans tous ces cas, il est préférable que votre FAI en amont puisse vous aider à résoudre le problème - ce qui, à ce stade, dépasse la portée du dépannage technique de BGP.
Dépannage BGP avancé
Dans la section précédente de ce guide, nous avons abordé certaines techniques de dépannage de base de BGP :
- Comment identifier si un problème de routage est un problème BGP;
- Comment dépanner des sessions BGP; et
- Comment dépanner l'origine et la propagation des routes IP.
Maintenant, concentrons-nous sur un scénario plus avancé: les réseaux ISP de transit (voir schéma ci-dessous).
Pour établir une connectivité de bout en bout à l’échelle d’un réseau de fournisseurs de services, le FAI doit recevoir les préfixes IP des clients via BGP et les annoncer aux autres FAI. Le même processus doit se faire dans le sens inverse - ou, au moins, l'itinéraire par défaut doit être annoncé au client. Le dépannage BGP à l'échelle du réseau implique donc trois étapes:
- Recevoir le préfixe IP;
- Propager le préfixe IP sur notre réseau; et
- Envoi du préfixe IP aux voisins BGP externes à l'autre extrémité du réseau.
Avons-nous reçu le préfixe? Le dépannage des problèmes BGP entrants est la partie la plus difficile du dépannage BGP. Les deux raisons expliquant qu’un préfixe IP ne figure pas dans votre table BGP comme vous le souhaitez sont les suivantes :
- Le voisin n'envoie pas le préfixe.
- Vos filtres entrants bloquent le préfixe.
Le seul outil qui peut vous aider à identifier le problème est la fonction de débogage sur votre routeur périphérique - car vous n'avez normalement pas accès à l'autre voisin BGP. Lorsque vous effectuez un débogage BGP, sachez qu'un voisin BGP peut vous envoyer plusieurs centaines de milliers de routes, vous devez donc vous assurer que la sortie de débogage produite par la session de dépannage ne submerge pas le routeur. De plus, les préfixes BGP ne sont envoyés qu’en cas de modification et non périodiquement, comme c’est le cas lors de mises à jour RIP ou d’inondations LSA OSPF. Votre outil de débogage ne vous montrera donc pas un préfixe IP tant qu'il n'aura pas été modifié, ou vous aurez effacé la session BGP avec votre voisin.
Certains routeurs BGP ont la possibilité de stocker une copie séparée de toutes les routes envoyées par un voisin dans une table BGP parallèle. Pour activer cette fonctionnalité sur Cisco IOS, vous devez configurer la reconfiguration logicielle pour un voisin BGP (via la commande neighbor x.y.z.t soft-reconfiguration inbound.
Avec la table parallèle par voisin, vous pouvez identifier exactement ce que le voisin vous a envoyé (le contenu de la table parallèle) et les routes qui ont passé vos filtres d'entrée (le contenu de la table principale BGP). Mais, il convient d’utiliser cette fonction avec prudence : la table parallèle par voisin consomme en effet une grande quantité de mémoire.
Le préfixe IP est-il propagé sur notre réseau? Même lorsqu'un routeur de bordure reçoit un préfixe IP via BGP, il est possible qu’il ne soit pas propagé à l'autre extrémité de votre réseau. Pour commencer, l’utilisation du routage BGP interne - BGP au sein d’un unique système autonome - nécessite un maillage complet de sessions BGP entre tous les routeurs BGP. Comme chaque routeur situé entre chaque paire de routeurs de périphérie doit exécuter BGP - sinon, le trafic pourrait être supprimé dans votre réseau - le nombre de sessions BGP pourrait devenir excessivement grand. Le diagramme suivant illustre les sessions BGP nécessaires dans un petit réseau à quatre routeurs.
Deux outils - les réflecteurs d'itinéraire BGP et les confédérations BGP - peuvent vous aider à maintenir le nombre de sessions BGP à un niveau raisonnable, les réflecteurs d'itinéraire BGP étant les plus utilisés.
Les règles de réflecteur de route BGP sont assez simples:
- Tout ce qui est reçu d'un client réflecteur de route ou d'un pair BGP externe sera envoyé à tous les autres pairs BGP.
- Tout ce qui est reçu d'un routeur qui n'est pas un client réflecteur de route sera envoyé uniquement aux clients et aux pairs BGP externes.
Avec ces règles en main, vous devez parcourir le graphe des sessions BGP de votre réseau, vérifier chaque routeur BGP sur le chemin et vous assurer que les règles de réflecteur de route ne sont pas violées - et en utilisant les règles, les préfixes BGP passent de chaque routeur périphérique à tous les autres routeurs.
Une autre raison courante pour laquelle un préfixe IP n'est pas propagé sur votre réseau est que les sous-réseaux externes sur le bord de votre réseau ne sont pas annoncés à vos routeurs de cœur de réseau.
L'adresse IP du routeur suivant sur le chemin n'est pas modifiée lorsqu'un préfixe IP est envoyé à un voisin BGP interne. Le « next-hop » IP d'une route externe est donc toujours l'adresse IP d'un routeur à un saut au-delà de la bordure de votre système autonome. Les sous-réseaux IP connectant vos routeurs de bordure à leurs voisins externes doivent donc être insérés dans votre protocole de routage interne - par exemple, OSPF ou IS-IS - sinon, un routeur BGP interne décidera que le prochain saut BGP n'est pas accessible et ignorera le préfixe IP. Il apparaîtra dans la table BGP, mais ne sera pas utilisé ou propagé à d'autres pairs BGP.
Le préfixe est-il envoyé aux voisins externes? la dernière étape de la résolution de la propagation d'une route BGP est de vérifier si les préfixes IP transportés sur votre réseau sont annoncés à vos homologues BGP externes.
Le trafic traverse-t-il le réseau? Même si votre propagation de route BGP fonctionne parfaitement, les paquets IP peuvent ne pas être en mesure de traverser votre réseau. Rappelez-vous, nous parlons ici de réseaux 100 % IP; les choses changent un peu si vous ajoutez MPLS au mélange. La cause la plus fréquente d'un trou noir au sein de votre réseau est un routeur dans le chemin de transit qui n'exécute pas BGP et par conséquent n'a aucune idée de comment acheminer le paquet IP reçu vers le réseau de destination.
Le routage IP fonctionne par saut. Même si le routeur de périphérie d'entrée sait exactement quel routeur de périphérie de sortie utiliser et comment s'y rendre, il ne peut pas transmettre cette information aux routeurs intermédiaires. Tous doivent donc également exécuter BGP.
Pour identifier un trou noir dans votre réseau, effectuez un traceroute depuis le réseau de votre client vers une destination sur Internet. Le dernier routeur répondant au traceroute est un bond avant le trou noir.
Même si tous les routeurs centraux de votre réseau doivent exécuter BGP, les sessions BGP internes n'ont pas à suivre la structure physique du réseau. Par exemple, vous pouvez avoir quelques routeurs centraux faisant office de réflecteurs de route BGP pour tous les routeurs BGP de votre réseau.