Chapter 69. Le routage dynamique avec BGP

Revision History
Revision $Revision: 1.5 $$Date: 2005/08/03 09:29:16 $

Table of Contents

Introduction
Les grands principes
Place à la pratique
Cohabitation entre BGP et les IGP
Conclusion

Abstract

Initiation au routage BGP

Introduction

Internet relie des réseaux appartenant à des acteurs (entreprises, administrations, opérateurs de télécommunication, fournisseurs d'accès...) très différents. Il est peu probable qu'un consensus se dégage naturellement autour d'un même algorithme de routage dynamique et d'une même métrique. Ajoutons que des accords sont passés entre ces acteurs afin d'acheminer le trafic dans l'Internet et que celui-ci franchit des frontières, ce qui impose de respecter les réglementations locales. Le protocole BGP (Border Gateway Protocol) a été conçu pour répondre à ces problèmes. Comme toujours, nous allons aborder brièvement son fonctionnement avant de passer à une mise en pratique avec Zebra.

Les grands principes

BGP achemine les informations de routage entre les réseaux reliés à Internet.

Le concept de système autonome

Au sein d'une même organisation, les décisions concernant la topologie ou la politique de routage sont, en général, prises par une autorité unique. Par conséquent, le routage à l'intérieur de l'organisation est basé sur la confiance et un protocole de type IGP comme OSPF est mis en oeuvre. Un réseau fonctionnant sous une autorité unique est appelé un système autonome (AS). En pratique, un AS regroupe un ou plusieurs réseaux et un ou plusieurs routeurs ainsi que le montre l'exemple de la figure 1 :

Figure 69.1. Un système autonome constitué de réseaux

Un système autonome constitué de réseaux

Les AS sont identifiés par un numéro sur 16 bits unique attribué par les mêmes organismes qui affectent les adresses IP. Il existe une plage de numéros d'AS privés de 64 512 à 65 535 pour ceux qui ne possèdent pas de numéro d'AS public.

A l'intérieur de votre AS, vous pouvez bien faire ce que vous voulez. Vous préférez tel protocole de routage ? Vous estimez que telle métrique est plus pertinente ? Tant mieux, cela ne regarde que vous. La seule contrainte, c'est que vous devrez désigner un ou plusieurs routeurs, à la frontière de votre AS, pour propager les informations d'accessibilité de vos réseaux et collecter les informations d'accessibilité des autres ASBR.

Par exemple, si l'on reprend la topologie présentée dans la séquence sur OSPF, que l'on en fait un AS, on obtiendrait :

Figure 69.2. Un AS découpé en zones OSPF

Un AS découpé en zones OSPF

Ce système autonome utilise OSPF en tant qu'IGP. Il est découpé en trois zones. R4 est le routeur de bordure de zone. Celui-ci doit fonctionner sous BGP.

Les politiques de routage

Internet est un maillage de réseaux. Cela signifie que plusieurs chemins existent entre deux réseaux d'extrémité (figure 3). Mais ceux-ci ne sont pas tous équivalents.

Figure 69.3. Réseaux d'AS

Réseaux d'AS

En effet, imaginez vos datagrammes circulant dans cette jungle cruelle et barbare qu'est Internet. Vous préfèrerez peut être qu'ils transitent par tel AS, car l'administrateur est un pote ou que vous avez négocié un tarif avantageux. Vous refuserez peut-être qu'ils transitent par tel AS car vos flux sont incompatibles avec la législation en vigueur dans le pays ou pour toute autre considération politique, économique ou de sécurité que l'on peut imaginer. Dans ce cas, vous aurez besoin de définir une politique de routage sur Internet. BGP vous rendra ce service.

Dans le réseau, l'administrateur de l'AS 600 définit une politique de routage. Il veut joindre l'AS 200 en passant par les AS 300 et 100.

Les informations de routage échangées par BGP

Une des particularités de BGP-IV (RFC 1771) est qu'il s'appuie sur la couche TCP (port 179), ce qui permet de s'affranchir de la nécessité de supporter les fonctions de fragmentation, de retransmission, d'acquittement et de séquencement.

Deux routeurs BGP s'échangent des messages pour ouvrir et maintenir la connexion. Le premier flot de données est la table entière de routage. Ensuite, des mises à jours incrémentielles sont envoyées lorsque la table de routage change : BGP ne nécessite pas de mises à jour périodiques des tables de routage. Par contre, un routeur BGP doit retenir la totalité des tables de routage courantes de tous ses pairs durant le temps de la connexion. Des messages « keepalive » sont envoyés périodiquement pour maintenir la connexion.

BGP est un protocole de type " Path Vector ". Les routeurs s'échangent des informations du type :

Adresse IP du réseau de destinationAdresse IP du prochain routeur (next hop)Liste des AS traversés pour atteindre le réseau

On constate qu'avec BGP, la granularité du routage est l'AS. Par défaut, lorsque plusieurs route existent entre deux AS, BGP choisit la route qui traverse le moins d'AS.

Quand utiliser BGP ?

Ce protocole est généralement utilisé par les fournisseurs d'accès à Internet, les administrateurs des points d'échange (IXP) et les administrateurs de systèmes autonomes qui souhaitent mettre en oeuvre leur propre politique de routage.

Place à la pratique

Voyons sur quelle topologie nous allons travailler :

Figure 69.4. Topologie

Topologie

Nous avons trois systèmes autonomes numérotés 10, 20 et 30. Dans un souci de simplification, chaque système autonome a une topologie relativement simple. De ce fait, aucun IGP n'est utilisé. On constate que chaque routeur est un ASBR. L'AS 20 a une particularité car pour les AS 10 et 30, c'est un AS de transit. Nous reviendrons sur ce point dans la mise en oeuvre.  

Tâches de configuration

Sur chaque routeur, il faudra réaliser les tâches suivantes :

0. préparer des fichiers /etc/zebra/zebra.conf et /etc/zebra/bgpd.conf rudimentaires, ne comportant que le nom de l'hôte et le mot de passe pour accéder à la console d'administration. Ensuite, dans le shell Linux, il faut lancer les démons zebra et bgpd dans l'ordre ;

  1. activer le processus de routage BGP en indiquant dans quel AS de situe le routeur (commande router bgp <numero_AS>) ;

  2. spécifier les routes à annoncer via BGP (commande network <préfixe_IP_du_réseau>/<masque>) ;

  3. établir une relation avec les routeurs voisins (commande neighbor <IP_du_voisin> remote-as <AS_du_voisin>).

Situation de départ

Vous devez créer des fichiers de configuration pour zebra (/etc/zebra/zebra.conf) et bgpd (/etc/zebra/bgpd.conf) rudimentaires sur chaque routeur. Par exemple, pour R1 :

- fichier zebra.conf :

hostname R1(ZEBRA) 
password foo

- fichier bgpd.conf :

hostname R1(BGP) password foo

Vous devez ensuite démarrer (ou redémarrer), les deux démons zebra et bgpd sur chaque routeur. Enfin, sur vous entrez dans le terminal d'administration de bgpd via le port telnet 2605. Par exemple, sur R1 :

Linux# telnet localhost 2605 Hello, this is zebra (version 0.91a). Copyright 1996-2001 Kunihiro Ishiguro. User Access Verification Password: R1(BGP)> enable R1(BGP)#

Si vous avez envie de suivre précisément les échanges de messages entre routeurs, Zebra propose un mécanisme de débogage grâce à la commande debug. Supposons que nous voulions garder une trace de toutes les mises à jour d'informations de routage BGP émises et reçues par R1 :

R1(BGP)# conf t
R1(BGP)(config)# log file /var/log/zebra/bgpd.log
R1(BGP)(config)# debug bgp  updates

Il faut s'assurer que le répertoire /var/log/zebra existe.

Activation du processus de routage

Dans le mode « config », nous allons activer le processus BGP en n'oubliant pas d'indiquer le numéro d'AS. Par exemple, sur R1 :

R1(BGP)(config)# router bgp 10
R1(BGP)(config-router)# 

Spécification des routes à annoncer

Pour R1, le seul réseau que l'on souhaite annoncer via BGP aux autres routeurs est 191.10.0.0/24 car il contient des ordinateurs :

R1(BGP)(config-router)# network 191.10.0.0/24

Cette commande est à renouveler autant de fois qu'il y a de réseaux à annoncer. Dans notre exemple, nous avons choisi volontairement de ne pas annoncer le réseau 10.0.0.0/8 car celui-ci ne contient que des routeurs. Vous noterez au passage que cette commande n'a pas la même vocation que dans RIP ou OSPF.

Etablissement d'une connexion avec les voisins

Il faut distinguer deux cas : mon voisin est-il dans un autre AS ou dans le même AS que moi ?

1. Cas où le voisin est dans un autre AS :

Je rappelle que "un voisin" est un routeur avec lequel on est immédiatement connecté. Il faut indiquer son adresse IP ainsi que son numéro d'AS. Dans le jargon BGP, une connexion entre deux routeurs BGP s'appelle peering. Sur R1, on saisit la commande :

R1(BGP)(config-router)# neighbor 10.0.0.2 remote-as 20

Cette commande est à renouveler autant de fois qu'il y a de routeurs BGP immédiatement connectés (et avec qui on souhaite échanger des informations de routage bien sûr).

2. Cas où le voisin est dans le même AS :

L'AS 20 est particulier car il véhicule des données qui ne lui sont pas destinées, en particulier les informations de routage en provenance et à destination des AS 10 et 30. En effet, pour que l'AS 30 connaisse l'existence du réseau 191.10.0.0/24, R2 doit récupérer cette information auprès de R1 puis la transmettre à R3 qui lui-même la transmettra à R4. R2 et R3 étant dans le même AS, un "sous-protocole" de BGP appelé iBGP est mis en oeuvre automatiquement par le routeur. Mais, celui-ci a la particularité de ne pas modifier les next hop lorsqu'il relaie des informations de routage. Ainsi, sans intervention, R4 apprendrait que le next hop pour joindre 192.10.0.0/24 est 10.0.0.1. Or, celui-ci n'est pas joignable depuis l'AS 30 (puisque nous ne faisons pas de network 10.0.0.0/8). Pour pallier à cette lacune, il existe la directive next-hop-self. Ainsi sur R2 et sur R3 nous réaliserons les configurations suivantes :

R2(BGP)(config-router)# neighbor 20.0.0.2 remote-as 20
R2(BGP)(config-router)# neighbor 20.0.0.2 next-hop-self
R3(BGP)(config-router)# neighbor 20.0.0.1 remote-as 20
R3(BGP)(config-router)# neighbor 20.0.0.1 next-hop-self

Affichage de la configuration

Affichons la configuration complète de R1 :

R1(BGP)(config-router)# end
R1(BGP)# show running-config
Current configuration:
!
hostname R1(BGP)
password foo
log file /var/log/zebra/bgpd.log
!
debug bgp updates
!
router bgp 10
network 191.10.0.0/24
neighbor 10.0.0.2 remote-as 20 
!
line vty
!
end

Affichons la configuration complète de R2 :

R2(BGP)# show running-config
Current configuration:
!
hostname R2(BGP)
password foo
!
router bgp 20
network  192.20.0.0/24
neighbor 10.0.0.1 remote-as 10
neighbor 20.0.0.2 remote-as 20
neighbor 20.0.0.2 next-hop-self
!
line vty
!
end

J'espère que vous avez la même configuration. Si une commande est incorrecte, vous devez faire comme si vous vouliez la saisir à nouveau mais en la faisant précéder de no.

Pour enregistrer la configuration, je vous rappelle que l'on saisit :

R1(OSPF)# copy running-config startup-config

Par symétrie, vous devez être en mesure de configurer les autres routeurs du réseau.

Affichage de l'état des routeurs

Le débogage

Si vous avez activé le débogage, le fichier de log doit vous révéler des informations de ce style :

R1 # cat /var/log/bgpd.log

2003/05/24 03:29:03 
   BGP: BGPd 0.91a starting: vty@2605, bgp@179
2003/05/24 03:29:09 
   BGP: 10.0.0.2 send UPDATE 191.10.0.0/24 nexthop 10.0.0.1, 
   origin i,  mp_nexthop ::, path
2003/05/24 03:29:09 
   BGP: 10.0.0.2 rcvd UPDATE w/  attr: nexthop 10.0.0.2, 
   origin i, path 
202003/05/24 03:29:09 
   BGP: 10.0.0.2 rcvd 192.20.0.0/24...

On voit les annonces de routes émises (send UPDATE) et reçues (recv UPDATE) par R1. Si votre routage ne fonctionne pas, vous trouverez dans les journaux toutes les informations nécessaires à la résolution de problèmes.

La table de routage

Observons, par exemple, la table BGP calculée par R2 : 

R2(BGP)# show ip bgp
BGP table version is 0, local router ID is 192.20.0.254
Status codes: 
    s suppressed, d damped, h history, * valid, > best, i - internal
    Origin codes: i - IGP, e -  EGP, ? - incomplete
 NetworkNext HopMetricLocPrfWeightPath
*>191.10.0.0/2410.0.0.1  010 i
*>192.20.0.00.0.0.0  32768i
*>i193.20.0.020.0.0.2 1000i
*>i194.30.0.020.0.0.2 100030 i
Total number of prefixes 4

La première colonne indique si la route est valide (*), si BGP considère que c'est la meilleure (>) et si elle provient d'un routeur interne (i pour internal) à l'AS. Les paramètres Metric, LocPrf (Local Preference) et Weight sont utilisés par BGP pour lire la meilleure route vers une destination. BGP applique l'algorithme (simplifié) suivant :

  1. BGP choisit la route avec le plus grand poids (weight). Par défaut, une route directement connectée se voit attribuer le poids 32768 ;

  2. Si une route n'est toujours pas choisie, BGP choisit celle avec la plus grande "préférence locale". Par défaut, une route issue d'un routeur interne à l'AS se voit attribuer une préférence locale de 100 ;

  3. Si une route n'est toujours pas choisie, BGP choisit une route de type "internal" ;

  4. Si une route n'est toujours pas choisie, BGP retiens la route avec le chemin (As-Path) le plus court ;

  5. Si une route n'est toujours pas choisie, BGP choisit la route avec la métrique la plus faible.

La colonne Path indique la liste des systèmes autonomes à traverser avant d'atteindre le réseau. Le i indique ici que les routes sont de type IGP. En fait, BGP regroupe sous ce terme les routes statiques et découvertes par un protocole dynamique tel RIP ou OSPF.

Vous pouvez obtenir des informations détaillées sur une route particulière en tapant :

R2(BGP)# show ip bgp 194.30.0.0
BGP routing table  entry for 194.30.0.0/24
Paths: (1 available, best #1, table Default-IP-Routing-Table) 30
       20.0.0.2 from 20.0.0.2 (193.20.0.254)
Origin IGP, localpref 100, valid, internal, best 
Last update: Sat May 24 03:39:16 2003
Informations sur les voisins

Zebra propose de nombreuses commandes permettant de connaître l'état des voisins. Parmi les plus intéressantes, on trouve :

show ip bgp neighborsDonne de nombreuses sur la connexion avec les voisins
show ip bgp summarySynthétise les informations ci-dessus dans un tableau
show ip bgp <IP_voisin> routesRoutes découvertes à partir de ce voisin
show ip bgp <IP_voisin> advertised-routesRoutes annoncées à ce voisin

Cohabitation entre BGP et les IGP

Zebra peut tout à fait annoncer des routes dynamiques via BGP (commande redistribute). Toutefois, cette fonctionnalité est à envisager avec beaucoup de prudence car toute changement de topologie sera visible à l'extérieur du système autonome.

Conclusion

CIDR

Route server

Route reflector

Cluster