Une compilation de documentations   { en , fr }

Agrégation d'interfaces réseau sous Linux

Étiquettes:
Créé en:
Dernière modification:
Auteur:
Xavier Béguin

Petite présentation de l'agrégation de liens réseau

Présentation générale

L'agrégation de liens réseau (généralement appelé bonding en anglais dans le noyau Linux) est une technique de réseau informatique qui permet de regrouper plusieurs interfaces réseau en un seul lien logique. Elle peut être implémentée selon différentes méthodes.

La manière dont on souhaite utiliser les interfaces réseau agrégées décidera du mode dans lequel configurer l'agrégation. Selon le mode choisi, celle-ci fournira :

  • une tolérance de panne ;
  • et/ou la répartition de la charge réseau sur les différentes interfaces (permettant de bénéficier de la bande passante de chacune des interfaces agrégées).

D'après la page wikipedia sur l'agrégation de liens, selon le contexte, la notion d'agrégation de liens peut être désignée sous de nombres appellations telles que LAG (Link Aggregation Group) ; interface ou port bonding, teaming, trunking, bundling, channel ; multi-link trunking (MLT), network fault tolerance (NFT), etc.

Les différents mode d'agrégation du pilote Linux

Les modes d'agrégation proposés par le pilote d'agrégation du noyau Linux sont les suivants :

  • balance-rr : les paquets sont envoyés sur chacun des liens à tour de rôle (Round Robin), ce qui permet une répartition de charge et une tolérance de panne. C'est le mode par défaut si aucun n'est précisé.
  • active-backup : politique actif/sauvegarde : une interface doit être désignée comme primaire (à l'aide de l'option primary), et seule celle-ci sera utilisée tant qu'elle est disponible. Une des autres interfaces sera utilisée seulement si l'interface primaire devient défaillante. Ce mode fournit de la tolérance de panne.
  • balance-xor : ce mode est similaire à balance-rr, mais les paquets sont envoyés à travers une des interfaces selon une politique de hachage (utilisant par défaut l'opération logique xor, mais la fonction de hachage peut être paramétrée). Ce mode permet une répartition de charge et une tolérance de panne.
  • broadcast : tous les paquets sont diffusés sur toutes les interfaces à la fois. Ce mode permet une tolérance de panne.
  • 802.3ad : ce mode utilise toutes les interfaces agrégées selon la spécification IEEE 802.3ad (aussi appelé le protocole LACP), mais nécessite que le commutateur réseau (switch) auquel sont connectées les interfaces prenne en compte ce protocole (et généralement que ce commutateur soit configuré en fonction).
  • balance-tlb : (Transmit Load Balancing) répartition de charge en transmission. Les paquets sont envoyés soit en fonction de la charge des interfaces, soit en fonction d'une méthode de hachage. Seule une interface reçoit les paquets.
  • balance-alb : (Adaptive Load Balancing), fonctionne comme balance-tlb en émission, mais la réception est répartie sur plusieurs interfaces, sans nécessiter le support du commutateur réseau (en répartissant les adresses physiques des interfaces selon les interlocuteurs réseau).

Ces descriptions des modes d'agrégation sont un résumé en français des descriptions détaillées figurant à la section 2 - Bonding Driver Options du document Linux Ethernet Bonding Driver HOWTO (en anglais).

Configuration à l'aide du script ifenslave

Le script shell ifenslave (fourni sous Debian GNU/Linux par le paquet ifenslave) permet de configurer manuellement une agrégation d'interfaces depuis le shell. Les liens d'agrégation configurés ainsi utiliseront uniquement le mode balance-rr.

Il nécessite le chargement du module noyau bonding qui, s'il n'est pas fait automatiquement, peut se faire manuellement à l'aide de la commande modprobe bonding.

Les interfaces agrégées se nomment traditionnellement bond0, bond1, etc.

La page de manuel ifenslave(8) (en anglais) donne un exemple d'utilisation simple :

~# ifconfig bond0 192.168.0.1 netmask 255.255.0.0
~# ifenslave bond0 eth0 eth1

Bien entendu, cette configuration ne survivra pas au redémarrage de la machine et doit être intégrée aux fichiers de configuration du réseau utilisés par votre système, comme le fichier /etc/network/interfaces généralement utilisé sous les serveurs utilisant Debian (ce qui permet également de choisir un autre mode d'agrégation que balance-rr).

Configuration via le fichier interfaces sous Debian

Sur les serveurs utilisant GNU/Linux, l'agrégation est généralement configurée simplement en modifiant le fichier /etc/network/interfaces. Pour une utilisation sur une station de travail (par exemple pour l'agrégation de lien filaire et sans fil d'un ordinateur portable), il est généralement aussi possible d'effectuer l'opération à l'aide des interfaces graphiques de configuration réseau, mais cet aspect n'est pas abordé ici.

L'exemple donné ci-dessous agrège les interfaces eth0 et eth1 dans l'interface maître bond0 qui utilise le mode 802.3ad (c'est à dire le protocole LACP), qui doit généralement également être paramétré sur le commutateur réseau. Si votre commutateur ne prend pas en compte ce protocole, choisissez, en fonction de vos besoin, un mode qui ne nécessite pas de collaboration spéciale du commutateur.

Désactivez d'abord les interfaces réseau à agréger (avec les commandes ifdown eth0 et ifdown eth1 dans cet exemple), et modifiez le fichier interfaces pour utiliser quelque chose comme ceci :

iface bond0 inet static
	# Configuration normale de l'interface
    address 10.31.1.5
    netmask 255.255.255.0
    network 10.31.1.0
    gateway 10.31.1.254
	# Configuration de l'agrégation
	bond-slaves eth0 eth1
	bond-mode 802.3ad
	bond-miimon 100
	# Les paramètres ci-dessous sont facultatifs
	bond-updelay 200
	bond-downdelay 200

Une fois l'interface bond0 activée avec ifup bond0 (et si votre commutateur a été correctement configuré si vous utilisez le mode 802.3ad), votre agrégation devrait être active. Le fichier /proc/net/bonding/bond0 vous renseignera sur son état (et d'autres informations utiles peuvent être trouvées dans /sys/class/net/bond0/bonding/).