MPLS LDP vs SR-MPLS/EVPN

Configuration

Episode très court je vous préviens ! (en relisant, je suis pas sûr mais bon 😀)

Allez, on enchaine directement sur la configuration. Le Segment Routing a été mis en place dans l'épisode précédent. Il nous reste plus qu'à implémenter l'EVPN pour bénéficier des routes types 5 et ainsi échanger des routes v4 et v6 dans le peering BGP.

PE1(config)#router bgp 65000
PE1(config-router-bgp)#no address-family ipv4
PE1(config-router-bgp)#no address-family ipv6
PE1(config-router-bgp)#no address-family vpn-ipv6
PE1(config-router-bgp)#no vrf NARUTO


PE1#sh run | s bgp
router bgp 65000
   router-id 100.127.0.0
   no bgp default ipv4-unicast
   bgp default ipv6-unicast
   neighbor 2001::5 remote-as 65000
   neighbor 2001::5 next-hop-self
   neighbor 2001::5 update-source Loopback1
   neighbor 2001::5 description PE1-IPv6
   neighbor 2001::5 send-community standard extended
   !
   address-family evpn
      neighbor 2001::5 activate
      neighbor 2001::5 encapsulation mpls next-hop-self source-interface Loopback1
   !
   vrf NARUTO
      rd 65000:65000
      route-target import evpn 65000:65000
      route-target export evpn 65000:65000
      redistribute connected

On fait aussi la même chose sur PE2 :

PE1#sh bgp summary
BGP summary information for VRF default
Router identifier 100.127.0.0, local AS number 65000
Neighbor          AS Session State AFI/SAFI                AFI/SAFI State   NLRI Rcd   NLRI Acc
-------- ----------- ------------- ----------------------- -------------- ---------- ----------
2001::5        65000 Established   IPv6 Unicast            Negotiated              0          0
2001::5        65000 Established   L2VPN EVPN              Negotiated              4          4

La seule chose qui devrait nous intéresser est dans la configuration de l'EVPN. C'est quoi cette ligne bizarre encore ? Encapsulation mpls et tralala.

Alors, on doit préciser à l'EVPN qu'on va encapsuler dans du MPLS (je suppose qu'il attend du VXLAN par défaut). On précise aussi le next hop des routes annoncées par nos PE qui est l'IPv6 de la loopback. Ne pas penser que parce qu'il est déjà dans la configuration du global BGP suffit ! Pour les L3VPN oui mais pas les L2VPN ! On voit ça juste après 😄

On voit bien des échanges de routes entre les peerings EVPN. Allez on check la table de routage v6 et v4 de la vrf NARUTO :

PE1#sh ipv6 route vrf NARUTO
 C        2001:cafe::/128 [0/0]
           via Loopback10, directly connected
 B I      2001:cafe::1/128 [200/0]
           via 2001::5/128, IS-IS SR tunnel index 5, label 100000
              via fe80::5200:ff:feaf:d3f6, Ethernet2, label 900005
 C        2001:dead::/64 [0/0]
           via Ethernet7.1000, directly connected
 B I      2001:dead:1::/64 [200/0]
           via 2001::5/128, IS-IS SR tunnel index 5, label 100000
              via fe80::5200:ff:feaf:d3f6, Ethernet2, label 900005


PE1#ping vrf NARUTO ipv6 2001:dead:1::
PING 2001:dead:1::(2001:dead:1::) 52 data bytes
60 bytes from 2001:dead:1::: icmp_seq=1 ttl=64 time=18.4 ms
60 bytes from 2001:dead:1::: icmp_seq=2 ttl=64 time=7.95 ms
60 bytes from 2001:dead:1::: icmp_seq=3 ttl=64 time=9.24 ms
60 bytes from 2001:dead:1::: icmp_seq=4 ttl=64 time=9.22 ms
60 bytes from 2001:dead:1::: icmp_seq=5 ttl=64 time=8.99 ms

--- 2001:dead:1:: ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 59ms
rtt min/avg/max/mdev = 7.954/10.757/18.384/3.842 ms, pipe 2, ipg/ewma 14.822/14.458 ms

Bon la v6 est comme d'hab. Au moins on a pas cassé ça 😃

Et la v4 ?

PE1#sh ip route vrf NARUTO
 C        100.100.100.0/32 [0/0]
           via Loopback10, directly connected
 B I      100.100.100.1/32 [200/0]
           via 2001::5/128, IS-IS SR tunnel index 5, label 100001
              via fe80::5200:ff:feaf:d3f6, Ethernet2, label 900005
 B I      192.168.2.0/24 [200/0]
           via 2001::5/128, IS-IS SR tunnel index 5, label 100001
              via fe80::5200:ff:feaf:d3f6, Ethernet2, label 900005
 C        192.168.100.0/24 [0/0]
           via Ethernet7.1000, directly connected
 C        192.168.200.0/24 [0/0]
           via Ethernet7.2000, directly connected

PE1#ping vrf NARUTO 100.100.100.1
PING 100.100.100.1 (100.100.100.1) 72(100) bytes of data.
80 bytes from 100.100.100.1: icmp_seq=1 ttl=65 time=11.5 ms
80 bytes from 100.100.100.1: icmp_seq=2 ttl=65 time=8.65 ms
80 bytes from 100.100.100.1: icmp_seq=3 ttl=65 time=8.50 ms
80 bytes from 100.100.100.1: icmp_seq=4 ttl=65 time=8.09 ms
80 bytes from 100.100.100.1: icmp_seq=5 ttl=65 time=8.88 ms

--- 100.100.100.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 44ms
rtt min/avg/max/mdev = 8.091/9.114/11.459/1.200 ms, ipg/ewma 11.083/10.249 ms

Mes sœurs et frères, le moment est venu pour annoncer qu'on possède un backbone full core IPv6 !

Un des buts finaux de ce blog a été atteint ! Que d'émotions 😎😎

Dans la trame, on voit bien que le label utilisé est celui de la VRF NARUTO pour l'IPv4 :

On va plus loin : les L2VPN

Bah oui, quitte à faire des L3VPN, autant regarder comment on fait des L2VPN 😄

On utilise de l'EVPN donc ...... C'est trop méga simple à configurer !!!

PE1#sh run | s vlan 3000
vlan 3000
   name L2VPN
interface Ethernet8
   switchport access vlan 3000
router bgp 65000
   vlan 3000
      rd 3000:3000
      route-target both 3000:3000
      redistribute learned

On branche deux vPC sur les switchs sur des ports L2 :

PE1#sh bgp evpn route-type mac-ip rd 3000:3000
BGP routing table information for VRF default
Router identifier 100.127.0.0, local AS number 65000
Route status codes: * - valid, > - active, S - Stale, E - ECMP head, e - ECMP
                    c - Contributing to ECMP, % - Pending best path selection
Origin codes: i - IGP, e - EGP, ? - incomplete
AS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop

          Network                Next Hop              Metric  LocPref Weight  Path
 * >      RD: 3000:3000 mac-ip 0050.7966.6806
                                 2001::5               -       100     0       i
 * >      RD: 3000:3000 mac-ip 0050.7966.680b
                                 -                     -       -       0       i


PE1#sh mac address-table vlan 3000
          Mac Address Table
------------------------------------------------------------------

Vlan    Mac Address       Type        Ports      Moves   Last Move
----    -----------       ----        -----      -----   ---------
3000    0050.7966.6806    DYNAMIC     Mt1        1       0:03:26 ago
3000    0050.7966.680b    DYNAMIC     Et8        1       0:03:26 ago
Total Mac Addresses for this criterion: 2

Les routes types 2 sont bien diffusées et apprises par le switch via l'interface Mt1 (aucune idée de la traduction sorry guys).

Un autre point intéressant aussi :

Admettons que le VLAN 3000 soit déjà utilisé sur un switch. Il faudrait faire en sorte que même si les VLANs différes, la communication puisse toujours se faire. Et c'est là le principe du RD et du RT dans la configuration du VLAN dans le BGP.

Admettons on part sur le VLAN 4000 et qu'on garde le VLAN 3000 sur l'autre switch :

PE1#sh run | s vlan 4000
vlan 4000
   name TEST
interface Ethernet8
   switchport access vlan 4000
router bgp 65000
   vlan 4000
      rd 3000:3000
      route-target both 3000:3000
      redistribute learned


PE2#sh run | s vlan 3000
vlan 3000
   name L2VPN
interface Ethernet8
   switchport access vlan 3000
router bgp 65000
   vlan 3000
      rd 3000:3000
      route-target both 3000:3000
      redistribute learned

On met le même RD et RT dans les deux configurations des deux switchs

PE1#sh mac address-table vlan 4000
          Mac Address Table
------------------------------------------------------------------

Vlan    Mac Address       Type        Ports      Moves   Last Move
----    -----------       ----        -----      -----   ---------
4000    0050.7966.6806    DYNAMIC     Mt1        1       0:03:03 ago
4000    0050.7966.680b    DYNAMIC     Et8        1       0:02:53 ago


PE2#sh mac address-table vlan 3000
          Mac Address Table
------------------------------------------------------------------

Vlan    Mac Address       Type        Ports      Moves   Last Move
----    -----------       ----        -----      -----   ---------
3000    0050.7966.6806    DYNAMIC     Et8        1       0:04:15 ago
3000    0050.7966.680b    DYNAMIC     Mt1        1       0:02:54 ago

Les MACs des terminaux remontent dans le VLAN local du switch ! Et la communication fonctionne toujours :

VPCS> ping 192.168.1.2

84 bytes from 192.168.1.2 icmp_seq=1 ttl=64 time=11.045 ms
84 bytes from 192.168.1.2 icmp_seq=2 ttl=64 time=12.913 ms
84 bytes from 192.168.1.2 icmp_seq=3 ttl=64 time=13.255 ms
84 bytes from 192.168.1.2 icmp_seq=4 ttl=64 time=13.262 ms 

VLAN AWARE BUNDLE :

Tant qu'on y est, on va voir comment configurer ce machin et comment ca peut grave nous aider dans la configuration. (Pour la définition, veuillez vous référencer sur l'épisode de l'Overlay de la fabric)

En gros, si on a 1000 VLANs à faire circuler via l'EVPN, ça va être relou de faire unitairement à la main dans la conf du BGP ( Un VLAN = Une MAC VRF).

Par conséquent, on va utiliser le principe du VLAN AWARE BUNDLE. Un RD va être le même pour tous les VLANs.

On branche deux terminaux sur les switchs :

PE1#sh mac address-table
          Mac Address Table
------------------------------------------------------------------

Vlan    Mac Address       Type        Ports      Moves   Last Move
----    -----------       ----        -----      -----   ---------
3000    0050.7966.680b    DYNAMIC     Et8        1       0:04:43 ago
4000    0050.7966.680c    DYNAMIC     Et7        1       0:04:30 ago

Et dans la configuration du BGP, on va utiliser cette syntaxe (bien sûr, il faut supprimer la MAC VRF du VLAN précédemment crée dans le BGP :

PE1#sh run | s vlan-aware-bundle
router bgp 65000
   vlan-aware-bundle Test
      rd 5000:5000
      route-target both 5000:5000
      redistribute learned
      vlan 3000,4000  

Ainsi, chaque adresse mac va remonter dans ce vlan-aware-bundle avec le RD associé :

PE1#sh bgp evpn route-type mac-ip
BGP routing table information for VRF default
Router identifier 100.127.0.0, local AS number 65000
Route status codes: * - valid, > - active, S - Stale, E - ECMP head, e - ECMP
                    c - Contributing to ECMP, % - Pending best path selection
Origin codes: i - IGP, e - EGP, ? - incomplete
AS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop

          Network                Next Hop              Metric  LocPref Weight  Path
 * >      RD: 5000:5000 mac-ip 3000 0050.7966.6806
                                 2001::5               -       100     0       i
 * >      RD: 5000:5000 mac-ip 3000 0050.7966.680b
                                 -                     -       -       0       i
 * >      RD: 5000:5000 mac-ip 4000 0050.7966.680c
                                 -                     -       -       0       i
 * >      RD: 5000:5000 mac-ip 4000 0050.7966.680d
                                 2001::5               -       100     0       i
VPCS> ping 192.168.1.2

84 bytes from 192.168.1.2 icmp_seq=1 ttl=64 time=18.365 ms
84 bytes from 192.168.1.2 icmp_seq=2 ttl=64 time=12.608 ms
84 bytes from 192.168.1.2 icmp_seq=3 ttl=64 time=15.013 ms
84 bytes from 192.168.1.2 icmp_seq=4 ttl=64 time=12.418 ms
84 bytes from 192.168.1.2 icmp_seq=5 ttl=64 time=12.830 ms


VPCS> ping 192.168.2.2

84 bytes from 192.168.2.2 icmp_seq=1 ttl=64 time=17.831 ms
84 bytes from 192.168.2.2 icmp_seq=2 ttl=64 time=12.216 ms
84 bytes from 192.168.2.2 icmp_seq=3 ttl=64 time=13.081 ms
84 bytes from 192.168.2.2 icmp_seq=4 ttl=64 time=12.657 ms
84 bytes from 192.168.2.2 icmp_seq=5 ttl=64 time=11.593 ms

La communication est OK dans les deux VLANs !

On peut très bien penser à un vlan-aware-bundle par client ? Un autre pour les besoins purement backbone opérateur ? Un autre pour la téléphonie ?

Suites et améliorations

J'espère vous avoir convaincu de la puissance de l'EVPN ! Cette extension BGP sait faire du L2 et du L3 nativement !

On a donc un backbone full core IPv6 qui fait circuler des routes v4, v6 et du L2 à travers de l'ISIS, du SR-MPLS et de l'EVPN.

Si ça c'est pas classe bordel !

On a pas encore exploité tout le potentiel du Segment Routing, si l'envie me prend de voir comment on fait un peu de trafic engineering, ca pourrait être cool à présenter dans un épisode.

En écrivant ces épisodes, je me suis rendu compte que mon DCI n'était clairement pas ouf. Il faudrait remplacer le VXLAN par du SR-MPLS/EVPN et ainsi profiter du multipath (et d'autres encore).

C'est ça que je trouve marrant dans le réseau : quand tu penses avoir trouvé une belle archi, t'as toujours des nouveautés et faut tout le temps te mettre à jour sinon t'es largué 😃

Et oui ! Il existe déjà une amélioration du SR-MPLS : le SRv6. De ce que je comprends, au lieu du MPLS, les "labels" (je ne sais pas si on peut vraiment les catégoriser comme label) vont être posés dans l'entête IPv6 !

Je termine sur un mot de fin : Ce qui reste du ministère de santé à Gaza a posté une vidéo de 59 minutes qui liste toutes les victimes du génocide en cours commis par les terroristes sionistes. La vidéo est là : https://x.com/AJEnglish/status/1843328881501073482
Les 19 premières minutes, ce sont des enfants. De simples gamins nés au mauvais moment au mauvais endroit.
Les 3 premières minutes, ce sont des enfants de moins de 3 ans.
La première minute, pour les enfants de moins de 1 an. Même pas 1 an de vie.

It is not a war but a genocide.