MPLS, VRFs, BGP pour s’ammuser
Nous allons voir comment monter une petite topologie avec des VRFs, du BGP, et le tout sur un réseau MPLS.
Pour les PC Client, j’ai utilisé deux loopback sur ma machine (il faudra donc penser à modifier sur votre PC)
Télécharger le fichier dynagen et les configurations
Voici la topologie dynagen utilisée:
ghostios = True
sparsemem = True
#workingdir = c:temp
[localhost]
[[3660]]
image = ..imagesC3660-JK.BIN
ram = 128
idlepc = 0x604eb02c
[[7200]]
image = ..imagesC7200-AD.BIN
ram = 160
npe = npe-400
idlepc= 0x62b4aa30
[[ROUTER CORE]]
model=7200
F0/0=PE1 F0/0
F0/1=PE2 F0/0
[[ROUTER PE1]]
model = 3660
F0/1 = CE1 F0/0
[[ROUTER CE1]]
model = 3660
F0/1 = NIO_gen_eth:DeviceNPF_{XXXX} #my loopback = CPC1
[[ROUTER PE2]]
model = 3660
F0/1 = CE2 F0/0
[[ROUTER CE2]]
model = 3660
F0/1 = NIO_gen_eth:DeviceNPF_{XXX} #my 2nd loopback = CPC2
Configurations interfaces
Pour clarifier les choses, si vous ne comprenez pas les lignes qui suivent, je vous conseille d’arrêter la lecture de l’article :p
Core:
En Conf t Hostn Core interface loopback 100 ip address 10.0.2.1 255.255.255.255 no shutdown interface F0/0 ip address 10.0.10.2 255.255.255.0 no shutdown interface f0/1 ip address 10.0.20.2 255.255.255.0 no shutdown
PE1:
En Conf t Hostn PE1 interface loopback 0 ip address 10.0.1.1 255.255.255.255 interface F0/0 ip address 10.0.10.1 255.255.255.0 no shutdown interface fastethernet 0/1 ip address 172.16.100.254 255.255.255.0 no shutdown
PE2
En Conf t Hostn PE2 interface loopback 0 ip address 10.0.3.1 255.255.255.255 interface F0/0 ip address 10.0.20.1 255.255.255.0 no shutdown interface F0/1 ip address 172.16.200.254 255.255.255.0 no shutdown
CE1
En Conf t Hostn CE1 interface loop0 ip address 172.16.10.1 255.255.255.0 interface fastethernet 0/0 ip address 172.16.100.1 255.255.255.0 no shutdown interface fastethernet 0/1 ip address 192.168.1.1 255.255.255.0 no shutdown
CE2
En Conf t Hostn CE2 interface loop0 ip address 172.16.20.1 255.255.255.0 interface f0/0 ip address 172.16.200.1 255.255.255.0 no shutdown interface fastethernet 0/1 ip address 192.168.2.1 255.255.255.0 no shutdown
Ici : penser à effectuer des pings pour tester la connectivité :
CE1#ping 192.168.1.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 192.168.1.2, timeout is 2 seconds: .!!!! Success rate is 80 percent (4/5), round-trip min/avg/max = 12/32/84 ms CE2#ping 192.168.2.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 192.168.2.2, timeout is 2 seconds: .!!!! Success rate is 80 percent (4/5), round-trip min/avg/max = 12/32/84 ms CE1#ping 172.16.100.254 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.100.254, timeout is 2 seconds: .!!!! Success rate is 80 percent (4/5), round-trip min/avg/max = 16/51/76 ms CE2#ping 172.16.200.254 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.200.254, timeout is 2 seconds: .!!!! Success rate is 80 percent (4/5), round-trip min/avg/max = 20/54/124 ms Core#ping 10.0.10.1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 10.0.10.1, timeout is 2 seconds: .!!!! Success rate is 80 percent (4/5), round-trip min/avg/max = 12/40/72 ms Core#ping 10.0.20.1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 10.0.20.1, timeout is 2 seconds: .!!!! Success rate is 80 percent (4/5), round-trip min/avg/max = 8/37/68 ms
Les pings sont OK, passons à la suite
Routage interne FAI
On va maintenant configurer le routage interne du fournisseur, car BGP est un protocole EGP (Exterior Gateway Protocol), et son but n’est pas le routage au sein de l’AS mais entre les AS. Ses neighbors ne seront pas forcément dans les mêmes sous réseaux, et il faut donc qu’ils puissent communiquer, ce qui implique une table de routage valide pour chaque routeur.
Pour aller plus vite on agrégeras les différents réseaux de chaque router.
Core
router ospf 1 network 10.0.0.0 0.255.255.255 area 0
PE1
router ospf 1 network 10.0.0.0 0.255.255.255 area 0
PE2
router ospf 1 network 10.0.0.0 0.255.255.255 area 0
On doit avoir ça :
Core# Jun 6 15:03:57.174: %OSPF-5-ADJCHG: Process 10, Nbr 10.0.1.1 on GigabitEthernet2/35 from LOADING to FULL, Loading Done Jun 6 15:24:58.342: %OSPF-5-ADJCHG: Process 10, Nbr 10.0.3.1 on GigabitEthernet2/36 from LOADING to FULL, Loading Done Core#sh ip ospf neighbor Neighbor ID Pri State Dead Time Address Interface 10.0.3.1 1 EXSTART/DR 00:00:34 10.0.20.1 FastEthernet0/1 10.0.1.1 1 EXSTART/BDR 00:00:39 10.0.10.1 FastEthernet0/0
Et PE1 doit pouvoir pinger PE2 :
PE1#ping 10.0.20.1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 10.0.20.1, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 64/79/112 ms
Ok tout est bon, passons aux choses sérieuses
Configuration MPLS
Les protocoles de distribution de labels servent au routeur à échanger leurs labels afin de pouvoir router correctement. Chaque label est local, un peu à la manière des DLCI Frame relay, et est inséré entre les entêtes de couche 2 et 3. Pour le routage MPLS, le routeur doit obligatoirement utiliser le CEF, qui construit la FIB (Forwarding Information Base), qui contient le cache pour les trames en fonction de la table de routage (pour chaque route on a une entrée en cache qui contient les informations de couche 2 pour générer la trame).
MPLS utilise la FIB pour générer la LFIB (Labeled FIB), qui a le même rôle que la FIB mais sur laquelle on ajoute les correspondances Label local, label averti par le voisin.
Les labels locaux sont stockés dans la LIB (Label Information Base).
Pour faire simple, le routeur MPLS attribue un label à chaque route, qu’il garde dans sa LIB, et lorsqu’un de ses voisin l’informe d’un label pour une même route, il rempli la LFIB pour faire correspondre les labels, ce qui permettra le switching.
Chaque routeur informe ses voisins des labels pour chacune de ses routes (Il envoi sa LIB) via LDP (ou TDP).
Ici, nous allons utiliser LDP (les deux protocoles actuels sont LDP et TDP).
Note : Les routeurs MPLS sont souvent appelés LSR pour Label Switching Routeur.
Définition de l’interface source: Optionnel mais conseillé: Dans mon cas le router Core a plusieurs interfaces loopback => résultat non prévisible.
PE1
mpls ldp advertise-labels mpls ldp router-id loopback0 force interface f0/0 mpls ip
Core
mpls ldp advertise-labels mpls ldp router-id loopback100 force interface F0/0 mpls ip interface F0/1 mpls ip
PE2
mpls ldp advertise-labels mpls ldp router-id loopback0 force interface f0/0 mpls ip
On doit avoir ça :
Core(config-if)# Jun 6 15:39:37.390: %LDP-5-NBRCHG: LDP Neighbor 10.0.1.1:0 is UP Jun 6 15:40:51.806: %LDP-5-NBRCHG: LDP Neighbor 10.0.3.1:0 is UP
Vérification :
Core#sh mpls ldp neighbor
Peer LDP Ident: 10.0.1.1:0; Local LDP Ident 10.0.2.1:0
TCP connection: 10.0.1.1.646 - 10.0.2.1.25314
State: Oper; Msgs sent/rcvd: 9/10; Downstream Up time: 00:01:35
LDP discovery sources:
FastEthernet0/0, Src IP addr: 10.0.10.1
Addresses bound to peer LDP Ident:
10.0.10.1 172.16.100.254 10.0.1.1
Peer LDP Ident: 10.0.3.1:0; Local LDP Ident 10.0.2.1:0
TCP connection: 10.0.3.1.63640 - 10.0.2.1.646
State: Oper; Msgs sent/rcvd: 9/10; Downstream
Up time: 00:01:17
LDP discovery sources:
FastEthernet0/1, Src IP addr: 10.0.20.1
Addresses bound to peer LDP Ident:
10.0.20.1 172.16.200.254 10.0.3.1
Configuration des VRF (Virtual Routing and Forwarding : L3 VPN)
Une VRF permet de virtualiser une partie du routeur. Par exemple, un routeur qui doit traiter le traffic de plusieurs AS ayant le même adressage, afin de ne pas les mélanger, mettra chaque AS dans une VRF.
Chaque VRF a sa proper Routing Information Base (RIB, Table de routage) et table Cisco Express Forwarding (doit être activé avec ip cef).
Le routage se fera grâce à BGP et son extension multi protocole (MP BGP) : Un routeur en cœur de réseau pouvant avoir plusieurs clients ayant les mêmes adresses privées, on assignera à chaque VRF une route distinguisher, qui, préfixé a une adresse IPv4 donnera une adresse VPNv4 unique dans tout le réseau (on aura donc une RD par VRF). Les routes des VRFs pouvant être injectées dans d’autres VRF (VPN Multi Sites), on utilisera les Route Target (RT) qui permettront de définir un nom d’export à la table de routage de notre VRF, et d’indiquer quelles tables importer. Les RT seront transportées via MP BGP.
Chaque VRF doit avoir une RD (unique) et une ou plusieurs RT en import et/ou export.
Convention RD :
Numero_as :nombre_aleatoire
ou
IPv4 :nombre_aleatoire
Convention RT :
Numero_as :nombre_aleatoire
ou
IPv4 :nombre_aleatoire
Les RD et RT peuvent ou non avoir la mêmes valeur, cela n’a rien à voir, mais doivent être les mêmes sur tous les routeurs pour la même VRF. Le mot clef both indique que les routes de la vrf crf_client seront exportées et importées sur chaque routeur, ce qui veut dire que si un des routeurs reçoit une màj BGP avec la RT 1:123 il l’injectera dans la table de routage de cette VRF. Le routeur Core n’a pas besoin d’avoir cette VRF de configurée puisqu’il n’a pas d’interfaces configurée dans cette VRF.
On remarque aussi que le client ne sait pas qu’il est dans une VRF, cela est défini uniquement coté FAI.
PE1 :
ip vrf vrf_client rd 65000:123 route-target both 65000:123
PE2 :
ip vrf vrf_client rd 65000:123 route-target both 65000:123
Définition des interfaces dans la VRF:
PE1 :
interface fastethernet 0/1 ip vrf forwarding vrf_client ip address 172.16.100.254 255.255.255.0 no shut
PE2 :
interface fastethernet 0/1 ip vrf forwarding vrf_client ip address 172.16.200.254 255.255.255.0 no shutdown
Attention de rentrer la commande IP vrf forwarding avant la commande ip address, car les routeurs cisco suppriment la configuration IP lors de l’affectation d’une interface à une vrf.
PE1(config-if)#ip vrf forwarding vrf_client % Interface FastEthernet0/1 IP address 172.16.100.254 removed due to enabling VRF vrf_client
Test ping:
Pout pinger dans une VRF, il vous faut utiliser la commande ping vrf :
PE1#ping vrf vrf_client 172.16.100.1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.100.1, timeout is 2 seconds: .!!!! Success rate is 80 percent (4/5), round-trip min/avg/max = 12/33/56 ms
Configuration EIGRP
Au sein de l’AS du client, nous allons utiliser EIGRP. Nous aurions tout aussi pu utiliser OSPF, ou mettre EIGRP dans l’AS fournisseur, mais ça fait un petit rappel ?
Client : AS 65000
FAI : AS 1
CE1
router eigrp 65000 no auto-summary network 172.16.0.0 network 192.168.1.0
CE2
router eigrp 65000 no auto-summary network 172.16.0.0 network 192.168.2.0
A ce point, on ne voit pas encore de relation de voisinage EIGRP. Chaque IGP à une configuration propre pour les VRFs. Pour EIGRP, dans le processus de routage principal, dans l’AS 1, on peut spécifier d’autres AS pour des VRFs particulières :
Ici, il faut comprendre que les PE sont dans l’AS 1, mais qu’ils vont accepter les routes de l’AS 65000 et les convertir en route VPNV4, qui seront transportées d’un PE à l’autre par BGP.
PE1 :
router eigrp 1 address-family ipv4 vrf vrf_client autonomous-system 65000 no auto-summary network 172.16.0.0
PE2 :
router eigrp 1 address-family ipv4 vrf vrf_client autonomous-system 65000 no auto-summary network 172.16.0.0
On remarque que on ne mélangeras pas les adresses IPv4 et VPNv4, leur configuration sera donc séparée dans la configuration du protocole de routage.
De même que pour la commande ping, il faut spécifier la vrf pour afficher sa table de routage. Si tout s’est bien passé vous devriez avoir quelque chose comme cela :
*Mar 1 00:46:14.751: %DUAL-5-NBRCHANGE: IP-EIGRP(1) 65000: Neighbor 172.16.200.1 (FastEthernet0/1) is up: new adjacency
PE1#sh ip route vrf vrf_client
Routing Table: vrf_client
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
172.16.0.0/24 is subnetted, 2 subnets
D 172.16.10.0 [90/30720] via 172.16.100.1, 00:01:14, FastEthernet0/1
C 172.16.100.0 is directly connected, FastEthernet0/1
Configuration BGP
Bien, nous avons maintenant activé le support du MPLS, le routage interne au cœur du réseau, le routage entre les routeurs d’extrémité et les routeurs client, il ne nous reste plus qu’a configurer BGP afin qu’il transporte les routes d’un point de la VRF à l’autre. Le paramètre après router BGP est le numero d’AS.
PE1
router bgp 1 neighbor 10.0.3.1 remote-as 1 neighbor 10.0.3.1 update-source loopback0
PE2
router bgp 1 neighbor 10.0.1.1 remote-as 1 neighbor 10.0.1.1 update-source loopback0
Il est important de prendre l’habitude de spécifier une adresse source pour les mises à jours BGP, car BGP refuse les mises à jours de voisins dont l’IP n’est pas configurée avec la commande neighbor, ce qui pourrait poser des problème en cas de lien redondant.
On remarque que les voisins ne sont pas directement connectés, d’où l’utilisation d’un protocole de routage en interne au cœur de réseau.
On aura pas d’ailleurs à configurer BGP sur le Core Routeur, les PE vont échanger leur route directement entre eux.
Par défaut, BGP ne transporte et ne reçoit que des routes IPv4, pour transporter les routes des VRFs, BGP enverra des routes VPNv4, il faudra donc activer le support de cette famille d’adresse et définir les voisins avec qui on échangera de type de routes.
Les RT sont translatée comme étant des communautées étendue, il faut donc activer leur support.
En mode de configuration BGP, tapez les commandes suivantes :
PE1
address-family vpnv4 neighbor 10.0.3.1 activate neighbor 10.0.3.1 send-community both exit
PE2
address-family vpnv4 neighbor 10.0.1.1 activate neighbor 10.0.1.1 send-community both exit
Vous devriez observe quelque chose de la sorte:
*Mar 1 02:14:45.067: %BGP-5-ADJCHANGE: neighbor 10.0.3.1 Up *Mar 1 02:15:36.291: %BGP-5-ADJCHANGE: neighbor 10.0.3.1 Down Peer closed the session *Mar 1 02:15:38.543: %BGP-5-ADJCHANGE: neighbor 10.0.3.1 Up
Il est normal que la relation de voisinage se termine et se réactive.
Maintenant que BGP est configuré pour transporter les routes entre nos deux routeurs PE, il faut lui indiquer ou trouver ces routes. Dans notre cas, elles seront importées depuis EIGRP. Il faudra donc taper ces commandes en mode de configuration BGP:
PE1
address-family ipv4 vrf vrf_client redistribute eigrp 65000 exit exit
PE2
address-family ipv4 vrf vrf_client redistribute eigrp 65000 exit exit
Maintenant, il ne reste plus qu’a dire aux routeurs PE d’injecter les routes apprises par BGP dans l’EIGRP du client (attention, les métriques BGP et EIGRP ne sont pas compatibles, il faut définir leur paramètres):
PE1
router eigrp 1 address-family ipv4 vrf vrf_client redistribute bgp 1 metric 64 1000 255 1 1500
PE2
router eigrp 1 address-family ipv4 vrf vrf_client redistribute bgp 1 metric 64 1000 255 1 1500
Vérifications:
CE1#sh 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
172.16.0.0/24 is subnetted, 4 subnets
D 172.16.200.0 [90/30720] via 172.16.100.254, 00:02:32, FastEthernet0/0
D 172.16.20.0 [90/158720] via 172.16.100.254, 00:02:32, FastEthernet0/0
C 172.16.10.0 is directly connected, Loopback0
C 172.16.100.0 is directly connected, FastEthernet0/0
C 192.168.1.0/24 is directly connected, FastEthernet0/1
D 192.168.2.0/24 [90/33280] via 172.16.100.254, 00:00:10, FastEthernet0/0
CE1#ping 192.168.2.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.2.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 144/212/264 ms
Core#show mpls forwarding-table
Local Outgoing Prefix Bytes tag Outgoing Next Hop
tag tag or VC or Tunnel Id switched interface
16 Pop tag 10.0.3.1/32 4013 Fa0/1 10.0.20.1
17 Pop tag 10.0.1.1/32 4697 Fa0/0 10.0.10.1
PE1#sh mpls ip binding
10.0.1.1/32
in label: imp-null
out label: 17 lsr: 10.0.2.1:0
10.0.2.1/32
in label: 17
out label: imp-null lsr: 10.0.2.1:0 inuse
10.0.3.1/32
in label: 16
out label: 16 lsr: 10.0.2.1:0 inuse
10.0.10.0/24
in label: imp-null
out label: imp-null lsr: 10.0.2.1:0
10.0.20.0/24
in label: 18
out label: imp-null lsr: 10.0.2.1:0 inuse
C’est pas beau ?
Recent Entries
- DMVPN over GETVPN avec KS COOP (redondance) et KS Forwarding
- EAP-TLS avec Autorité de certification autonome (Standalone CA) sous Windows 2003
- Static subnet NAT avec VRF pour monter des ‘PODs’ (LAB)
- Capture WiFi en mode monitor sous windows, et capture par process
- Comment taper un point d’interrogation ‘?’ dans un mot de passe ?
- IPSEC High Availability Stateful Failover avec VTI
- Exemple GETVPN avec utilisation du CA server IOS
- Vente de matériel cisco : ip phone 7960, 3550 PoE, AP 1131Ag
- Prise en main d’un IDS 4215 et utilisation IDM sous Windows 7
- Vidéo de configuration 802.1X + PEAP sous ACS pour un AP Wifi aironet

janvier 10th, 2010 at 15:26
[...] certaines des parties suivantes) ne change pas vraiment de ce que j’ai déjà abordé dans mon article sur les MPLS VPNs sauf qu’on mets du ISIS pour l’IGP (ça me permets de réviser pour BSCI ). Bon pour [...]
mai 18th, 2011 at 22:29
bonjour,
J’ai essayé d’appliquer cette méthode et j’ai rencontré des problèmes.
Au niveau de la configuration de MPLS je n’obtient pas le message de reconnaissance de voisinage et meme quand j’affiche les voisin mpls j’obtiens un tableau vide.
Merci d’avance.
juin 14th, 2011 at 13:53
Bonjour,
C’est un peu compliqué à voir ce qui peut clocher comme cela, mais si il n’y a aucune relation de voisinage LDP (show mpls ldp neigh), commence par vérifier que la connectivité L1/L2/L3 entre les routeurs est OK, qu’ils ont bien tous le protocole LDP activé, …
octobre 21st, 2011 at 9:26
si tu fait du video se sera genial
merci