DCI - 2ème partie

💡
Toutes les configurations sont commit sur mon github : https://github.com/Nathan0510/Blog

Configuration

Datacenter 2

Je ne vais pas repasser sur la configuration de l'underlay et de l'overlay pour le nouveau datacenter. C'est exactement la même configuration que pour les épisodes qui traitent de ce sujet.

Switchs AS BGP Loopback1 Control Plane Loopback2 Data Plane
Leaf1 65101 2001:172:16:10::1/128 2001:172:16:20::1/128
Leaf2 65101 2001:172:16:10::2/128 2001:172:16:20::2/128
Leaf3 65102 2001:172:16:10::3/128 2001:172:16:20::3/128
Leaf4 65102 2001:172:16:10::4/128 2001:172:16:20::4/128
Spine1 65100 2001:172:16:10::10/128
Spine2 65100 2001:172:16:10::20/128
Spine1-C1#sh bgp evpn summary
BGP summary information for VRF default
Router identifier 172.16.2.10, local AS number 65100
Neighbor Status Codes: m - Under maintenance
  Neighbor          V AS           MsgRcvd   MsgSent  InQ OutQ  Up/Down State   PfxRcd PfxAcc
  2001:172:16:10::1 4 65101           1017      1024    0    0 04:35:56 Estab   32     32

DCI

Le gros problème qu'on a, c'est de lier chaque spine à chaque leaf. Pour des raisons de coûts, on va pas les relier physiquement mais logiquement ! Au final, ce qu'on a besoin c'est que les Leafs de DC1 connaissent les IPs de DC2 et inversement, n'est ce pas ?

Ce qui nous importe est uniquement de monter les peer de l'overlay !

Mais pour monter ces peers, il faut connaître les IPs des Spines et pas question de faire l'underlay en link-local ipv6 ! (Ca ne fonctionnerai pas)

On va donc utiliser le principe de border leaf :

Les border leafs auront une seule et unique mission ! Faire apprendre à l'autre borderleaf, les IPs de son DC !

Les border leafs seront branchés sur les Spines en double adduction.

Optimisation/préparation BGP Leaf/Spine

Avant toute chose, je me suis aperçu que la conf des BGP peut être améliorée !

Pour les Leafs, ces derniers vont devoir peer avec les Spines des autres DC, ils font donc augmenter le TTL dans la trame eBGP, le multihop ! On le passe à 5.

Pour les Spines, il s'est passé un truc très intéressant que je n'avais pas du tout anticipé ! Une fois les peers EVPN de montés, il y avait une apprentissage des routes via les peerings overlay !

C'est à dire, qu'une fois l'EVPN de UP entre Spine1-B1 et Leaf1-C1, les IPs de DC1 sur Leaf1-C1 étaient appris via le peering EVPN et non plus via Spine1-C1 via BorderLeaf-C1, ce qui faisait, grosso modo, tout planter 😄

La raison ?

L'AS PATH ! Bah oui, BGP préfère une route avec deux AS plutôt que 5 !

Il faut donc refuser la diffusion des routes IPv6 dans les peerings BGP pour l'overlay. Mais comment ?

Spine1-C1#sh run | s BLOCK_ROUTE
route-map BLOCK_ROUTE deny 10
router bgp 65100
   address-family ipv6
      neighbor GROUP_OVERLAY route-map BLOCK_ROUTE in
      neighbor GROUP_OVERLAY route-map BLOCK_ROUTE out

On créer une route-map qui deny tout et on la place en entrée et en sortie de l'address family IPv6 pour le groupe overlay.

Il y a aussi le nouveau range du BGP en mode écoute :

Spine1-C1#sh run | s PF_FABRIC_AS_DC1
peer-filter PF_FABRIC_AS_DC1
   10 match as-range 65001-65099 result accept
router bgp 65100
   bgp listen range 2001:172:16:1::/64 peer-group GROUP_OVERLAY peer-filter PF_FABRIC_AS_DC1

Spine1-B1#sh run | s PF_FABRIC_AS_DC2
peer-filter PF_FABRIC_AS_DC2
   10 match as-range 65101-65199 result accept
router bgp 65000
   bgp listen range 2001:172:16:10::/64 peer-group GROUP_OVERLAY peer-filter PF_FABRIC_AS_DC2

Configuration BGP BorderLeaf

Switchs AS BGP Loopback1 Control Plane
BorderLeaf-B2 65099 2001:172:16:1::5/128
BorderLeaf-C1 65199 2001:172:16:10::5/128

Me diriez vous, les loopback ne servent à rien (car les BordeLeafs circulent uniquement l'underlay). Je dois penser à les supprimer d'ailleurs.

Je me suis fait pas chié pour les intercos Spine/BorderLeaf ! Je suis parti sur la même solution que l'underlay : les link local IPv6 !

interface Ethernet1
   mtu 9214
   no switchport
   ipv6 enable
!
interface Ethernet5
   mtu 9214
   no switchport
   ipv6 enable
!
interface Ethernet6
   mtu 9214
   no switchport
   ipv6 enable
!
router bgp 65099
   router-id 172.16.1.5
   bgp default ipv6-unicast
   timers bgp 30 60
   distance bgp 20 200 200
   maximum-paths 8 ecmp 16
   neighbor GROUP_UNDERLAY peer group
   neighbor GROUP_UNDERLAY rib-in pre-policy retain all
   redistribute connected route-map RM_UNDERLAY_LO
   neighbor interface Et5-6 peer-group GROUP_UNDERLAY remote-as 65000

Où dans RM_UNDERLAY_LO, il y a l'IPv6 de la Loopback

BorderLeaf-B2#sh ipv6 bgp summary
BGP summary information for VRF default
Router identifier 172.16.1.5, local AS number 65099
Neighbor Status Codes: m - Under maintenance
  Neighbor                    V AS           MsgRcvd   MsgSent  InQ OutQ  Up/Down State   PfxRcd PfxAcc
  fe80::5200:ff:fe15:f4e8%Et5 4 65000           1060      1063    0    0 04:59:13 Estab   9      9
  fe80::5200:ff:fe72:8b31%Et6 4 65000           1060      1065    0    0 04:59:09 Estab   9      9

BorderLeaf-B2#sh ipv6 route

VRF: default
Displaying 11 of 14 IPv6 routing table entries
Codes: C - connected, S - static, K - kernel, O3 - OSPFv3,
       B - Other BGP Routes, A B - BGP Aggregate, R - RIP,
       I L1 - IS-IS level 1, I L2 - IS-IS level 2, DH - DHCP,
       NG - Nexthop Group Static Route, M - Martian,
       DP - Dynamic Policy Route, L - VRF Leaked,
       G  - gRIBI, RC - Route Cache Route,
       CL - CBF Leaked Route

 B E      2001:172:16:1::1/128 [20/0]
           via fe80::5200:ff:fe15:f4e8, Ethernet5
           via fe80::5200:ff:fe72:8b31, Ethernet6
 B E      2001:172:16:1::2/128 [20/0]
           via fe80::5200:ff:fe15:f4e8, Ethernet5
           via fe80::5200:ff:fe72:8b31, Ethernet6
 B E      2001:172:16:1::3/128 [20/0]
           via fe80::5200:ff:fe15:f4e8, Ethernet5
           via fe80::5200:ff:fe72:8b31, Ethernet6
 B E      2001:172:16:1::4/128 [20/0]
           via fe80::5200:ff:fe15:f4e8, Ethernet5
           via fe80::5200:ff:fe72:8b31, Ethernet6
 C        2001:172:16:1::5/128 [0/0]
           via Loopback1, directly connected
 B E      2001:172:16:1::10/128 [20/0]
           via fe80::5200:ff:fe15:f4e8, Ethernet5
 B E      2001:172:16:1::20/128 [20/0]
           via fe80::5200:ff:fe72:8b31, Ethernet6
 B E      2001:172:16:2::1/128 [20/0]
           via fe80::5200:ff:fe15:f4e8, Ethernet5
           via fe80::5200:ff:fe72:8b31, Ethernet6
 B E      2001:172:16:2::2/128 [20/0]
           via fe80::5200:ff:fe15:f4e8, Ethernet5
           via fe80::5200:ff:fe72:8b31, Ethernet6
 B E      2001:172:16:2::3/128 [20/0]
           via fe80::5200:ff:fe15:f4e8, Ethernet5
           via fe80::5200:ff:fe72:8b31, Ethernet6
 B E      2001:172:16:2::4/128 [20/0]
           via fe80::5200:ff:fe15:f4e8, Ethernet5
           via fe80::5200:ff:fe72:8b31, Ethernet6

On fait la même chose pour l'autre borderleaf. Et je sais pas si vous avez remarqué, mais aucune configuration de touchée pour l'underlay sur les Spines ! C'est ça d'avoir réfléchit dès le début du montage de la fabric 😏😏

Et maintenant, attaquons nous au BGP entre ces deux équipements !

Tout d'abord, on crée deux prefix list avec les IPs de DC1 et DC2 et on les place dans une route map différente :

ipv6 prefix-list PL_DC1_LO
   seq 10 permit 2001:172:16:1::10/128
   seq 20 permit 2001:172:16:1::20/128
   seq 30 permit 2001:172:16:1::1/128
   seq 40 permit 2001:172:16:1::2/128
   seq 50 permit 2001:172:16:1::3/128
   seq 60 permit 2001:172:16:1::4/128
   seq 65 permit 2001:172:16:1::5/128
   seq 70 permit 2001:172:16:2::1/128
   seq 80 permit 2001:172:16:2::2/128
   seq 90 permit 2001:172:16:2::3/128
   seq 100 permit 2001:172:16:2::4/128
!
ipv6 prefix-list PL_DC2_LO
   seq 10 permit 2001:172:16:10::10/128
   seq 20 permit 2001:172:16:10::20/128
   seq 30 permit 2001:172:16:10::1/128
   seq 40 permit 2001:172:16:10::2/128
   seq 50 permit 2001:172:16:10::3/128
   seq 60 permit 2001:172:16:10::4/128
   seq 65 permit 2001:172:16:10::5/128
   seq 70 permit 2001:172:16:20::1/128
   seq 80 permit 2001:172:16:20::2/128
   seq 90 permit 2001:172:16:20::3/128
   seq 100 permit 2001:172:16:20::4/128
!
route-map RM_BORDERLEAF_IN permit 10
   match ipv6 address prefix-list PL_DC2_LO
!
route-map RM_BORDERLEAF_OUT permit 10
   match ipv6 address prefix-list PL_DC1_LO  

Ensuite, pas bien compliqué ! On peer avec l'interface d'interco entre ces deux leafs :

router bgp 65099
   neighbor GROUP_BORDERLEAF peer group
   neighbor GROUP_BORDERLEAF rib-in pre-policy retain all
   neighbor GROUP_BORDERLEAF route-map RM_BORDERLEAF_IN in
   neighbor GROUP_BORDERLEAF route-map RM_BORDERLEAF_OUT out
   neighbor interface Et1 peer-group GROUP_BORDERLEAF remote-as 65199

Bien sûr, sur l'autre leaf, il faut inverser les deux route-map 😋

BorderLeaf-B2#sh ipv6 bgp summary
  fe80::5200:ff:feba:c6f8%Et1 4 65199             23        23    0    0 00:04:22 Estab   4      4

BorderLeaf-B2#sh ipv6 route
 B E      2001:172:16:10::1/128 [20/0]
           via fe80::5200:ff:feba:c6f8, Ethernet1
 B E      2001:172:16:10::5/128 [20/0]
           via fe80::5200:ff:feba:c6f8, Ethernet1
 B E      2001:172:16:10::10/128 [20/0]
           via fe80::5200:ff:feba:c6f8, Ethernet1
 B E      2001:172:16:20::1/128 [20/0]
           via fe80::5200:ff:feba:c6f8, Ethernet1  

Le BGP monte bien et on apprend bien les IPs de DC2 sur BorderLeaf-B2 (bon OK j'ai branché que 3 équipements dans DC2, mon serveur chez OVH est en overdose si je lance tout 😃)

Côté Leaf1-C1, on apprend bien la route vers les Spines de DC1 ! Et inversement pour les Leafs DC1 qui apprennent les IPs des Spines de DC2.

Leaf1-C1#sh ipv6 route 2001:172:16:1::10/128

VRF: default
Routing entry for 2001:172:16:1::10/128
Codes: C - connected, S - static, K - kernel, O3 - OSPFv3,
       B - Other BGP Routes, A B - BGP Aggregate, R - RIP,
       I L1 - IS-IS level 1, I L2 - IS-IS level 2, DH - DHCP,
       NG - Nexthop Group Static Route, M - Martian,
       DP - Dynamic Policy Route, L - VRF Leaked,
       G  - gRIBI, RC - Route Cache Route,
       CL - CBF Leaked Route

 B E      2001:172:16:1::10/128 [20/0]
           via fe80::5200:ff:fe88:2ff3, Ethernet1

On fait le BGP pour l'EVPN :

router bgp 65101
   neighbor GROUP_OVERLAY peer group
   neighbor GROUP_OVERLAY update-source Loopback1
   neighbor GROUP_OVERLAY ebgp-multihop 5
   neighbor GROUP_OVERLAY send-community extended
   neighbor 2001:172:16:1::10 peer group GROUP_OVERLAY
   neighbor 2001:172:16:1::10 remote-as 65000
   neighbor 2001:172:16:1::10 description Spine1
   neighbor 2001:172:16:1::20 peer group GROUP_OVERLAY
   neighbor 2001:172:16:1::20 remote-as 65000
   neighbor 2001:172:16:1::20 description Spine2
   neighbor 2001:172:16:10::10 peer group GROUP_OVERLAY
   neighbor 2001:172:16:10::10 remote-as 65100
   neighbor 2001:172:16:10::10 description Spine1-C1
   neighbor 2001:172:16:10::20 peer group GROUP_OVERLAY
   neighbor 2001:172:16:10::20 remote-as 65100
   neighbor 2001:172:16:10::20 description Spine2-C2
!
   address-family evpn
      neighbor GROUP_OVERLAY activate

Les sessions EVPN montent bien !

Leaf1-C1#sh bgp evpn summary
BGP summary information for VRF default
Router identifier 172.16.3.1, local AS number 65101
Neighbor Status Codes: m - Under maintenance
  Description              Neighbor           V AS           MsgRcvd   MsgSent  InQ OutQ  Up/Down State   PfxRcd PfxAcc
  Spine1                   2001:172:16:1::10  4 65000             86        75    0    0 00:17:15 Estab   16     16
  Spine2                   2001:172:16:1::20  4 65000             88        93    0    0 00:17:15 Estab   16     16
  Spine1-C1                2001:172:16:10::10 4 65100             82        94    0    0 00:17:17 Estab   16     16
  Spine2-C2                2001:172:16:10::20 4 65100              0         0    0    0 00:17:28 Active

Ca m'a l'air pas mal tout ça, nan ? Allez, on monte le premier LNS à DC2 ! (Propagation du VLAN et tout le tralalala).

LNS3#sh run int gi1.10
interface GigabitEthernet1.10
 description L2-LNS-ISIS
 encapsulation dot1Q 10
 ip address 100.64.0.3 255.255.255.248
 ip router isis
 ipv6 address 2001:DEAD:CAFE:BABE::3/125
 ipv6 router isis
end

  
LNS3#sh isis neighbors
System Id       Type Interface     IP Address      State Holdtime Circuit Id
LNS1            L2   Gi1.10        100.64.0.1      UP    26       LNS3.01    


LNS3#ping 100.127.0.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 100.127.0.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 16/74/302 ms

Les émotions 🤩🤩🤩 CA MARCHE !

Côté Leaf, on apprend bien les MAC dans la VNI 100010 :

Leaf1-C1#sh bgp evpn route-type mac-ip
BGP routing table information for VRF default
Router identifier 172.16.3.1, local AS number 65101
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
 * >Ec    RD: 65001:100010 mac-ip 001e.bd42.cac9
                                 2001:172:16:2::1      -       100     0       65000 65001 i
 *  ec    RD: 65001:100010 mac-ip 001e.bd42.cac9
                                 2001:172:16:2::1      -       100     0       65100 65001 i
 *  ec    RD: 65001:100010 mac-ip 001e.bd42.cac9
                                 2001:172:16:2::1      -       100     0       65000 65001 i
 * >      RD: 65101:100010 mac-ip 5000.0029.0000
                                 -                     -       -       0       i

Conclusion

ENORME épisode ! Surement le plus dense et le plus fourre tout depuis la création de ce blog.

J'ai bien aimé me replonger dans mes cours de télécoms et de maths, c'était assez marrant lol 😃

Notre interco entre nos deux datacenters est montée. Il nous reste plus qu'à monter les nouveaux LNS et un nouveau transit pour faire notre grand PRA/PCA 🤩🤩

Ca sera probablement l'un des derniers épisodes infrastructure. Si ajout de nouveau datacenter, je repartirai sur cette architecture. Il me reste la virtualisation/conteneurisation des CPE à faire (coucou Luc).

Je termine sur un petit mot de fin : Habituellement, je termine sur un mot sur naruto, étant son plus grand fan mais envie de changer. Depuis presque 1 an (si ce n'est depuis 1947), sous prétexte d'être né de l'autre côté de la frontière et dans l'indifférence la plus totale, un génocide est en cours dans la bande de gaza, commis par les terroristes sionistes. Cela rappelle les heures les plus sombres de l'histoire de l'humanité pour laquelle toute une génération s'est sacrifiée pour se battre contre les idéologies nazistes. Bien évidemment qu'on encule isramerde. FREE PALESTINE FUCK ISRAEL FUCK HAMAS FUCK LES SIONISTES