Protocole VPLS et application sur Juniper
VPLS – Virtual Private LAN Services
Voici quelques notes tirées de la RFC 4762, ainsi que des exemples appliqués à du matériel Juniper.
VPLS fournis de la connectivité entre deux clients géographiquement éloignés entre des MAN/WAN, comme s’ils étaient sur le même LAN.
Le but pour l’utilisateur final:
○ Connectivité entre les routeurs clients: routage LAN
○ Connectivité entre les switchs clients : commutation LAN
Le broadcast et le multicast sont disponibles.
Les sites qui font partis du même domaine de broadcast et qui sont connectés via MPLS peuvent utiliser le trafic broadcast, multicast et unicast sans problème.
Cela requiert l’apprentissage des adresses MAC, et la réplication des paquets multicast/broadcast..
Q-in-Q – 802.1ad – extension du 802.1q sur la partie provider
Qualified learning -mode d’apprentissage dans lequel chaque VLAN client est mappé à son instance VPLS.
Service delimiter – identificateur d’une instance client spécifique. Encodé dans le header des trames du client (ex:VLAN id)
Tagged Frame – Trame avec un tag 802.1q
Unqualified learning – Mode d’apprentissage ou tout les VLAN clients font partis d’une seule instance VPLS.
Untaged Frame – Trame sans tag 802.1q
Acronymes:
AC – Attachment Circuit
BPDU – Bridge Protocol Data Unit
CE – Customer Edge device
FEC – Forwarding Equivalence Class
FIB – Forwarding Information Base
GRE – Generic Routing Encapsulation
IPsec – IP security
L2TP – Layer Two Tunneling Protocol
LAN – Local Area Network
LDP – Label Distribution Protocol
MTU-s – Multi-Tenant Unit switch
PE – Provider Edge device
PW – Pseudowire
STP – Spanning Tree Protocol
VLAN – Virtual LAN
VLAN tag – VLAN Identifier
Modèle VPLS:
Une interface participant à VPLS doit être capable de flooder, transférer, et filtrer des trames Ethernet.
Les routeurs PE interconnectés via les pseudowires apparaissent comme un unique LAN émulé pour le client X.
Modèle topologique d’un VPLS pour le client X avec 3 sites géographiquement éloignés.
Ici nous allons voir des exemples utilisant du MPLS, mais ça marche aussi avec GRE, L2TP, IPsec.
L’accès à un site client peut être fait par:
• un port Ethernet physique
• un port Ethernet logique (taggé)
• un PVC ATM transportant des trames Ethernet..
• Un Pseudo-wire Ethernet
Le PE doit être capable de supporter le protocole LDP. Il doit aussi monter des tunnels de transports vers les autres PE.
Flooding & forwarding
Sur les services ethernet, les trames envoyés en broadcast sur une MAC inconnue sont floodées sur tous les ports.
L’ISP doit donc être capable de retransmettre ces trames aux autres PE participent à la même instance VPLS.
Pour transférer une trame, le PE doit être capable d’associer une MAC de destination à un PW. Les PE ne peuvent cependant pas retenir toute les associations de MAC possibles avec les PW..
mais ils doivent être capables d’apprendre les MAC dynamiquement et de retransmettre et répliquer les paquets au travers des AC et PW.
Address learning
Quand un paquet arrive sur le PW, si l’adresse MAC source est inconnue, il doit s’associer avec le PW, pour que les paquets sortants avec cette MAC soient associés au PW.
Pareil pour les AC.
Learning, filtering et forwarding requis quand un PW ou un AC change d’état.
Tunnel topology
les routeurs PE sont tous capables de monter des tunnels vers les autres PE.
Pour etre simple, la topologie VPLS est une full-mesh de PW..
Loop free VPLS
Si le VPLS n’est pas strictement Full-mesh, un PE devra probablement passer par un autre PE pour atteindre un PW, ce qui pourrait causer des boucles, il faudrait donc mettre en place un protocole anti boucle comme sTP.
Au lieu de ça, un full-mesh de PW est établi entre PE.
Discovery
Il est nécessaire de configurer les adresses des PE distants.
Ou alors d’utiliser la découverte automatique.
Fonctionnement du VPLS
Sur la figure suivante, nous pouvons voir un exemple de fonctionnement du VPLS.
Un VPLS à été établis entre PE1, PE2, et PE3.
Le VPLS interconnecte un client avec 4 sites aux labels A1, A2, A3, et A4 au travers de CE1, CE2, CE3, et CE4, respectivement.
Le VPLS est monté pour que PE1, PE2, et PE3 soit une full-mesh de PWs.
L’instance VPLS à un identificateur (AGI).
Ici PE1 signale le tag de PW 102 au PE2 et 103 au PE3,
et PE2 signale le tag de PW 201 à PE1 et 203 à PE3.
Si un paquet dans A1 est destiné à A2, quand il quitte CE1, avec une MAC source de M1 et une MAC destination M2.
Si PE1 ne connait pas la MAC M2, il va flooder le paquet et donc le transférer à PE2 et PE3.
Quand PE2 le reçoit, le paquet à un label 201, PE2 sait donc que la MAC M1 est derrière PE1.
Il peut donc associer la MAC M1 avec le label PW 102.
MAC address aging.
Les PE doivent avoir un mécanisme de limite d’âge pour supprimer les MAC non utilisée depuis trop longtemps.
Le compteur est reset à chaque fois qu’il reçoit un paquet avec la même MAC source.
Considérations de sécurité
- Data plane
-
- L’isolation du trafic entre les domaines VPLS est guarantis par l’usage des tables FIB unique à chaque VPLS L2 et l’usage des PW unique par VPLS.
- Le trafic client (les trames ethernet) est transporté tel quel sur le VPLS.
- Si une sécurité est requise, le client doit encrypter ses données avant d’entrer sur le réseau VPLS.
- Prévenir les tempêtes de broadcast en utilisant des routeurs comme CPE ou limiter le taux de broadcast max. que le client peut envoyer.
- Control plane
- La sécurité LDP (authentication) doit être mise en place.
- DOS Attacks
- Limiter le nombre d’adresses MAC apprises (par domaine VPLS) pour les PE.
Application à Juniper
Voici un exemple illustré d’une topologie VPLS:
Plusieurs composants:
Domaines VPLS
Un domaine VPLS est associé à un LAN client.
Pour fournir la connectivité VPLS, BGP construit un réseau full-mesh (LSP) entre toute les instances VPLS sur chaque PE.
Sur l’image ci-dessus, il y à deux domaines VPLS, VPLS A et B. Le VPLS A connecte les bureaux du client A entre Boston et Chicago.
Le VPLS B interconnecte le client B pour ses bureaux entre boston et chicago.
Equipements CE (Customer Edge)
Sur l’image, il y à 4 CE. Chacun d’eux est localisé sur les sites clients et participe à un ou plusieurs domaines VPLS.
Ici, les CE1 et CE3 sont membres du domaine VPLS A.
CE2 et CE4 sont membres du domaine VPLS B.
Chaque CE est directement connecté à un edge VPLS (interface Ethernet) mais ne fait pas tourner VPLS. Pour le CE, tout le réseau apparait comme un simple switch L2.
Equipements VPLS Edge (VE)
Dans une configuration VPLS, les routeurs E-series fonctionnement en tant que VPLS Edge (VE) = PE comme pour BGP/VPN;
Sur l’image ci-dessus, VE1 (local) et VE2 (remote). Chaque VE à une instance VPLS configurée pour chaque domaine VPLS. La topologie à donc 4 instances VPLS.
VPLS A et B sur VE1
VPLS A et B sur VE2
Chaque VE à deux types d’interfaces (ports) associés avec chaque instance VPLS.
L’interface coté CE est de type Ethernet // L’interface coté coeur est une interface virtuelle VPLS, automatiquement générée par le routeur pour chaque instance VPLS.
Le VE encapsule les trames etheernet des CE dans un paquet MPLS et les transmet à l’ISP (routeur P) – Ethernet layer 2 services over MPLS.
VPLS et bridging transparent
Une instance VPLS est analogue à un groupe de switchs (bridging transparent), et fonctionne de la même façon.
Un groupe de switch est une collection de switchs stackés en L2 pour former un unique domaine de broadcast.
Chaque domaine VPLS maintiens sa table de forwarding et filtres (MACs).
Exemples des tables de MAC pour les VE de la figue ci-dessus.
Table 13: VPLS Forwarding Table on VE 1 for VPLS A
Interface | MAC Address | Outgoing Label | Received Label |
Fast Ethernet 3/1 | 1a1a.1a1a.1a1a | – | – |
VPLS virtual core interface | 3a3a.3a3a.3a3a | 18 | 324 |
Table 14: VPLS Forwarding Table on VE 1 for VPLS B
Interface | MAC Address | Outgoing Label | Received Label |
Bridged Ethernet 2/0.12 | 2b2b.2b2b.2b2b | – | – |
VPLS virtual core interface | 4b4b.4b4b.4b4b | 25 | 526 |
Table 15: VPLS Forwarding Table on VE 2 for VPLS A
Interface | MAC Address | Outgoing Label | Received Label |
Fast Ethernet 3/5 | 3a3a.3a3a.3a3a | – | – |
VPLS virtual core interface | 1a1a.1a1a.1a1a | 42 | 107 |
Table 16: VPLS Forwarding Table on VE 2 for VPLS B
Interface | MAC Address | Outgoing Label | Received Label |
Bridged Ethernet 2/0.21 | 4b4b.4b4b.4b4b | – | – |
VPLS virtual core interface | 2b2b.2b2b.2b2b | 63 | 872 |
Configuration VPLS Juniper
Pour configurer un VE et fournir du VPLS:
1. Configurer une instance VPLS sur le VE pour chaque domaine VPLS du routeur.
2. (Optional) Configurer les attributs de chaque instance VPLS.
3. Configurer les interfaces réseau pour connecter le VE à chaque équipements CE.
4. (Optional) Configurer les règles pour les interfaces VPLS.
5. Configurer les chemins MPLS label-switched paths (LSPs) pour connecter les VE locaux et distants.
6. Mettre en place un signaling BGP sur l’AS pour signaler le fait que l’instance VPLS est joignable.
1. instances VPLS
! Configurer une instance VPLS “customer1”.
! En mode de configuration globale:
host1(config)#bridge customer1 vpls transport-virtual-router vr1
!Sppécifier le nombre maximum de sites clients qui participent à l’instance VPLS (Par défaut, au moins 1).
host1(config)#bridge customer1 vpls site-range 15
!Spécifier le nom et l’id du client pour l’instance VPLS.
host1(config)#bridge customer1 vpls site-name westford site-id 1
! Spécifier le route distinguisher (RD) pour l’instance VPLS.
host1(config)#bridge customer1 vpls rd 100:11
! Créer ou ajouter une route target pour importer/exporter la liste des VPN pour l’instance MPLS.
host1(config)#bridge customer1 vpls route-target both 100:1
! Commandes complètes
host1(config)#bridge customer1 vpls transport-virtual-router vr1 host1(config)#bridge customer1 vpls site-range 15 host1(config)#bridge customer1 vpls site-name westford site-id 1 host1(config)#bridge customer1 vpls rd 100:11 host1(config)#bridge customer1 vpls route-target both 100:1
2. Attributs optionnels pour les instances VPLS
Attribute | Command |
Enable or disable the VPLS instance’s ability to acquire dynamically learned MAC addresses | bridge acquire |
Enable or disable the VPLS instance’s ability to filter (forward or discard) frames with a particular MAC source or destination address | bridge address |
Set the aging time of a dynamic (learned) entry in the VPLS instance’s forwarding table | bridge aging-time |
Set the maximum number of dynamic MAC addresses that a VPLS instance can learn | bridge learn |
Enable SNMP link status processing for the VPLS instance | bridge snmp-trap link-status |
3. Configurer les interfaces VPLS
! Configurer l’interface Gigabit Ethernet 3/0 et l’assigner à l’instance VPLS “customer1” comme une interface trunk
!Depuis le mode de configuration globale, selectionner l’interface que vous voulez assigner à l’instance VPLS.
host1(config)#interface gigabitEthernet 3/0
!Depuis le mode de configuration d’interface, tapez la commande “bridge-group” pour assigner l’interface à une instance VPLS.
host1(config-if)#bridge-group customer1
!(Optionel) Configurer les attributs optionnels pour l’interface réseau. Une commande par attribut.
host1(config-if)#bridge-group customer1 subscriber-trunk host1(config-if)#bridge-group customer1 learn 100 host1(config-if)#bridge-group customer1 snmp-trap link-status
4. Configurer les règes pour les interfaces VPLS
… optionnel
5. MPLS LSP
Dans la configuration VPLS, vous devez créer des (LSPs) pour connecter le VE local au VE distant.
! Activer MPLS sur le VE.
host1(config)#mpls
! Configurer l’interface loopback et lui assigner une adresse IP.
host1(config)#interface loopback 0 host1(config-if)#ip address 10.3.3.3 255.255.255.255
! Activer MPLS sur l’interface loopback.
host1(config-if)#mpls
! Activer LDP et les topology-driven LSPs sur la loopback.
host1(config-if)#mpls ldp host1(config-if)exit
6. BGP signaling
Pour configurer le signaling BGP pour VPLS sur le VE:
! Assigner le routeur ID.
host1(config)#ip router-id 10.3.3.3
! Activer BGP dans l’AS 100.
host1(config)#router bgp 100
! Configurer la session BGP VE-to-VE.
host1(config-router)#neighbor 10.4.4.4 remote-as 100 host1(config-router)#neighbor 10.4.4.4 update-source loopback 0 host1(config-router)#neighbor 10.4.4.4 next-hop-self
! Créer le L2VPN avec BGP signaling pour toutes les instances VPLS.
host1(config-router)#address-family l2vpn signaling
! Activer la session VE-to-VE dans la famille d’adresse L2VPN.
host1(config-router-af)#neighbor 10.4.4.4 activate host1(config-router-af)#neighbor 10.4.4.4 next-hop-self host1(config-router-af)#exit-address-family
! Créer le VPLS address family pour l’instance VPLS “customer1”.
host1(config-router)#address-family vpls customer1 host1(config-router-af)#exit-address-family
! Créer le VPLS address family pour l’instance VPLS “customer2”.
host1(config-router)#address-family vpls customer2 host1(config-router-af)#exit-address-family
! Exit
host1(config-router)#exit
Exemple de configuration sur une architecture réelle:
Topology Overview
La topologie inclus deux domaines VPLS, A et B.
Le VPLS A connecte le CE1, sur le site de boston du client A vers le CE3 sur le site de chicago.
Le VPLS B connecte le CE2, sur le site de boston du client B vers le CE4 sur le site de chicago.
Les routeurs E-series (VE1 et VE2) participent aux domaines VPLS A et B. Il y à 4 instances séparées, une pour chaque instance de VE. VPLSA et VPLSB.
Pour chaque instance, une interface Ethernet fournis une connexion au CE associé.
Chaque instance VPLS maintiens sa propre table de forwarding et de filtres pour apprendre la topologie, de façon identique à un LAN.. Comme discuté plus haut.
Vous devez configurer les MPLS LSPs pour connecter VE1 et VE2 au travers du provider (P). Et finalement vous devrez configurer BGP sur chacun des VE (1&2) pour fournir du signaling pour chaque domaine VPLS.
Après avoir configuré le bridging, MPLS, BGP, le routeur génère une interface VPLS virtuelle pour chaque instance. Elle représente les tunnels du VE local, au VE distant.
Configuration de VE 1 (VE local)
! Configure VPLS instance vplsA.
host1(config)#bridge vplsA vpls transport-virtual-router default host1(config)#bridge vplsA vpls site-range 10 host1(config)#bridge vplsA vpls site-name boston site-id 1 host1(config)#bridge vplsA vpls rd 100:11 host1(config)#bridge vplsA vpls route-target both 100:1
! Configure VPLS instance vplsB.
host1(config)#bridge vplsB vpls transport-virtual-router default host1(config)#bridge vplsB vpls site-range 20 host1(config)#bridge vplsB vpls site-name boston site-id 1 host1(config)#bridge vplsB vpls rd 100:12 host1(config)#bridge vplsB vpls route-target both 100:2
! Configure Fast Ethernet interface 3/0 between VE 1 and CE 1,
! and assign it to vplsA as a trunk interface.
host1(config)#interface fastEthernet 3/1 host1(config-if)#bridge-group vplsA subscriber-trunk host1(config-if)#exit
! Configure bridged Ethernet interface 2/0.12 between VE 1 and CE 2,
! and assign it to vplsB as a trunk interface.
host1(config)#interface atm 2/0.12 point-to-point host1(config-subif)#atm pvc 12 0 12 aal5snap 0 0 0 host1(config-subif)#encapsulation bridge1483 mac-address 0090.1a40.9991 host1(config-subif)#bridge-group vplsB subscriber-trunk host1(config-if)#exit
! Enable MPLS on the default virtual router.
host1(config)#mpls
! Configure a loopback interface on VE 1 and assign it an IP address.
host1(config)#interface loopback 0 host1(config-if)#ip address 10.1.1.1 255.255.255.255
! Enable MPLS, LDP, and topology-driven LSPs on the loopback interface.
host1(config-if)#mpls host1(config-if)#mpls ldp host1(config-if)exit
! Configure BGP signaling.
host1(config)#ip router-id 10.1.1.1 host1(config)#router bgp 100 host1(config-router)#neighbor 10.2.2.2 remote-as 100 host1(config-router)#neighbor 10.2.2.2 update-source loopback 0 host1(config-router)#neighbor 10.2.2.2 next-hop-self host1(config-router)#address-family l2vpn signaling host1(config-router-af)#neighbor 10.2.2.2 activate host1(config-router-af)#neighbor 10.2.2.2 next-hop-self host1(config-router-af)#exit-address-family host1(config-router)#address-family vpls vplsA host1(config-router-af)#exit-address-family host1(config-router)#address-family vpls vplsB host1(config-router-af)#exit-address-family host1(config-router)#exit
Configuration on VE 2 (Remote VE Router)
! Configurer l’instance VPLS vplsA. La route target (100:1)
! matches la route target configurée pour vplsA sur VE 1.
host2(config)#bridge vplsA vpls transport-virtual-router default host2(config)#bridge vplsA vpls site-range 10 host2(config)#bridge vplsA vpls site-name chicago site-id 2 host2(config)#bridge vplsA vpls rd 100:21 host2(config)#bridge vplsA vpls route-target both 100:1
! Configurer l’instance VPLS vplsB. Route target (100:2)
! matches la route target configurée pour vplsB sur VE 1.
host2(config)#bridge vplsB vpls transport-virtual-router default host2(config)#bridge vplsB vpls site-range 20 host2(config)#bridge vplsB vpls site-name chicago site-id 2 host2(config)#bridge vplsB vpls rd 100:22 host2 (config)#bridge vplsB vpls route-target both 100:2
! Configurer l’interface FastEthernet 3/5 entre VE 2 et CE 3,
! and assign it to vplsA as a trunk interface.
host2(config)#interface fastEthernet 3/5 host2(config-if)#bridge-group vplsA subscriber-trunk host2(config-if)#exit
! Configurer un interface bridged Ethernet 2/0.21 entre VE 2 et CE 4,
! et l’assigner au vplsB en tant que trunk
host2(config)#interface atm 2/0.21 point-to-point host2(config-subif)#atm pvc 21 0 21 aal5snap 0 0 0 host2(config-subif)#encapsulation bridge1483 mac-address 0090.1a40.9992 host2(config-subif)#bridge-group vplsB subscriber-trunk host2(config-if)#exit
! Activer MPLS sur le routeur Virtuel.
host1(config)#mpls
! Configurer la loopback sur VE2 et lui assigner son IP.
host1(config)#interface loopback 0 host1(config-if)#ip address 10.2.2.2 255.255.255.255
! Activer MPLS, LDP, et les topology-driven LSPs sur la loopback.
host1(config-if)#mpls host1(config-if)#mpls ldp host1(config-if)exit
! Configurer le BGP signaling.
host2(config)#ip router-id 10.2.2.2 host2(config)#router bgp 100 host2(config-router)#neighbor 10.1.1.1 remote-as 100 host2(config-router)#neighbor 10.1.1.1 update-source loopback 0 host2(config-router)#neighbor 10.1.1.1 next-hop-self host2(config-router)#address-family l2vpn signaling host2(config-router-af)#neighbor 10.1.1.1 activate host2(config-router-af)#neighbor 10.1.1.1 next-hop-self host2(config-router-af)#exit-address-family host2(config-router)#address-family vpls vplsA host2(config-router-af)#exit-address-family host2(config-router)#address-family vpls vplsB host2(config-router-af)#exit-address-family host2(config-router)#exit
One Comment
Comments are Disabled
Compliqué à comprendre mais vos schémas sont vraiment très bien faits et aident beaucoup