{{tag>}} ======MPLS====== C'est un protocole de commutation de paquet, créé à l'origine pour soulager la CPU des routeurs suite à la multiplication du nombre de réseaux à router ; mais depuis le développement de la puissance des puces spécialisées (ASICs) ainsi que le développement des techniques de commutation comme le CEF, l'atout majeur du MPLS réside dans ses fonctions d'ingénierie de trafic, de qualité de service ou de VPN. Quand un paquet entre dans un nuage MPLS, le routeur d'entrée (**iLSR**) lui assigne un label, et chaque routeur intermédiaire (**LSR**) commute le paquet vers le routeur suivant en modifiant son label. Le chemin parcouru par le paquet est prédéfini (comme de la commutation de cellule en ATM) grâce au protocole **LDP**, et donc beaucoup plus rapide que du routage traditionnel. Par exemple quand un LSR R2 voit un paquet arriver du routeur R1 avec le label 4, il sait qu'il faut réacheminer ce paquet avec le label 8 vers le routeur R3. R3 voit le paquet arriver avec le label 8 depuis R2 ; il le renvoie vers R4 avec le label 3, et ainsi de suite (on appelle cela le **label swapping**) jusqu'au routeur de sortie (**eLSR**) qui va supprimer le label du paquet. Ces décisions se font sur la base d'une table d'association "source/label => destination/label" locale à chaque routeur, qui est mise à jour par le protocole LDP. Voici un schéma de principe piqué sur l'excellent article de frameip (([[http://www.frameip.com/mpls-cisco/|Implémentation Mpls avec Cisco]])) : {{ http://www.frameip.com/mpls-cisco/commutation.png }} Il existe 2 modes de fonctionnement : * **frame mode MPLS** : insertion d'un champ de 32 bits entre les niveaux 2 et 3 pour contenir le label MPLS (20 bits pour le label + 3 bits expérimentaux (utilisés par Cisco pour la QoS (champ CoS) + 1 bit bottom-of-stack indicator + 8 bits de TTL) * **cell mode MPLS** ou MPLS over ATM : utilisation du header ATM pour contenir le label MPLS Pour ces raisons on dit que le MPLS est un protocole de niveau 2 ou 2,5. Un label MPLS peut correspondre à une IP destination, de la QoS, une adresse source ou un circuit de niveau 2. =====Terminologie===== * **iLSR** et **eLSR** (ingress/egress Label Switch Router) = routeurs d'entrée/sortie du nuage MPLS qui, respectivement insèrent (//impose label//) et suppriment (//pop label//) le label MPLS du paquet. * **LDP** (Label Distribution Protocol) : protocole standardisé par l'IETF de dialogue de labels utilisé pour la création de la LFIB sur tcp/646. Le LDP utilise des informations du control plane pour construire le data plane. * **TDP** (Tag Distribution Protocol) : idem mais protocole propriétaire Cisco sur tcp/711 * **control plane** : contient la LIB * échange les informations de routage (OSPF, EIGRP, ...) = très lourd * échange les labels via LDP, TDP ainsi que BGP et RSVP * **data plane** : contient la FIB et la LFIB * moteur de commutation de paquet ; léger * **LIB** (Label Information Base) : contient ("en vrac") toutes les associations réseau/id du LSR (local ou un voisin)/label * **TIB** (Tag Information Base) ; contient, pour chaque réseau, tous les labels appris des LSRs voisins * **FIB** (Forward Information Base) contient les association réseau/next hop/label * **TFIB** (Tag Forwarding Information Base) créée à partir de la TIB, cette base est utilisée pour la commutation de paquet ; elle utilise l'IGP pour sélectionner, pour chaque destination, l'entrée de la TIB vers le plus court chemin (le voisin le plus proche qui annonce le réseau) * **LFIB** (Label Forwarding Information Base ?) : elle contient les associations : label/action/next hop ; c'est elle qui est lue pour commuter les paquets MPLS * **PHP** (Penultimate Hop Popping) optimise les performance du MPLS en évitant un lookup sur le routeur de sortie (eLSR). * **FEC** (Forwarding Equivalent Classes) * **label stacking** pile de label =====Mise en place===== Soit 2 routeurs R1 et R2 : on active le CEF et le MPLS sur les interfaces qui vont bien ; on augmente la MTU des paquets MPLS (il faudra en tenir compte sur les éventuels équipements intermédiaires) : Sur R1 : ip cef int fa0/1 description vers R2 ip address 10.0.0.1 255.255.255.0 mpls ip mpls label protocol ldp mpls mtu 1512 Sur R2 : ip cef int fa0/1 description vers R1 ip address 10.0.0.2 255.255.255.0 mpls ip mpls label protocol ldp mpls mtu 1512 La MTU doit être augmentée sur les interfaces WAN à cause du header MPLS : * à 1504 si on utilise du MPLS normal * à 1508 si on utilise MPLS VPN * à 1512 si on utilise MPLS VPN avec du **TE** (Trafic Engineering) =====MPLS VPN===== * **P-router** (Provider) : routeur de transit * **PE-router** (Provider Edge) : routeur de bordure de nuage MPLS, reliés aux CE * **CE-router** (Customer Edge) : routeur de bordure client qui n'a pas le notion de MPLS * **overlay VPN** : l'ISP fourni des liens point-à-point virtuels (X.25, FR, ATM, GRE, IPsec) * **peer-to-peer VPN** : l'ISP participe au routage du client (ACLs (shared router), split routing (dedicated router), MPLS VPN) =====MP-BGP===== **MP-BGP** (MultiProtocol BGP) permet d'échanger des routes Multicast et des routes VPNv4. Un **RD** (Route Distinguisher) est un identifiant de 64 bits accolé à chaque subnet d'un **VRF** (Virtual Router Forwarding) ; il permet de ne pas mélanger les réseaux de différents clients/VPN qui pourraient se recouvrir. Il s'écrit sous la forme ASN:nn, par exemple 100:1 ; quand on ajoute une annonce de réseau (un préfixe avec son masque) cela donne une adresse **VPNv4**, par exemple 100:1:192.168.0.0/24. Ces adresses VPNv4 sont échangées entre les //PE routers// en MPBGP. **RT** (Route Target) est une sorte de communauté qui permet d'échanger les annonces VPNv4 entre tous les PE qui y appartiennent. Les RT permettent donc de définir l'appartenance à un ou plus VPN. Il y a les import et les export. Le BGP VPNv4 n'est utilisé qu'entre PE routers ; les P routers n'utilise que du BGP IPv4 pour que la solution soit scalable. Pour faire communiquer 2 PE ensemble il faut définir un VRF comme cela : Sur R1 : ip vrf RED rd 100:20 route-target export 500:1 route-target import 500:2 Sur R2 : ip vrf RED rd 100:20 route-target export 500:2 route-target import 500:1 =====Vérifications===== show mpls interfaces show mpls ldp discovery show mpls ldp neighbor show mpls ldp bindings =====Liens===== * [[http://www.frameip.com/mpls-cisco/|Implémentation Mpls avec Cisco]] sur frameip