La summarization
Quand on passe d’un bloc de réseau à un autre, il est de bon goût de cacher la complexité du bloc qu’on quitte.
En routage statique, ce concept est aussi ancien que le routage lui-même et s’appelle le Supernetting.
En routage dynamique, c’est la summarization (désolé pour la mauvaise traduction, mais je ne trouve pas vraiment mieux). On définit des Summary-address qui cachent explicitement le réseau interne avant de l’annoncer vers l’extérieur.
Prenons le réseau suivant :
Et si mon exemple est un peu Old School, ce cas d’école revient dans de très nombreuses topologies, par exemple, dans le monde MPLS/L3VPN :
Ou encore dans le monde Cloud/SD-WAN :
Avant d’annoncer les routes des distants à l’étage supérieur, un bon design prend garde à n’annoncer qu’un supernet regroupant l’ensemble des adresses distantes.
Les gains sont multiples :
- Gain en ressources mémoire, car n’y a qu’une route annoncée
- Gain en ressources hardware, ce qui est significatif sur un switch de niveau 3 qui ne gère qu’un nombre de route limité, ou vers un routeur cloud comme la transit Gateway d’AWS qui supporte la réception de seulement 1000 préfixes
- Gain en ressources CPU, car le routeur n’est pas perturbé par un changement de topologie survenu sur les distants.
- Et surtout exploitation plus facile sur le routeur du niveau supérieur, car la localisation des fautes est plus aisée
En contrepartie :
- Le réseau est un peu plus rigide (pas de possibilité simple d’interconnecter un distant directement avec le réseau 1 pour du backup)
- Le routage peut ne pas être optimal si un lien distant/Hub est tombé
- Il y a un peu plus de complexité sur l’agrégation pour créer ces routes summary.
Le but de cet article est de lister les bonnes pratiques de configuration, pour les IGP, comme pour BGP.
Configuration
Nous travaillons sur le lab suivant :
En EIGRP, la configuration du niveau d’agrégation se fait sur les liens supérieurs :
ce-11(config)#router eigrp 100
ce-11(config-router)# network 10.0.0.0
ce-11(config)#int eth 0/0
ce-11(config-if)#ip summary-address eigrp 100 192.168.0.0/16
Le routeur supérieur ne voit plus qu’un supernet annoncé en partage de charge par les deux routeurs d’agrégation
ce-1#sh ip route | begin 192.168
D 192.168.0.0/16 [90/332800] via 10.1.12.1, 00:01:50, Ethernet0/2
[90/332800] via 10.1.11.1, 00:01:50, Ethernet0/1
ce-1#
En OSPF, la summarization est configurée sur les ABR, en sortie d’une aire. Il faut donc créer au moins 2 aires dont une aire backbone. Le lien inter-hub est dans la même aire que les sites distants.
ce-11(config)#router ospf 11
ce-11(config-router)# area 100 range 192.168.0.0 255.255.0.0
ce-11(config-router)# network 10.0.0.1 0.0.0.0 area 100
ce-11(config-router)# network 10.1.11.1 0.0.0.0 area 0
ce-11(config-router)# network 10.101.11.1 0.0.0.0 area 100
ce-11(config-router)# network 10.102.11.1 0.0.0.0 area 100
A nouveau, le routeur supérieur ne voit plus qu’un supernet :
ce-1#sh ip route | begin 192.168
O IA 192.168.0.0/16 [110/30] via 10.1.12.1, 00:02:19, Ethernet0/2
[110/30] via 10.1.11.1, 00:02:19, Ethernet0/1
ce-1#
En ISIS, ce sont les routeurs qui appartiennent aux aires et non les liens, on s’en sort en configurant les 2 routeurs Hubs à la fois dans l’aire backbone de niveau 2 et dans l’aire de niveau 1 commune avec les distants.
ce-11(config-router)#router isis OS
ce-11(config-router)# net 49.0000.0000.0011.00
ce-11(config-router)# is-type level-1-2
ce-11(config-router)# log-adjacency-changes
ce-11(config-router)# summary-address 192.168.0.0 255.255.0.0
ce-11(config-router)#int range eth 0/0 - 3
ce-11(config-if-range)#ip router isis OS
ce-1#sh ip route | begin 192.168
i L2 192.168.0.0/16 [115/30] via 10.1.12.1, 00:01:14, Ethernet0/2
[115/30] via 10.1.11.1, 00:01:14, Ethernet0/1
En BGP, le réseau est scindé en AS et l’adhérence entre voisins et liens n’existe plus.
L’agrégation se fait au niveau du process et la configuration devient :
ce-11(config)#router bgp 65000
ce-11(config-router)# bgp log-neighbor-changes
ce-11(config-router)# neighbor 10.0.0.2 remote-as 65000
ce-11(config-router)# neighbor 10.0.0.2 route-reflector-client
ce-11(config-router)# neighbor 10.1.11.2 remote-as 100
ce-11(config-router)# neighbor 10.101.11.2 remote-as 65000
ce-11(config-router)# neighbor 10.102.11.2 remote-as 65000
ce-11(config-router)# aggregate-address 192.168.0.0 255.255.0.0 summary-only
ce-11(config-router)#
Le partage de charge est configuré explicitement sur le routeur supérieur :
ce-1(config)#router bgp 100
ce-1(config-router)#maximum-paths 2
ce-1(config-router)#neighbor 10.1.11.1 remote-as 65000
ce-1(config-router)#neighbor 10.1.12.1 remote-as 65000
ce-1(config-router)#
ce-1#sh ip route | begin 192.168
B 192.168.0.0/16 [20/0] via 10.1.12.1, 00:01:00
[20/0] via 10.1.11.1, 00:01:05
ce-1#
La route vers Null0 pour se protéger des boucles
Dans tous les cas, le routeur qui effectué la summarization crée explicitement une route locale pour dropper les paquets n’ayant pas de routes précises.
ce-11#sh ip route | begin 192.168
D 192.168.0.0/16 is a summary, 00:01:13, Null0
D 192.168.101.0/24 [90/307200] via 10.101.11.2, 00:01:22, Ethernet0/1
D 192.168.102.0/24 [90/307200] via 10.102.11.2, 00:01:22, Ethernet0/2
ce-11#
ce-11#sh ip route | begin 192.168
O 192.168.0.0/16 is a summary, 00:01:28, Null0
O 192.168.101.0/24 [110/20] via 10.101.11.2, 00:01:28, Ethernet0/1
O 192.168.102.0/24 [110/20] via 10.102.11.2, 00:01:08, Ethernet0/2
ce-11#
ce-11#sh ip route | begin 192.168
i su 192.168.0.0/16 [115/20], 00:00:39, Null0
i L1 192.168.101.0/24 [115/20] via 10.101.11.2, 00:03:12, Ethernet0/1
i L1 192.168.102.0/24 [115/20] via 10.102.11.2, 00:03:12, Ethernet0/2
ce-11#
ce-11#sh ip route | begin 192.168
B 192.168.0.0/16 [200/0], 00:01:25, Null0
B 192.168.101.0/24 [200/0] via 10.101.11.2, 00:01:25
B 192.168.102.0/24 [200/0] via 10.102.11.2, 00:01:25
ce-11#
Non sans impact sur les routeurs d’agrégation
En effet, à cause de la présence des routes agrégées vers Null, la panne d’un des liens Spoke/Hub n’est pas couverte. Le Hub va dropper la trame, plutôt que la transmettre à son collègue qui, lui, peut toujours atteindre le distant.
Pour permettre de résoudre un cas de panne (un distant perd une connexion avec un Hub), les routes fines doivent être échangées entre les Hubs.
- C’est natif en EIGRP
- En OSPF, nous avons placé le lien inter-Hub dans la même aire que les distants
- En ISIS, nous avons configuré le lien inter-Hub à la fois en niveau 1 et en niveau 2
En BGP, même si la configuration est proche, l’agrégation se fait de manière globale. Ce qui signifie qu’ avec BGP, l’ensemble de mon réseau est impacté par l’agrégation alors qu’en IGP, l’étage inférieur est tenu à l’écart de l’agrégation.
On s’en convainc facilement en regardant la table de routage d’un distant :
ce-101#sh ip route | begin 192.168
B 192.168.0.0/16 [200/0] via 10.101.11.1, 00:01:45
192.168.101.0/24 is variably subnetted, 2 subnets, 2 masks
C 192.168.101.0/24 is directly connected, Ethernet0/0
L 192.168.101.1/32 is directly connected, Ethernet0/0
ce-101#
Et sur les hubs, c’est la cata : nous annonçons comme à n’importe quel voisin seulement la route agrégée :
ce-11#sh bgp ipv4 unicast neighbors 10.0.0.2 advertised-routes
[…]
Network Next Hop Metric LocPrf Weight Path
*> 192.168.0.0/16 0.0.0.0 32768 i
Total number of prefixes 1
ce-11#
Pour se ramener à un configuration de type IGP, où les Hubs s’échangent les routes fines, nous utilisons une extension de BGP qui supprime l’agrégation pour un peer donné.
La configuration se fait de la façon suivante :
ce-11#conf t
Enter configuration commands, one per line. End with CNTL/Z.
ce-11(config)#router bgp 65000
ce-11(config-router)#neighbor 10.0.0.2 unsuppress-map Pass
ce-11(config-router)#exit
ce-11(config)#route-map Pass
ce-11(config-route-map)#description -- Permit All --
ce-11(config-route-map)#exit
La commande unsupress-map débraye la summarisation pour un voisin précis.
ce-11#sh bgp ipv4 unicast neighbors 10.0.0.2 advertised-routes
[…]
Network Next Hop Metric LocPrf Weight Path
*> 192.168.0.0/16 0.0.0.0 32768 i
s>i 192.168.101.0 10.101.11.2 0 100 0 i
s>i 192.168.102.0 10.102.11.2 0 100 0 i
Total number of prefixes 3
ce-11#
Conclusion
La summarization est une méthode élégante de cacher la complexité entre des étages d’un réseau. Nous avons listé les configurations à mettre en place pour distribuer un agrégat, en choisissant parmi les multiples possibilités, celles qui :
- utilisent nativement les propriétés du protocole
- utilisent des contournements explicites
- ne posent pas de problème de scaling ou d’exploitation. En particulier l’ajout d’un nouvel espace d’adressage se traduit par un nouveau summary sans autre modification