How To: Bilanciare il traffico di rete con Slackware 13.0 (Bonding)
In azienda, ci si trova spesso a gestire macchine (worstation, servers) di non proprio ultima generazione ma che possono benissimo essere utilizzare come file servers, proxy servers ecc ecc. La necessità di garantire un funzionamento continuo è ormai fondamentale quindi gruppi di continuità, alimentatori ridondanti sono quanto meno necessari ma non da meno è il problema di congestione/disservizio della rete. In questo how-to vedrò di spiegarvi nella maniera più semplice possibile, come aggregare 2 o più schede di rete (per garantire il bilanciamento/backup del traffico) in un’unica interfaccia (bond).
Non vi sto a spiegare cos’è il Bonding, nell’articolo seguente per facilitarvi la vita, vi mostrerò l’utilizzo della modalità 2, ossia l’active-active XOR (source MAC address XOR’d with destination MAC address) che garantisce la selezione della medesima slave (scheda di rete fisica) in base alla sorgente. Viene usata per assicurare il bilanciamento del traffico e contemporaneamente la tolleranza ai guasti.
Cosa ci serve per cominciare? Innanzitutto un pc con 2 schede di rete e Slackware. Assicuratevi che il modulo mii sia tra i moduli del kernel caricati di default all’avvio (lsmod | grep mii): serve per monitorare il link delle schede di rete (con delle attuali 100Mb in su non doveste avere problemi).
Prima di passare alla creazione del file di configurazione dobbiamo compilare(creare) da un terminale l’eseguibile ifenslave (comando che serve per aggregare le slave al master), posizionandoci nella directory: /usr/src/linux/Documentation/networking e lanciando il seguente comando (dall’utente root!!!):
gcc -Wall -O -I/usr/src/linux/include ifenslave.c -o ifenslave
e copiarlo nella directory /sbin
cp ifenslave /sbin/ifenslave
Abbiamo tutto l’occorente, ora ci rimane solamente da creare gli script che caricheranno tutto il necessario al riavvio successivo: Posizioniamoci nella directory /etc/rc.d e creiamo il file rc.bond tramite il comando
touch rc.bond
e diamogli i permessi di esecuzione:
chmod 755 rc.bond
Editiamo (con nano, con pico, con vi, vedete voi) il file appena creato copiandoci il seguente contenuto (occhio al MAC Address della vostra scheda di rete) :
#!/bin/sh
#
case "$1" in
'start')
echo "start bond0"
modprobe bonding mode=balance-xor miimon=100
modprobe tg3
ifconfig bond0 up
ifenslave bond0 eth0
ifenslave bond0 eth1
#TODO questo deve essere cambiato con il vostro MAC Address (indirizzo fisico della schede di rete)
ifconfig bond0 hw ether 00:16:3e:aa:aa:aa
;;
'stop')
ifconfig bond0 down
rmmod bonding
rmmod tg3
;;
*)
echo "Usage: $0 {start|stop}"
;;
esac
Dobbiamo ora assicurarci che il file appena creato sia avviato al prossimo boot quindi andremo ad inserire nello script rc.M (presente sempre dentro la /etc/rc.d). Scrollate il file fino a trovare #Initialize the networking hardware e incollate il seguente codice nello spazio soprastante:
# If script rc.bond is executeable then start it
if [ -x /etc/rc.d/rc.bond ]; then
. /etc/rc.d/rc.bond start
fi
Abbiamo quasi finito, è rimasto l’ultimo script da modificare, ossia l’rc.inet1.conf
N.B.: Controllate bene che nessuna interfaccia presente nel file abbia configurato ne IP statico ne indirizzo assegnato da un server DHCP
Inserite queste righe prima dell’impostazione del gateway:
IFNAME[4]="bond0"
IPADDR[4]="XXX.XX.XX.XX" <-- il vostro IP
NETMASK[4]="255.255.255.0"
USE_DHCP[4]=""
DHCP_HOSTNAME[4]=""
Riavviate il sistema !
Una volta rientrati, controllate lo stato del bond:
cat /proc/net/bonding/bond0
dovrebbe apparirvi un output simile a questo:
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:e0:81:5e:9e:c4
Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:e0:81:5e:9e:c5
Se lo stato di connessione è attivo e il sistema sta rispondendo al ping tutto dovrebbe essere a posto. È inoltre possibile monitorare lo stato di collegamento attraverso:
mii-tool –w
Alla prossima!







