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).

image.png

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.

image.png

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 :

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 :

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

À 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