5 novembre 2010

Introduction au multihoming avec BGP sur Cisco – Partie 1

Ce billet a pour but d’introduire quelques notions pour réaliser une architecture basée sur du multihoming. Tout d’abord, je pense qu’il peut être approprié de rappeler la définition du multihoming : permet d’augmenter la fiabilité des accès physiques à Internet et d’augmenter le taux de disponibilité de ce service. En règle générale, cette configuration sera utilisée pour la mise en place de deux connexions d’opérateurs distincts.
Dans ce billet, nous allons partir du principe que l’architecture est la suivante :








La topologie présentée est relativement simple. Nous avons trois routeurs distincts, dont un qui appartient à la société lambda que nous appelerons donc CLIENT. Les deux autres sont des routeurs fournis par des opérateurs distincts, respectivement FAI1 et FAI2. Le but de l’exercice est ici de fournir une topologie d’accès à Internet simple mais redondée afin d’améliorer la disponibilité du service.
Les numéros d’AS ainsi que l’adressage IP est ici purement arbitraire et à des fins didactrices. De plus, la topologie ainsi présentée a été réalisée via GNS3 sur lequel vous pourrez trouver différentes informations sur ce blog.
Configuration de réseau base des équipements
Commençons par le commencement ! Pour cela, nous déclarons l’ensemble des interfaces nécessaires à la réalisation de la maquette de cette manière au niveau du routeur « CLIENT » :
CLIENT(config)#int fast0/0
CLIENT(config-if)#ip address 10.0.0.2 255.255.255.252
CLIENT(config-if)#no shut
CLIENT(config)#int fast 1/0
CLIENT(config-if)#ip address 20.0.0.2 255.255.255.252
CLIENT(config-if)#no shut
CLIENT(config)#int loopback 0
CLIENT(config-if)#ip address 1.0.0.1 255.255.255.0
CLIENT(config-if)#no shut
CLIENT(config)#int loopback 1
CLIENT(config-if)#ip address 2.0.0.1 255.255.255.0
CLIENT(config-if)#no shut
Ensuite, nous réalisons la configuration des interfaces physiques et loopback sur les deux routeurs FAI :
FAI1#conf t
FAI1(config)#int fast0/0
FAI1(config-if)#ip address 10.0.0.1 255.255.255.252
FAI1(config-if)#no shut
FAI1(config)#int loopback 0
FAI1(config-if)#ip address 3.0.0.1 255.0.0.0
FAI1(config-if)#no shut
FAI2#conf t
FAI2(config)#int fast0/0
FAI2(config-if)#ip address 20.0.0.1 255.255.255.252
FAI2(config-if)#no shut
FAI2(config)#int loopback 0
FAI2(config-if)#ip address 4.0.0.1 255.0.0.0
L’ensemble de la configuration réseau de base est donc achevée à cette étape. Pour tester celle-ci, rien de plus simple que quelques pings pour s’en assurer :
FAI1#ping 10.0.0.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.0.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 68/73/84 ms
FAI2#ping 20.0.0.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 20.0.0.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 48/108/200 ms
Configuration du protocole de routage dynamique BGP (Border Gateway Protocol)
On distingue deux versions de BGP : iBGP et eBGP. Le premier s’utilise sur des routeurs appartenant à un même AS, tandis que le eBGP est chargé du routage entre des routeurs d’AS différents. Pour rappel, un AS, ou Autonomous System, est une notion purement administrative destinée à définir des domaines de responsabilité précis. Typiquement, on peut grossièrement dire qu’un FAI représente un AS tandis que son concurrent en représentera un autre.
Dans notre cas, nous allons configurer du eBGP, dans la mesure où chacun de nos routeurs sont situés dans des AS différents. En outre, BGP s’appuie sur le protocole TCP pour échanger les informations de routage entre les différents équipements. Par défaut, BGP utilise l’adresse IP de l’interface la plus proche des routeurs « peers » avec qui les connexions s’établissent. Il est alors intéressant d’utiliser une loopback interface pour effectuer ce peering, cela empêchant de rompre une session BGP si une interface physique était utilisée pour établir cette relation et que celle-ci venait à tomber alors que plusieurs AS Paths sont disponibles entre ces peers.  le but de ce billet étant d’aborder les principes de configuration du BGP sur Cisco,  nous verrons cette configuration ultérieurement.
Au niveau du routeur Client, voici la configuration à renseigner :
CLIENT(config)#router bgp 100
CLIENT(config-router)#network 1.0.0.0
CLIENT(config-router)#network 2.0.0.0
CLIENT(config-router)#neighbor 10.0.0.1 remote-as 200
CLIENT(config-router)#neighbor 20.0.0.1 remote-as 300
La commande router bgp 100 permet d’activer le BGP en spécifiant le numéro d’AS 100. Ensuite, la commande network permet de définir les subnets à diffuser dans ce process BGP. Enfin, les deux commandes neighbor permettent d’indique l’adresse des peers BGP et leur numéro d’AS respectifs.
On procède à ce même type de configuration sur chacun des routeurs FAI :
FAI1(config)#router bgp 200
FAI1(config-router)#network 3.0.0.0
FAI1(config-router)#neighbor 10.0.0.2 remote-as 100
Les logs du routeur nous indiquent alors l’information suivante :
*Mar  1 00:17:31.763: %BGP-5-ADJCHANGE: neighbor 10.0.0.2 Up
*Mar  1 00:17:32.679: %BGP-5-ADJCHANGE: neighbor 10.0.0.1 Up
L’adjacence est alors établie entre nos deux peers. Nous réalisons les mêmes commandes pour notre troisième routeur FAI2 :
FAI2(config)#router bgp 300
FAI2(config-router)#network 4.0.0.0
FAI2(config-router)#neighbor 20.0.0.2 remote-as 100
Le résultat de cette commande au niveau des logs est identique :
*Mar  1 00:18:58.987: %BGP-5-ADJCHANGE: neighbor 20.0.0.2 Up
*Mar  1 00:19:06.415: %BGP-5-ADJCHANGE: neighbor 20.0.0.1 Up
A l’issue de cette phase de configuration, nous avons donc les sessions BGP établies suivantes :
  • Client <-> FAI1
  • Client <-> FAI2
La commande show ip route nous permet de vérifier le contenu de la table de routage de nos équipements :
CLIENT#show ip route
Codes: C – connected, S – static, R – RIP, M – mobile, B – BGP
       D – EIGRP, EX – EIGRP external, O – OSPF, IA – OSPF inter area
       N1 – OSPF NSSA external type 1, N2 – OSPF NSSA external type 2
       E1 – OSPF external type 1, E2 – OSPF external type 2
       i – IS-IS, su – IS-IS summary, L1 – IS-IS level-1, L2 – IS-IS level-2
       ia – IS-IS inter area, * – candidate default, U – per-user static route
       o – ODR, P – periodic downloaded static route
Gateway of last resort is not set
     1.0.0.0/24 is subnetted, 1 subnets
C       1.0.0.0 is directly connected, Loopback0
     2.0.0.0/24 is subnetted, 1 subnets
C       2.0.0.0 is directly connected, Loopback1
B    3.0.0.0/8 [20/0] via 10.0.0.1, 00:00:31
B    4.0.0.0/8 [20/0] via 20.0.0.1, 00:00:15
     20.0.0.0/30 is subnetted, 1 subnets
C       20.0.0.0 is directly connected, FastEthernet1/0
     10.0.0.0/30 is subnetted, 1 subnets
C       10.0.0.0 is directly connected, FastEthernet0/0
Outre les subnets directement connectés, nous voyons bien apparaître les routes vers les adresses de loopback de nos deux routeurs FAI indiquées en tant que B pour BGP.
Regardons à présent le résultat de cette commande sur le routeur FAI2 :
FAI2#show ip route
Codes: C – connected, S – static, R – RIP, M – mobile, B – BGP
       D – EIGRP, EX – EIGRP external, O – OSPF, IA – OSPF inter area
       N1 – OSPF NSSA external type 1, N2 – OSPF NSSA external type 2
       E1 – OSPF external type 1, E2 – OSPF external type 2
       i – IS-IS, su – IS-IS summary, L1 – IS-IS level-1, L2 – IS-IS level-2
       ia – IS-IS inter area, * – candidate default, U – per-user static route
       o – ODR, P – periodic downloaded static route
Gateway of last resort is not set
B    3.0.0.0/8 [20/0] via 20.0.0.2, 00:02:07
C    4.0.0.0/8 is directly connected, Loopback0
     20.0.0.0/30 is subnetted, 1 subnets
C       20.0.0.0 is directly connected, FastEthernet0/0
Celle-ci fait état d’une route pour la loopback du routeur FAI1 ( 3.0.0.0 / 8 ) via notre routeur Client. eBGP est par défaut transitif, c’est à dire que les routes apprises par un routeur via un process BGP sera redistribuée à l’ensemble des routeurs avec qui les sessions BGP sont établies. Dans le cas d’une architecture de multihoming, cela est problématique car notre routeur Client est alors placé en tant qu’AS de transit pour des flux Internet entre deux routeurs opérateurs.
Dans ce cas là, il est nécessaire de filtrer au niveau du routeur les annonces qu’il diffuse et celles qu’il peut recevoir. Nous détaillerons dans un billet ultérieur l’ensemble des possibilités liées à ce filtrage.
Dans notre exemple, nous allons simplement commencer par empêcher notre routeur Client d’être transitif pour les routes autres que celles qu’il génère en local. Dans la pratique, les routeurs FAI filtreront de base les routes qu’ils diffusent pour ne conserver que le strict minimum.
Sur le routeur client, nous effectuons donc les manipulations suivantes :
CLIENT(config)#ip as-path access-list 10 permit ^$
CLIENT(config-router)#neighbor 10.0.0.1 filter-list 10 out
CLIENT(config-router)#neighbor 20.0.0.1 filter-list 10 out
Nous créeons donc une access list 10 via la commande ip as-path access-list qui n’autorise que ^$. Vous en conviendrez, ce ^$ n’est pas très explicite en soi mais rappelera probablement à certaines personnes les expressions régulières. Il est en effet possible d’utiliser des expressions régulières pour diffuser et recevoir uniquement ce qui nous intéresse. Dans cet exemple, l’expression ^$ correspond aux annonces générées par notre AS local uniquement.
Il est ensuite nécessaire de remplacer la commande neighbor x.x.x.x par neighbor x.x.x.x filter-list 10 out,qui, d’une manière assez intuitive permet de déduire que les annonces sortantes sont filtrées via cette access-list. Dans le cas de changement au niveau des paramètres BGP, il peut être opportun de réinitialiser les sessions BGP via la commande clear ip bgp *.
Vérifions à présent que ceci est fonctionnel au niveau des annonces reçues par le routeur FAI1 :
FAI1#show ip route
Codes: C – connected, S – static, R – RIP, M – mobile, B – BGP
       D – EIGRP, EX – EIGRP external, O – OSPF, IA – OSPF inter area
       N1 – OSPF NSSA external type 1, N2 – OSPF NSSA external type 2
       E1 – OSPF external type 1, E2 – OSPF external type 2
       i – IS-IS, su – IS-IS summary, L1 – IS-IS level-1, L2 – IS-IS level-2
       ia – IS-IS inter area, * – candidate default, U – per-user static route
       o – ODR, P – periodic downloaded static route
Gateway of last resort is not set
B    1.0.0.0/8 [20/0] via 10.0.0.2, 00:01:11
B    2.0.0.0/8 [20/0] via 10.0.0.2, 00:01:11
C    3.0.0.0/8 is directly connected, Loopback0
     10.0.0.0/30 is subnetted, 1 subnets
C       10.0.0.0 is directly connected, FastEthernet0/0
FAI1#
Nous voyons en effet que la loopback du FAI2 n’est plus présente dans la table du routeur FAI1, ce qui est donc le résultat attendu.
Ce premier billet nous permet donc de prendre connaissance avec BGP et une implémentation somme toute classique. Les billets ultérieurs permettront d’enrichir cette topologie et d’aborder les questions de routes par défaut.

Aucun commentaire:

Enregistrer un commentaire