Linux:Bonding pour fiabiliser son réseau ethernet

Un article de Djjnet.

Le bonding permet de fiabiliser et augmenter la bande passante d'un réseau ethernet. Cela est obtenu en multipliant les interfaces réseaux connectées pour un même lien virtuel. Si une carte réseau tombe en panne, le lien réseau est toujours assuré.

Attention, l'utilisation du bonding nécessite une attribution des IP de manière statique, sans DHCP.

Sommaire

Configuration du module noyau bonding

Le module bonding possède 7 modes de fonctionnement. Nous prenons ici le premier balance-rr ou 0. Il fait du round robin sur les cartes esclaves configurées.

Pour un noyau 2.6 récent, sur une debian Etch par exemple, créer un fichier /etc/modprobe.d/network-bond avec pour contenu :

alias bond0 bonding
options bonding mode=balance-rr miimon=100 downdelay=200 updelay=200

Pour un noyau 2.6 ancien, il faut créer un fichier /etc/modutils/network-bond avec le même contenu et lancer la commande :

update-modules

Sur une de mes cartes mères, j'ai dû ajouter un alias pour le module skge nécessaire pour la carte ethernet Marvell.

alias eth3 skge

Résultat de lshw pour cette carte réseau :

product: 88E8001 Gigabit Ethernet Controller
vendor: Marvell Technology Group Ltd.

Installation du package ifenslave

apt-get install ifenslave-2.6 

Configuration du réseau

Modification du fichier /etc/network/interfaces :
Dans les lignes up et down, il faut indiquer à ifenslave les interfaces réseaux à ajouter ou supprimer du bonding

auto bond0
iface bond0 inet static
       address 192.168.100.101
       netmask 255.255.255.0
       network 192.168.100.0
       broadcast 192.168.100.255
       gateway 192.168.100.1
       up /sbin/ifenslave bond0 eth0 eth3
       down /sbin/ifenslave -d bond0 eth0 eth3


Voir l'état du bonding

cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.5.0 (November 4, 2008)

Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 200
Down Delay (ms): 200

Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:05:5d:69:fc:6f

Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:11:d8:e2:88:45

Cas de plusieurs interfaces avec un mode de bonding différent

Cette partie est basée sur une Debian squeeze.

Il faudrait avoir par exemple dans le fichier d'option de modprobe mais cela ne fonctionne pas, les deux interfaces ont le même mode.

alias bond0 bonding
options bonding mode=0 miimon=100 downdelay=200 updelay=200
alias bond1 bonding
options bonding mode=1 miimon=100 downdelay=200 updelay=200

Même avec le install indiqué sur [1]

Il est possible de modifier le mode une fois le module chargé mais ce n'est pas adapté à un chargement au démarrage du serveur :

ifdown bond0
echo 0 > /sys/class/net/bond0/bonding/mode
ifup bond0

Il faut donc supprimer /etc/modprobe.d/network-bond.conf et passer toute la configuration au niveau de /etc/network/interface ainsi :

auto bond0
iface bond0 inet static
        address 192.168.100.2
        netmask 255.255.255.0
        gateway 192.168.100.1
        bond-slaves eth1 eth3
        bond-mode active-backup
        bond-miimon 100
        bond-downdelay 200
        bond-updelay 200

auto bond1
iface bond1 inet static
        address 192.168.0.18
        netmask 255.255.255.0
        bond-mode balance-rr
        bond-miimon 100
        bond-downdelay 200
        bond-updelay 200
        bond-slaves eth0 eth2

Pour relancer sans reboot :

/etc/init.d/networking stop
rmmod bonding
/etc/init.d/networking start

En vérifiant on a :

cat /sys/class/net/bond1/bonding/mode
balance-rr 0
cat /sys/class/net/bond0/bonding/mode
active-backup 1