Skip to Content

Link Aggregation su FreeBSD

Fondamentalmente il link aggregation è l'unione a livello logico di più interfacce di rete in modo da apparire come una unica interfaccia virtuale. Il vantaggio di questa implementazione è che a seconda della configurazione è possibile rendere un server più affidabile (relativamente alla connessione di rete) infatti tutte le interfacce di rete utilizzando lo stesso indirizzo IP e nel caso di perdita di connessione in una delle schede di rete (un cavo scollegato ad esempio) la connettività sarà ancora disponibile.

I vantaggi non finiscono qui perchè con gli opportuni settaggi è possibile migliorare anche la gestione del carico sull'interfaccia di rete virtuale bilanciando il traffico sulle varie schede di rete senza perdere affidabilità.

La gestione delle aggregazione delle interfacce su FreeBSD avviene tramite il driver del kernel lagg: basterà fornirgli la configurazione e si occuperà da solo di tutta la gestione, noi avremo solo una o più interfacce chiamate lagg0, lagg1, lagg2....

 

Modalità di funzionamento

Il driver lagg fornisce cinque modalità di funzionamento, alcune delle quali sono per il supporto a protocolli proprietari o che comunque necessitano hardware adatto con il supporto a tali protocolli:

  • failover: in questa modalità la prima scheda di rete inserita è configurata come master e le altre come interfacce di failover. I dati viaggiano solo attraverso l'interfaccia master, ma se dovesse mancare la connessione il traffico viene spostato sulla prima interfaccia di failover. Questa è la modalità predefinita di funzionamento del driver lagg.
  • fec: supporta Cisco Fast EtherChannel®.
  • lacp: supporta lo standard aperto di aggregazione chiamato LACP (IEEE 802.3ad).
  • loadbalance: alias di fec.
  • roundrobin: il traffico in uscita è distribuito sulle interfacce tramite schedulazione round robin, mentre il traffico in ingresso è accettato su tutte le schede di rete. Se una delle schede di rete perde il collegamento il traffico rimane distribuito sulle altre altre schede attive. Quindi oltre l'affidabilità si avrà un vantaggio anche sulle prestazioni della connessione di rete.

Quindi avendo a disposizione uno switch che supporti EtherChannel o LACP è possibile utilizzare questi protocolli, diversamente si dovranno utilizzare le modalità di failover o round-robin (che sono validi quanto gli altri).

 

Configurazione del sistema

Vista la teoria passiamo alla pratica; possiamo configurare un'interfaccia lagg manualmente o fare in modo che sia configurata automaticamente durante il boot del sistema. Faremo conto di avere un sistema con due schede di rete Intel(R) PRO/1000 Gigabit Ethernet che saranno quindi identificate da FreeBSD come em0 e em1

Configurazione Manuale

Per prima cosa dobbiamo caricare il driver lagg:

# kldload if_lagg

se non lo sono già, mettiamo in stato di up le due interfacce:

# ifconfig em0 up
# ifconfig em1 up

poi creiamo l'interfaccia virtuale per poter configurare lagg:

# ifconfig lagg0 create

infine configuriamo l'interfaccia virtuale assegnando l'indirizzo IP e quali schede di rete fisiche associare:

# ifconfig lagg0 up laggproto failover laggport em0 laggport em1 192.168.128.30 netmask 255.255.255.0

oppure se volessimo utilizzare la configurazione automatica con DHCP:

# ifconfig lagg0 up laggproto failover laggport em0 laggport em1 DHCP

se i comandi sono stati inseriti correttamente il sistema funzionerà correttamente infatti lanciando ifconfig:

#ifconfig
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=b<RXCSUM,TXCSUM,VLAN_MTU>
	ether 00:15:17:27:46:ba
	media: Ethernet autoselect (100baseTX <full-duplex>)
	status: active
	lagg: laggdev lagg0
em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=b<RXCSUM,TXCSUM,VLAN_MTU>
	ether 00:15:17:27:46:ba
	media: Ethernet autoselect (100baseTX <full-duplex>)
	status: active
	lagg: laggdev lagg0
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3 
	inet6 ::1 prefixlen 128 
	inet 127.0.0.1 netmask 0xff000000 
lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=b<RXCSUM,TXCSUM,VLAN_MTU>
	ether 00:15:17:27:46:ba
	inet 192.168.128.30 netmask 0xffffff00 broadcast 192.168.128.255
	media: Ethernet autoselect
	status: active
	laggproto failover
	laggport: em1 flags=4<ACTIVE>
	laggport: em0 flags=4<ACTIVE>

Configurazione automatica

La configurazione manuale per quanto semplice, non è molto pratica, soprattutto in ambito di produzione. Vediamo ora di far diventare la configurazione più definitiva in modo che al reboot della macchina venga creata automaticamente l'interfaccia virtuale. Per prima cosa dobbiamo far caricare il driver lagg durante il boot; per fare ciò basterà aggiungere al file /boot/loader.conf la riga:

if_lagg_load="YES"

dopodiché bisogna impostare i parametri dell'interfaccia virtuale nel file /etc/rc.conf:

ifconfig_em0="up"
ifconfig_em1="up"
cloned_interfaces="lagg0"
ifconfig_lagg0="laggproto failover laggport em0 laggport em1 192.168.128.30/24 netmask 255.255.255.0"
defaultrouter="192.168.128.1"

oppure con DHCP:

ifconfig_em0="up"
ifconfig_em1="up"
cloned_interfaces="lagg0"
ifconfig_lagg0="laggproto failover laggport em0 laggport em1 DHCP"

 

Aggiungere gli IP alias all'interfaccia virtuale

Non resta che un piccolo passo da fare non obbligatorio o fondamentale, ma estremamente utile nei server: aggiungere uno o più IP alias all'interfaccia virtuale.L'IP aliasing permette di assegnare ad una interfaccia di rete più di un indirizzo IP; a livello di configurazione non c'è differenza fra interfaccia fisica o interfaccia virtuale come lagg0. Supponendo di avere una interfaccia virtuale lagg0 già configurata precedentemente per aggiungere un IP alias da riga di comando basterà digitare:

# ifconfig lagg0 alias 192.168.128.35 netmask 255.255.255.0

possiamo anche aggiungerne più di uno ripetendo lo stesso comando.....

# ifconfig lagg0 alias 192.168.128.36 netmask 255.255.255.0
# ifconfig lagg0 alias 192.168.128.37 netmask 255.255.255.0
# ifconfig lagg0 alias 192.168.128.38 netmask 255.255.255.0

se invece vogliamo abilitare gli IP alias automaticamente durante la fase di boot bisognerà aggiungere al file /etc/rc.conf:

ifconfig_lagg0_alias0="inet 192.168.128.35 netmask 255.255.255.0"
ifconfig_lagg0_alias1="inet 192.168.128.36 netmask 255.255.255.0"
ifconfig_lagg0_alias2="inet 192.168.128.37 netmask 255.255.255.0"
ifconfig_lagg0_alias3="inet 192.168.128.38 netmask 255.255.255.0"

Se la configurazione è stata eseguita correttamente lanciando il comando ifconfig dovremmo avere un output simile:

em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=b<RXCSUM,TXCSUM,VLAN_MTU>
	ether 00:15:17:27:46:ba
	media: Ethernet autoselect (100baseTX <full-duplex>)
	status: active
	lagg: laggdev lagg0
em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=b<RXCSUM,TXCSUM,VLAN_MTU>
	ether 00:15:17:27:46:ba
	media: Ethernet autoselect (100baseTX <full-duplex>)
	status: active
	lagg: laggdev lagg0
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3 
	inet6 ::1 prefixlen 128 
	inet 127.0.0.1 netmask 0xff000000 
lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=b<RXCSUM,TXCSUM,VLAN_MTU>
	ether 00:15:17:27:46:ba
	inet 192.168.128.30 netmask 0xffffff00 broadcast 192.168.128.255
	inet 192.168.128.35 netmask 0xffffff00 broadcast 192.168.128.255
	inet 192.168.128.36 netmask 0xffffff00 broadcast 192.168.128.255
	inet 192.168.128.37 netmask 0xffffff00 broadcast 192.168.128.255
	inet 192.168.128.38 netmask 0xffffff00 broadcast 192.168.128.255
	media: Ethernet autoselect
	status: active
	laggproto failover
	laggport: em1 flags=4<ACTIVE>
	laggport: em0 flags=4<ACTIVE>
Realizzato con Drupal, un sistema open source per la gestione dei contenuti