====== Ethernet Bonding ====== * **AUTORE:** Jim Gifford * **DATA:** 2003-03-25 * **Traduzione:** Cardelli Sandro * **LICENZA:** GNU Free Documentation License Version 1.2 * **SYNOPSIS:** Come settare ethernet bonding con LFS. * **DESCRIZIONE:** Questo hint fornisce le necessarie informazioni per il raggruppamento di interfacce ethernet. * **PREREQUISITI:** Salvare il file /etc/syconfig/network-devices prima di iniziare questo hint HINT: \\ **BACKGROUND:** \\ Ethernet bonding permette di raggruppare interfacce ethernet. E' possibile avere quindi settaggi in alcune modalità diverse.\\ * **Round Robin** Questa modalità fornisce load balancing e fault tolerance. \\ * **Active Backup** Questa modalità fornisce fault tolerance. \\ Questo hint è stato reso il più semplice possibile, ma se si hanno dei suggerimenti o commenti, prego di inviarli per email all'indirizzo sopra citato. \\ **SORGENTI:** \\ Tutto quello che occorre è incluso nel codice sorgente Linux. \\ **INSTALLAZIONE:** \\ Settaggi del Kernel \\ Nel Kernel 2.4 e 2.6, occorrerà aggiungere la seguente opzione per compilare il kernel. \\ KERNEL 2.4 Network device support ---> Bonding driver support o <*> Bonding driver support KERNEL 2.6 Device Drivers --->Networking support ---> Bonding driver support o <*> Bonding driver support A questo punto è possibile ricompilare il kernel. \\ Modifiche agli script di boot \\ \\ Dopo che à finita la ricompilazione del kernel occorre andare nella directory Documentation/networking nei file source del kernel linux. \\ Si troverà un programma chiamato ifenslave.c. Ci sarà bisogno di compilare il programma nel modo seguente. \\ gcc -O -I/usr/src/linux/include ifenslave.c -o ifenslave cp ifenslave /sbin chmod 755 /sbin/ifenslave Adesso ci sarà bisogno di creare un nuovo ifup e ifdown che sia compatibile con il bonding. \\ cat > /etc/sysconfig/network-devices/ifup << "EOF" #!/bin/sh source /etc/sysconfig/rc source $rc_functions source $network_devices/ifconfig.$1 if [ -f $network_devices/ifup-$1 ] then $network_devices/ifup-$1 else if [ -z $IP ] && [ -z $SLAVE ] then echo "variabile IP mancante per ifconfig.$1, impossibile continuare" exit 1 fi if [ -z $NETMASK ] && [ -z $SLAVE ] then echo -n "NETMASK variabile mancante per ifconfig.$1, " echo "using 255.255.255.0" NETMASK=255.255.255.0 fi if [ -z $BROADCAST ] && [ -z $SLAVE ] then echo -n "BROADCAST variabile mancante per ifconfig.$1, " echo "uso dell'indirizzo di default" fi if [ -z $SLAVE ] then echo "Attivazione dell'interfaccia $1 ..." ifconfig $1 $IP netmask $NETMASK broadcast $BROADCAST evaluate_retval else echo "Attivazione dell'interfaccia $1 interface..." ifenslave $MASTER $1 evaluate_retval fi fi EOF cat > /etc/sysconfig/network-devices/ifdown << "EOF" #!/bin/sh source /etc/sysconfig/rc source $rc_functions source $network_devices/ifconfig.$1 if [ -f $network_devices/ifdown-$1 ] then $network_devices/ifdown-$1 else if [ -z $SLAVE ] then echo "Disattivazione dell'interfaccia $1 ..." ifconfig $1 down evaluate_retval fi fi EOF Adesso è necessario di ricreare il file ifconfig(interfaccia). Non sarà necessari cambiare l'esistente se l'adattatore non sarà un componente del bonding. \\ Per interfacce che non sono membri del bonding \\ cat > /etc/sysconfig/network-devices/ifconfig.{interfaccia_non_parte_del_bonding} << "EOF" ONBOOT=yes IP={indirizzp_ip} NETMASK={subnet_mask} BROADCAST={indirizzo_broadcast} EOF L'interfaccia del bonding è il nome delle interfacce ethernet adesso raggruppate. Per l'interfaccia del bonding. Questa sarà per ognuna bond0 \\ cat > /etc/sysconfig/network-devices/ifconfig.bond0 << "EOF" ONBOOT=yes IP={indirizzp_ip} NETMASK={subnet_mask} BROADCAST={indirizzo_broadcast} EOF Per le interfacce che sono membri del bonding \\ cat > /etc/sysconfig/network-devices/ifconfig.
{interface_that_is_bonded} << "EOF" ONBOOT=yes MASTER=bond0 SLAVE=yes EOF Spiegazione di cosa c'è da fare adesso : \\ Ok questa è la parte più complessa. Ecco degli esempi di file sopra citati. \\ **eth0** è l'interfaccia della wan. \\ **eth1** e **eth2** sono le interfacce per la rete 192.168.0.0 \\ ifconfig.eth0 dovrebbe assomigliare a questo \\ ONBOOT=yes IP=64.30.195.78
NETMASK=255.255.255.0 BROADCAST=64.30.195.255 ifconfig.bond0 dovrebbe assomigliare a questo \\ ONBOOT=yes IP=192.168.0.1 NETMASK=255.255.255.0 BROADCAST=192.168.0.255 ifconfig.eth1 e ifconfig.eth2 dovrebbero assomigliare a questo \\ ONBOOT=yes MASTER=bond0 SLAVE=yes Adesso all'avvio bond0 sarà l'insieme di eth1 e eth2. \\ Opzioni di boot : \\ Occorrerà aggiungere le righe seguenti al file modprobe.conf per 2.6 o al file modules.conf per 2.4 \\ alias bond0 bonding options bond0 miimon=100 Ha funzionato? \\ Adesso dopo il riavvio, è possibile controllare se il bonding funziona bene. \\ E' possibile eseguire "ifconfig bond0", se appaiono dati probabilmente funziona bene. \\ Controllare che le informazioni sull'indirizzo IP siano corrette. \\ Ecco l'output come riferimento \\ bond0 Link encap:Ethernet HWaddr 00:00:D1:1F:20:49 inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0 UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1 RX packets:36491 errors:0 dropped:0 overruns:0 frame:0 TX packets:37519 errors:57 dropped:0 overruns:5 carrier:52 collisions:1 txqueuelen:0 RX bytes:3295515 (3.1 Mb) TX bytes:13366345 (12.7 Mb) E' possibile usare anche: cat /proc/net/bonding/bond0. \\ Ecco l'output come riferimento \\ Ethernet Channel Bonding Driver: v2.6.0 (January 14, 2004) Bonding Mode: load balancing (round-robin) MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: eth1 MII Status: up Link Failure Count: 0 Permanent HW addr: 00:00:d1:1f:20:49 Slave Interface: eth2 MII Status: up Link Failure Count: 0 Permanent HW addr: 00:00:d1:1f:20:4a Slave Interface: eth3 MII Status: up Link Failure Count: 0 Permanent HW addr: 00:00:d1:1f:20:4b Volere più di un raggruppamento ethernet : \\ Di default i driver bonding consentono solo un gruppo bonded. Volendo più raggruppamenti di interfacce è possibile utilizzare i seguenti comandi. \\ Cambiare modprobe.conf o modules.conf modificare options bond0 miimon=100 in options bond0 miimon=100 max_bonds={#_of_teams} esempio \\ options bond0 miimon=100 max_bonds=3 creerebbe bond0 bond1 bond2 \\ Modifiche ai programmi esistenti : \\ La sola modifica è che non viene specificata l'interfaccia eth{x}, al suo posto bisognerà specificare l'interfaccia bond0. \\ Per maggiori informazioni : \\ Per maggiori informazioni vedere il Documentation/network/bonding.txt nei sorgenti del kernel. \\ **VERSIONE:** 1.1 \\ **CHANGELOG:** \\ * 1.1 Fixed Date * 1.0 Initial Release **Nuove Versioni di questo documento possono essere viste sul sito http://cvs.jg555.com/viewcvs.cgi/lfs-hints**