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.