In questo infobox verra' descritto come configurare in bonding le interfacce di rete di un sistema Linux (Debian nel caso specifico). Tramite questa tecnica e' possibile raggruppare piu' interfacce fisiche in un'interfaccia logica in modo da distribuire il carico su piu' schede anziche' una sola oppure mettere in atto meccanismi di fault-tolerance.
In particolare, esistono diverse modalita' di bonding, caratterizzate da meccanismi di funzionamento differenti:
- Mode 0, Balance RR
- Mode 1. Active-Backup
- Mode 2, Balance XOR
- Mode 3, Broadcast
- Mode 4, 802.3ad
- Mode 5, Balance TLB
- Mode 6, Balance ALB
Nella configurazione descritta viene utilizzata la modalita' Active Backup, ove e' attiva una sola interfaccia, mentre l'altra resta in "standby" pronta a subentrare in caso di problemi alla scheda primaria. Questa modalita, inoltre, non richiede particolari modifiche alla configurazione degli switch coinvolti.
La configurazione presentata viene al momento utilizzata per un bilanciatore dove ho voluto garantire un minimo di ridondanza al fine di erogare il servizio anche in caso di problemi alla scheda attiva in quel momento.
Innanzitutto e' necessario installare il package ifenslave, che consente di aggiungere e rimuovere interfacce slave ad un device in bonding:
apt-get install ifenslave-2.6
Per potere configurare delle schede di rete in bonding, inoltre, e' necessario che nel kernel sia abilitato il supporto per questa funzionalita'. Nel caso di Debian Lenny il kernel standard include gia' un modulo per questa funzionalita' che puo' essere caricato con il comando modprobe bonding
.
In alternativa, al fine di automatizzare l'operazione ad ogni avvio del sistema e' preferibile inserire la seguente linea in /etc/modules:
bonding
Il modulo, inoltre, richiede che gli vengano passati alcuni parametri sulla linea di comando di modprobe. Poiche' ho preferito fare in modo che esso venga caricato automaticamente al boot del sistema, tali opzioni sono state inserite nel file /etc/modprobe.d/arch/i386:
alias bond0 bonding
options bonding mode=1 miimon=100 downdelay=200 updelay 200
L'opzione mode specifica la tipolgia di bonding da utilizzare (nel caso Active/Backup), miimon indica invece ogni quanti millisecondi il link di ogni slave viene verificato al fine di identificare eventuali failure. Infine downdelay e updelay indicano rispettivamente quanti millisecondi attendere prima di disabilitare uno slave dopo che sia stato verificato un link failure e quanto attendere prima di riabilitarlo dopo che il link sia ritornato disponibile.
In caso siano necessarie piu' interfacce logiche in bonding, e' possibile aggiungere altri alias al file /etc/modprobe.d/arch/i386 (ad es. alias bond1 bonding.
Una volta modificato il file eseguire il comando depmod -r
.
Infine, dopo avere abilitato il bonding e' necessario configurare l'interfaccia bond0 ed aggiungere le interfacce fisiche al bond con il comando ifenslave
. Anziche' utilizzare ifconfig
ed ifenslave
da command line e' possibile modificare il file /etc/network/interfaces commentando le entries relative alle varie eth ed aggiungendo la parte riguardante l'interfaccia bond0:
auto bond0
iface bond0 inet static
address 10.62.1.164
netmask 255.255.255.192
network 10.62.1.128
gateway 10.62.1.129
up /sbin/ifenslave bond0 eth0 eth1
down /sbin/ifenslave -d bond0 eth0 eth1
In questo modo la configurazione verra' memorizzata in modo da potere essere riapplicata anche dopo eventuali reboot del sistema.
Per verificare lo stato delle interfacce appartenenti al bonding e' possibile fare riferimento al file /proc/net/bonding/bond0:
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 200
Down Delay (ms): 200
Slave Interface: eth0
MII Status: down
Link Failure Count: 0
Permanent HW addr: 00:a0:d2:1c:2b:f9
Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:0b:cd:67:8c:1c
Nell'esempio in questione e' possibile notare che l'interfaccia al momento attiva e' la eth1, mentre la eth0 e' invece scollegata, come si puo' evincere da MII status=down
Infine, per testare il funzionamento del sistema, se si hanno entrambe le schede collegate, sara' sufficiente scollegare il cavo ethernet dalla scheda in quel momento in funzione e verificare se il sistema continui ad essere raggiungibile.
La procedura illustrata prevede la modifica di alcuni file di configurazione presenti in una distribuzione debian GNU/Linux, in modo da rendere le modifiche al sistema permamenenti. In caso ci si volesse limitare a dei test dovrebbe essere possibile ottenere il medesimo risultato caricando il modulo bonding da linea di comando e gestendo il bonding tramite ifenslave
. Personalmente non ho mai fatto test in tal senso, ma i comandi da dare dovrebbero essere i seguenti:
modprobe bonding mode=1 miimon=100 downdelay=200 updelay 200
ifconfig bond0 10.62.1.164 netmask 255.255.255.192 up
ifenslave bond0 eth0
ifenslave bond0 eth1
Configuration of networking and security on different Linux distro