Ethernet Bonding

HINT:

BACKGROUND:

Ethernet bonding permette di raggruppare interfacce ethernet. E' possibile avere quindi settaggi in alcune modalità diverse.

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  ---> <M> Bonding driver support
o  <*> Bonding driver support
KERNEL 2.6
Device Drivers  --->Networking support  ---><M> 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.  <br>{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 <br>
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:

Nuove Versioni di questo documento possono essere viste sul sito http://cvs.jg555.com/viewcvs.cgi/lfs-hints