Agrégation de liens
L'agrégation de liens est la pratique de regrouper plusieurs connexions physiques en une seule connexion logique à fins de gain de performance et de redondance.
Théorie
Agrégation de liens
Qu'est-ce?
L'agrégation de liens est une méthode de configuration permettant d'utiliser plusieurs liens/connexions comme s'il s'agissait d'un seul câble permettant ainsi une redondance de chemins d'acheminement de données à la couche physique ainsi qu'un possible gain de performance lorsque les liens sont utilisés en balance de charge.
Pourquoi?
Imaginons le cas ci-dessous, deux commutateurs sont reliés ensemble par quatre ports. Dans un tel scénario, à moins que spanning-tree ne soit mis en place, une tempête de diffusion écraserait notre réseau puisque chaque commutateur recevant une diffusion sur un port la répéterait sur tous ses autres ports, triplant ainsi chaque broadcast à chaque coup. Spanning-tree désactiverait les liens moins prioritaires et n'en conserverait qu'un seul actif (root port).
Considérant une telle situation, les liens alternatifs seraient prêts à prendre la relève mais seraient dormants. Si ces liens physiquent étaient regroupés dans un lien logique sur lequel il serait possible d'appliquer toute forme d'algorithme de balance de charge, ils pourraient tous être actifs en même temps. Sur un plan, cette configuration est généralement représentée par un anneau entourant les liens regroupés.
Cette agrégat de lien porte différent noms dans différents systèmes mais ces termes font généralement référence à un agrégat de liens :
- Ethernet bonding
- Ethernet/NIC teaming
- Agrégat de ports
- Link bundling
- EtherChannel/port channeling
- Port trunking (à ne pas mélanger avec l'identification et désidentification des VLANs chez Cisco/Dell)
- LAG (Link Aggregation Group)
Cette méthode est souvent utilisée pour établir une dorsale de commutation (switching backbone) plus rapide dans un rack de télécommunications lorsque la quantité de cas de ports à haute vitesse (ex. sfp+) est limitée ou lorsque les appareils ne peuvent pas être "stackés".
Elle est aussi communément utilisée pour augmenter la capacité d'un lien entre deux routeurs puisqu'un voisinage de routeurs est généralement configuré sur un lien point à point entre deux routeurs et qu'il est souvent moins dispendieux d'installer un deuxième câble que de mettre à niveau les interfaces et adaptateurs des routeurs.
On se sert donc de ce mécanisme principalement pour :
- Améliorer la robustesse et résilience d'une connexion entre deux appareils
- Améliorer la performance d'une connexion entre deux appareils
- Réduction de coûts
Comment?
Il est possible de configurer ces agrégats de façon statique (manuelle) et dynamique. Il est à considérer que différents systèmes utilisent différents protocoles pour l'établissement d'agrégats dynamiques mais le procole LACP (Link Aggregation Control Protocol) est le protocole standard qui devrait être supporté par la majorité des vendeurs. Si un agrégat est configuré manuellement plutôt que dynamiquement, il sera impératif de vous assurer que sa configuration corresponde aux connexions réelles établies entre les appareils. Il est autrement fort probable que certaines trames ne soient pas acheminées au bon endroit.
LACP
Link Aggregation Control Protocol
"Link Aggregation Control Protocol" ou "protocole de contrôle d'agrégation de liens" est le protocole standard indépendant des vendeurs/manufacturiers d'équipements réseau. Ce protocole est souvent représenté par son sigle 802.3ad ou son ancien sigle 802.1AX.
À quelques exceptions près, LACP permet habituellement la balance de charge manuelle et pondérée.
Il est possible de créer un agrégat inconditionnel avec LACP où peu importe que l'agrégat soit configuré sur l'interlocuteur, les trames seront transmises malgré tout (l'agrégation sera en forwarding à moins que spanning-tree intervienne).
Il est aussi possible de le configurer pour que le lien s'établisse seulement lorsqu'une annonce de type LACPDU (Link Aggregation Protocol Data Unit) soit échangée entre les interlocuteurs.
En Cisco à titre d'exemple, la commande "channel-group # mode active" forceraient ces interfaces à transmettre peu importe la configuration de son interlocuteur tandis que la commande "channel-group # mode passive" activerait l'agrégat seulement si l'interlocuteur est aussi configuré en conséquence.
Les exemples suivant sont des configurations pour des liens de routage mais il est possible de traiter ces agrégats au même titre qu'un port régulier et l'inclure dans un pont ou y "trunker" des VLANs.
Exemple de configuration d'un agrégat de liens avec LACP sur un commutateur Cisco IOS
! Assignation des interfaces à un groupe de ports en mode "passif"
! Ce mode place le lien en pause jusqu'à ce qu'un LACPDU soit reçu sur l'interface pour négocier le lien
interface Ethernet0/0
duplex auto
channel-group 1 mode passive
interface Ethernet0/1
duplex auto
channel-group 1 mode passive
! Attribution d'une adresse IP au groupe de ports
interface Port-channel1
ip address 192.168.0.10 255.255.255.0
Exemple de configuration d'un agrégat de liens avec LACP sur un appareil MikroTik exécutant RouterOS
# Création de l'agrégation
/interface/bonding/add name=bond0 mode=802.3ad slaves=ether1,ether2
# Assignation d'une adresse IP à l'agrégation
/ip/address/add interface=bond0 address=192.168.0.20/24
Exemple de configuration d'un agrégat avec NetworkManager sur Linux (Debian, Ubuntu, etc.)
#Permettre l'activation automatique de l'interface
auto bond0
#Créer l'aggrégation de liens avec une adresse IP statique
iface bond0 inet static
address 192.168.0.30
netmask 255.255.255.0
network 192.168.0.0
gateway 192.168.0.1
#Assignation des interfaces
bond-slaves eth0 eth1
#Définition de la méthode de balance de charge, 4 est LACP
bond-mode 4
#Définition des délais de surveillance d'état de lien et de délais d'attente en cas de paquet d'état de lien manqué
bond-miimon 100
bond-downdelay 200
bond-updelay 200
bond-lacp-rate 1
Linux Bond
Liaison d'interfaces Linux
En Linux et en BSD, quoi qu'il soit possible d'utiliser le protocole LACP, ces systèmes sont dotés de pilotes permettant de joindre plusieurs interfaces avec différents algorithmes.
Il est généralement possible de configurer ces agrégats de façon actif/passif où certains ports sont en attente pour prendre la relève ou actif/actif où les liens se partagent la charge par différents algorithmes tels que la balance pondérée, round-robin, ou "xor" qui similairement à LACP utilise certains paramètres de connexion pour l'établir exclusivement sur une interface.
Différents systèmes tels que MikroTik RouterOS et Cumulus Linux permettent l'emploi de cette méthode d'agrégation de ports.
En Linux, on parle généralement du lien comme étant un "bond" et les interfaces y étant reliées sont généralement nommées esclaves ou "slaves". Chaque gestionnaire de connexions réseau Linux possède sa propre façon de configurer un agrégat mais il s'agit toujours du même type. Le point important ici est de s'assurer que la même méthode de balance de charge soit utilisée de chaque côté du lien.
Exemple de configuration d'un bond avec NetworkConfiguration (Debian, Ubuntu, etc.)
# Permettre l'activation automatique de l'interface
auto bond0
# Créer l'aggrégation de liens avec une adresse IP statique
iface bond0 inet static
address 192.168.0.10
netmask 255.255.255.0
network 192.168.0.0
gateway 192.168.0.1
# Assignation des interfaces
bond-slaves eth0 eth1
# Définition de la méthode de balance de charge, balance round-robin dans ce cas
bond-mode balance-rr
# Définition des délais de surveillance d'état de lien et de délais d'attente en cas de paquet d'état de lien manqué
bond-miimon 100
bond-downdelay 200
bond-updelay 200
Exemple de configuration d'un bond avec MikroTik RouterOS
# Création de l'agrégat de liens
/interface/bonding/add name=bond0 mode=balance-rr slaves=ether1,ether2
# Assignation d'une adresse IP à l'agrégat
/ip/address/add interface=bond0 address=192.168.0.20/24