Teaming, bonding, link aggregation: unire due o più schede di rete su Linux Ubuntu

In ambiente server Windows si parla generalmente di teaming relativamente alla configurazione di due o più schede di rete in modo che siano viste come una sola. L’obiettivo è ovviamente quello di raddoppiare la banda disponibile e garantire una maggior sicurezza, visto che se una delle due schede di rete ha problemi, c’è sempre l’altra.

Solitamente questa opzione viene gestita dai driver delle schede di rete, ed è abbastanza trasparente per l’utente finale, che non deve preoccuparsi di molto se non abilitare il flag corrispondente. E su Linux?

Innanzitutto definiamo una serie di sinonimi. Su Linux si parla generalmente di “Bonding” per identificare la stessa configurazione, o perlomeno così è definito il modulo che la realizza. La pagina Wiki di Ubuntu che spiega come attivare il tutto usa però il termine più esplicativo “Link Aggregation“. Stiamo comunque sempre parlando della stessa cosa.

Per attivare tale opzione su Linux Ubuntu, innanzitutto dobbiamo avere due schede di rete funzionanti e che supportino tale modulo (quasi tutte lo supportano). Poi dobbiamo installare il pacchetto ifenslave:

sudo apt-get install ifenslave

Modulo bonding

A questo punto dobbiamo caricare il modulo bonding inserendo in /etc/modules la seguente riga in /etc/modules:

bonding mode=6 miimon=100

Il “mode” identifica il tipo di aggregazione, potete consultare la tabella completa su https://wiki.ubuntu.com/LinkAggregation. Il mode 6 è quello definito come il miglior compromesso tra velocità, affidabilità, e compatibilità con gli elementi di rete coinvolti.

Il parametro miimon indica invece la frequenza di sincronizzazione e controllo tra la schede, e può anche essere lasciato così com’è.

Se non volete riavviare il sistema, potete caricare subito il modulo con il comando modprobe:

modprobe bonding mode=6 miimon=100

Configurazione di rete

Dobbiamo ora creare la nostra scheda di rete virtuale che userà le schede sottostanti. Apriamo quindi il file /etc/network/interfaces (stiamo sempre parlando di Ubuntu) per modificarlo.

Innanzitutto rimuoviamo qualsiasi configurazione delle schede che verranno usate per fare teaming. Tali schede di rete infatti cessano di avere vita propria e si mettono a funzionare solo come accessori della scheda di rete “virtuale“.

Quindi, ad esempio, rimuoviamo le configurazione di eth0 ed eth1 se queste sono le interfacce che useremo.

Attiviamo poi una scheda di rete bond0 (il nome è a discrezione vostra, ma non usate lo stesso nome di un’interfaccia reale o il risultato è imprevedibile). Per fare un esempio di configurazione:

auto bond0
iface bond0 inet static
address 192.168.1.1
netmask 255.255.255.0
gateway 192.168.1.254
post-up ifenslave bond0 eth0 eth1
pre-down ifenslave -d bond0 eth0 eth1

Noterete che ci sono due righe aggiuntive di configurazione, per informare il sistema di quali sono le interfacce fisiche che costituiscono la nostra interfaccia virtuale. Per pulire qualsiasi traccia di interfacce fisiche precedentemente attivate, conviene riavviare l’intero sistema anzichè semplicemente il servizio networking.

Oplà! Ora viaggiate al doppio della velocità e se si stacca uno dei due cavi, la vostra rete continua a funzionare.

NOTA: questa procedura è raccomandata su server che NON usano NetworkManager. NetworkManager, infatti, pur essendo molto comodo in ambito desktop, tratta le interfacce diversamente, legandole alla sessione utente, e non funziona correttamente con il bonding.

Tag: , ,