Internet

đź’ˇ
Toutes les configurations sont commit sur mon github : https://github.com/Nathan0510/Blog

La fabric est maintenant opérationnelle, notre backbone MPLS aussi. C'est chouette mais pour que notre réseau communique avec Internet, il faut bien le "raccorder" à quelque chose.

On est un petit opérateur et, malheureusement, on est en bas de l'échelle ! On va donc utiliser les services d'un plus gros opérateur pour pouvoir joindre le graal : l'Internet ! Pour vous donner des exemples : Cogent, GTT, Orange, Hurricane sont des tiers 1. On va monter un process BGP entre nous et un Tier 1. Ces derniers vont nous router soit toute la table mondiale soit la 0/0. C'est ce qu'on va appeler le transit IP. Et nous, on va leur annoncer les subnets publiques qu'on possède.

Pour vous donner une ordre de grandeur, il y a 943 000 routes en IPv4 et 201 000 en IPv6.

A-t-on réellement besoin d'avoir la table mondiale BGP IPv4 et IPv6 ? Honnêtement, non. L'une des raisons de l'avoir serait soit de proposer du transit IP soit de faire une réelle ingénierie de trafic (décider quel flux sort sur quel transit, etc). Dans notre cas, petit opérateur oblige (et je suis d'avis que pour beaucoup d'opérateur, c'est inutile de l'avoir !), on va uniquement récupérer la route par défaut.

De plus, le prix des routeurs, qui sont suffisamment puissants pour accueillir la table mondiale, est très cher.

Allez un petit schéma provenant du site de l'ARCEP (https://www.arcep.fr/cartes-et-donnees/nos-publications-chiffrees/linterconnexion-de-donnees/barometre-de-linterconnexion-de-donnees-en-france.html) :

Montons le BGP entre notre BR et un tier 1. On verra par la suite comment les LNS feront pour communiquer avec le BR.


Configuration BGP BR / TIER 1

Finalement, j'ai décidé de partir sur un Arista pour mon BR. On essaye de se dégager du Cisco Forever ! De plus, on va faire atterrir le transit sur un port d'un leaf. Pourquoi ?

Imaginons, on branche en direct le transit IP sur le BR et qu'on perde l'interco BR et notre fabric ? On continuera d'annoncer sur Internet nos subnets ! Et là, on a plus que nos yeux pour pleurer car notre BR sera injoignable du côté de notre backbone.

Les ports et1 et 2 du BR seront reliés sur le MLAG des Leaf B2 et le port eth3 sera l'interco avec le routeur Internet (Cogent).

Allez, on maj la topologie :

Comme vous l'avez deviné, c'est dans la configuration BGP du BR que cela va se passer. Mais d'abord, la prefix-list (PL) et la route-map (RM).

Une PL pour nos subnets public qu'on met dans une RM.

BR#sh run | s OWN_SUBNET
ip prefix-list PL_OWN_SUBNET
   seq 10 permit 109.205.64.0/22
   seq 20 permit 185.17.56.0/24
route-map RM_OWN_SUBNET permit 10
   match ip address prefix-list PL_OWN_SUBNET

Pas besoin en IN car on souhaite récupérer la default route !

BR#sh run | s bgp
  router bgp 57752
   neighbor 140.150.160.2 remote-as 174
   neighbor 140.150.160.2 description TRANSIT_COGENT
   neighbor 140.150.160.2 route-map RM_OWN_SUBNET out
   !
   address-family ipv4
      neighbor 140.150.160.2 activate
      network 109.205.64.0/22
      network 185.17.56.0/24

On peer avec l'AS 174 en eBGP. Pour rappel, dans le cas de l'eBGP (BGP entre 2 AS différentes), on va utiliser l'IP d'interco pour peer. Pas besoin d'utiliser de loopback ! On lie le peer avec la route-map voulue en IN et on annonce les préfixes qu'on possède.

Pourquoi avoir choisi une autre AS que nos LNS ?

Il faut savoir qu'il existe des AS dit privées, c'est à dire, des AS qui ne sont pas annoncées sur Internet. On peut s'en servir pour monter des peer BGP en interne au sein de notre backbone. Je ne voulais pas que les LNS portent l'AS public mais uniquement le BR.

(64.512 – 65.534 = range d'AS privées).

Affichons la table de routage pour voir si on a bien la 0/0 :

BR#sh ip route
Gateway of last resort:
 B E      0.0.0.0/0 [200/0] via 140.150.160.2, Ethernet3.100
 C        140.150.160.0/30 is directly connected, Ethernet3.100

Et du côté de Internet ?

Cogent#sh ip route
Gateway of last resort is not set

      140.150.0.0/16 is variably subnetted, 2 subnets, 2 masks
C        140.150.160.0/30 is directly connected, GigabitEthernet1
L        140.150.160.2/32 is directly connected, GigabitEthernet1


BR#sh ip bgp neighbors 140.150.160.2 advertised-routes
          Network                Next Hop              Metric  AIGP       LocPref Weight  Path

Pourquoi on annonce rien ?

Parce qu'une route qui n'est pas apprise par un IGP ne peut pas être annoncée en EGP ! Il faut donc que notre BR ait dans sa table de routage nos préfixes mais comment faire ?

On va utiliser le principe d'un trou noir.

BR#sh run | i  route
ip route 109.205.64.0/22 Null0
ip route 185.17.56.0/24 Null0

On route nos subnets vers l'interface Null0 qui est le trou noir. Les préfixes seront appris et donc inscrit dans la table de routage du BR :

BR#sh ip route
Gateway of last resort:
 B E      0.0.0.0/0 [200/0] via 140.150.160.2, Ethernet3.100
 S        109.205.64.0/22 is directly connected, Null0
 C        140.150.160.0/30 is directly connected, Ethernet3.100
 S        185.17.56.0/24 is directly connected, Null0

BR#sh ip bgp neighbors 140.150.160.2 advertised-routes
          Network                Next Hop              Metric  AIGP       LocPref Weight  Path
 * >      109.205.64.0/22        140.150.160.1         -       -          -       -       57752 ?
 * >      185.17.56.0/24         140.150.160.1         -       -          -       -       57752 ?

Et du côté de Cogent :

Cogent#sh ip route
      109.0.0.0/22 is subnetted, 1 subnets
B        109.205.64.0 [20/0] via 140.150.160.1, 00:02:21
      140.150.0.0/16 is variably subnetted, 2 subnets, 2 masks
C        140.150.160.0/30 is directly connected, GigabitEthernet1
L        140.150.160.2/32 is directly connected, GigabitEthernet1
      185.17.0.0/24 is subnetted, 1 subnets
B        185.17.56.0 [20/0] via 140.150.160.1, 00:02:14 

Pour le petit test, on met une Loopback portant l'IP 1.1.1.1 sur le routeur de cogent et on ping Ă  partir du BR :

BR#ping 1.1.1.1
PING 1.1.1.1 (1.1.1.1) 72(100) bytes of data.
80 bytes from 1.1.1.1: icmp_seq=1 ttl=255 time=3.64 ms
80 bytes from 1.1.1.1: icmp_seq=2 ttl=255 time=3.20 ms
80 bytes from 1.1.1.1: icmp_seq=3 ttl=255 time=2.52 ms
80 bytes from 1.1.1.1: icmp_seq=4 ttl=255 time=2.50 ms
80 bytes from 1.1.1.1: icmp_seq=5 ttl=255 time=2.53 ms

--- 1.1.1.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 15ms
rtt min/avg/max/mdev = 2.500/2.877/3.637/0.463 ms, ipg/ewma 3.823/3.231 ms

Top ! Notre BR arrive bien Ă  joindre Internet. Maintenant, il faut que nos PE (nos LNS) puissent eux aussi joindre Internet !

Allez, on fait la mĂŞme chose pour l'IPv6 quand mĂŞme !

BR#sh run | s bgp
  router bgp 57752
   neighbor 2001:abcd:abcd:: remote-as 174
   neighbor 2001:abcd:abcd:: description TRANSIT_COGENT_V6
   neighbor 2001:abcd:abcd:: route-map RM_OWN_SUBNET_V6 out
   !
   address-family ipv6
      neighbor 2001:abcd:abcd:: activate
      network 2001:cafe::/32
      network 2001:dead::/32

BR#sh ipv6 route
 C        2001:abcd:abcd::/127 [0/0]
           via Ethernet3.100, directly connected
 S        2001:cafe::/32 [1/0]
           Null0
 S        2001:dead::/32 [1/0]
           Null0
 B E      ::/0 [200/0]
           via 2001:abcd:abcd::, Ethernet3.100


Cogent#sh ipv6 route
C   2001:ABCD:ABCD::/127 [0/0]
     via GigabitEthernet1, directly connected
L   2001:ABCD:ABCD::/128 [0/0]
     via GigabitEthernet1, receive
B   2001:CAFE::/32 [20/0]
     via 2001:ABCD:ABCD::1
B   2001:DEAD::/32 [20/0]
     via 2001:ABCD:ABCD::1
L   FF00::/8 [0/0]
     via Null0, receive

Interco BR / Fabric

Comme pour les LNS, on va profiter du MLAG entre les Leaf3 et 4.

Leaf4-B2#sh mlag interfaces 11
                                                                   local/remote
  mlag      desc                 state       local       remote          status
--------- ------------- ----------------- ----------- ------------ ------------
    11      PO_IN_BR       active-full        Po11         Po11           up/up

Configuration BGP BR / LNS

On va partir du mĂŞme principe que les intercos LNS : tous dans le mĂŞme niveau 2.

Routeurs AS Interco v4 Interco v6
LNS1 64555 100.65.0.1/29 2001:DEAD:CAFE:BEEF::1/125
LNS2 64555 100.65.0.2/29 2001:DEAD:CAFE:BEEF::2/125
BR 57752 100.65.0.6/29 2001:DEAD:CAFE:BEEF::6/125

Allez, on propage le VLAN 11 avec sa VNI dans notre fabric. Et on monte les interco BGP :

LNS1#sh run | s bgp
router bgp 64555
 neighbor 100.65.0.6 remote-as 57752
 !
 address-family ipv4
  neighbor 100.65.0.6 activate
 exit-address-family

LNS2#sh run | s bgp
router bgp 64555
 neighbor 100.65.0.6 remote-as 57752
 !
 address-family ipv4
  neighbor 100.65.0.6 activate
 exit-address-family

BR#sh run | s bgp
router bgp 57752
   neighbor LNS peer group
   neighbor LNS remote-as 64555
   neighbor 100.65.0.1 peer group LNS
   neighbor 100.65.0.1 route-map RM_DEFAULT_ROUTE out
   neighbor 100.65.0.2 peer group LNS
   neighbor 100.65.0.2 route-map RM_DEFAULT_ROUTE out

Pas grand chose ! On peer juste avec entre les LNS et BR. Petite particularité sur le BR avec un peer group LNS et une route map en out pour n'autoriser seulement que la default route.

Bon, créons une loopback avec une IP Publique sur LNS1, normalement, on devrait pouvoir joindre Internet !

LNS1#sh run int lo55
interface Loopback55
 ip address 109.205.66.127 255.255.255.255
end

LNS1#ping 1.1.1.1 source Lo55
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 1.1.1.1, timeout is 2 seconds:
Packet sent with a source address of 109.205.66.127
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 15/17/21 ms

NICKEL ! Enfin nos PE peuvent joindre le net. Toutes les sessions clientes auront, par la même occasion, accès au Graal ! Notre business va peut-être enfin commencer ?

Et pour la partie v6 :

LNS2#sh run | s bgp
router bgp 64555
 neighbor 2001:DEAD:CAFE:BEEF::6 remote-as 57752
 !
 address-family ipv6
  neighbor 2001:DEAD:CAFE:BEEF::6 activate
 exit-address-family

LNS1#sh run | s bgp
router bgp 64555
 neighbor 2001:DEAD:CAFE:BEEF::6 remote-as 57752
 !
 address-family ipv6
  neighbor 2001:DEAD:CAFE:BEEF::6 activate
 exit-address-family

BR#sh run | s bgp
router bgp 57752
   neighbor LNS_V6 peer group
   neighbor LNS_V6 remote-as 64555
   neighbor 2001:dead:cafe:beef::1 peer group LNS_V6
   neighbor 2001:dead:cafe:beef::1 route-map RM_DEFAULT_ROUTE_V6 out
   neighbor 2001:dead:cafe:beef::2 route-map RM_DEFAULT_ROUTE_V6 out
   neighbor 2001:dead:cafe:beef::2 peer group LNS_V6
   !
   address-family ipv6
      neighbor 2001:dead:cafe:beef::1 activate
      neighbor 2001:dead:cafe:beef::2 activate


LNS1#sh bgp ipv6 sum
2001:DEAD:CAFE:BEEF::6
                4        57752      11      13       10    0    0 00:02:14        1

LNS1#sh ipv6 route
B   ::/0 [20/0]
     via 2001:DEAD:CAFE:BEEF::6
LC  2001:DEAD:C0CA:C01A::1/128 [0/0]
     via Loopback1, receive
I2  2001:DEAD:C0CA:C01A::2/128 [115/20]
     via FE80::21E:7AFF:FE79:21C9, Port-channel10.10
C   2001:DEAD:CAFE:BABE::/125 [0/0]
     via Port-channel10.10, directly connected
L   2001:DEAD:CAFE:BABE::1/128 [0/0]
     via Port-channel10.10, receive
C   2001:DEAD:CAFE:BEEF::/125 [0/0]
     via Port-channel10.11, directly connected
L   2001:DEAD:CAFE:BEEF::1/128 [0/0]
     via Port-channel10.11, receive
L   FF00::/8 [0/0]
     via Null0, receive

Nos LNS récupèrent bien la default route v6 grâce au peer BGP avec le BR.


Récap et suite

Episode très important ! Maintenant notre backbone a accès au net.

Notre transit IP (v4 et v6) est opérationnel, nos intercos entre LNS et BR aussi, on va enfin commencer à produire des liaisons clientes ?

Allez prochain épisode, la première collecte L2 montée en PPP !

Je termine sur un petit mot de fin : Shisui, la fraude, est surcoté 🥷🥷