lunedì 15 ottobre 2012

pfSense in alta affidabilità con CARP e pfsync - Parte 1

Pensando ad un firewall free ed open source, pochi immaginano che pfSense disponga anche di meccanismi di alta affidabilità o HA che permettano di accoppiare due o più firewall per bilanciare i carichi ed aumentare l'affidabilità della propria infrastruttura. Normalmente queste sono caratteristiche di firewall di fascia alta. Il fatto che pfSense disponga di tali meccanismi fa si che possa essere considerato un firewall molto potente ingrado di stupire chiunque.


In questa serie di articoli vedremo quali meccanismi e protocolli sono impiegati in pfSense per garantire l'HA. Comprendere il funzionamento a basso livello garantisce la possibilità di configurare correttamente le funzionalità di HA ed ottenere il massimo dal sistema.

In particolare parleremo di:
  • Common Address Redundancy Protocol (CARP): il protocollo che permette la ridondanza attraverso la creazione di un'interfaccia di rete virtuale condivisa da più macchine;
  • pfsync: Il protocollo di sincronizzazione delle tabelle di stato dei firewall che formano il cluster di HA.

Il protocollo CARP

Il protocollo CARP (Common Address Redundancy Protocol) permette di realizzare sistemi ridondati gestendo un interfaccia di rete virtuale a cui viene associato un indirizzo IP virtuale che viene così condiviso dal gruppo di macchine in HA.

Il protocollo CARP nasce ad opera del team di OpenBSD che voleva dar vita ad un'implementazione libera di due protocolli: VRRP (Virtual Router Redundancy Protocol), definito in RFC3768, e HSRP (Hot Standby Router Protocol), definito in RFC2281. Cisco proprietaria di alcune parti coperte da brevetto dei due protocolli, diffidò il team dal continuare il lavoro di messa a punto dell'implementazione libera. Il team non si scoraggiò e diede vita ad un protocollo completamente nuovo: il CARP.

Il CARP si basa sullo scambio di pacchetti multicast tra macchine appartenenti ad uno stesso gruppo e che condividono un indirizzo IP virtuale. L'indirizzo viene mantenuto da una delle macchine che ha il compito di fare da master mentre le altre, che hanno il ruolo di Backup, rimangono in attesa. Il master comunica ad intervalli regolari il proprio stato attraverso il protocollo IP 112 (Virtual Router Redundancy Protocol). Se il master diventa indisponibile gli altri membri del gruppo si annunciano sulla rete finchè quello che si annuncia più frequentemente diventa il nuovo master. Quando il master torna nuovamente disponibile può riprendere il suo posto o rimanere un backup.

Il protocollo CARP funziona sia su IPv4 che IPv6 ed il suo obiettivo è solo ed unicamente quello di determinare master e backup e l'entrata in funzione di un backup in caso di caduta del master.

I parametri del CARP

Nella configurazione del CARP vengono impiegati differenti parametri che in pfSense sono quasi totalmente mascherati ma, per capire meglio il funzionamento, è opportuno conoscerne l'esistenza ed il funzionamento di alcuni di essi.

advbase e advskew: Questi parametri concorrono a determinare il tempo tra due annunci CARP consecutivi. L'intervallo è dato in secondi dalla formula (advbase + (advskew /255)) all'aumentare di advbase, che di default vale 1, diminuisce il traffico di rete, ma aumenta la latenza nell'elezione di un nuovo master. Valori bassi di advskew aumentano le probabilità di una macchina di diventare master, essendo in grado di annunciarsi più frequentemente; advskew dev'essere compreso fra 0 (il default) e 254 (inclusi);

vhid: E'l'indicativo dell'Host Virtuale condiviso tra le macchine appartenenti al gruppo. Il valore può essere compreso tra 1 e 255 inclusi.

demotion counter: è un contatore che ha lo scopo di indicare quanto un nodo sia pronto a diventare master. Più è alto il counter e meno il nodo è pronto a diventare master. Per conoscere il valore del demotion counter è possibile eseguire il seguente comando dalla shell
ifconfig -g carp
Questo contatore può essere utile a scopo di analisi o per pilotare il cambio di stato di un nodo.

Configurazione active/standby

Questo tipo di configurazione prevede che un nodo faccia da Master ed uno o più nodi da Backup. Per ottenere questo comportamento è necessario che tutte le interfacce virtuali (VHID) dell'host che vogliamo faccia da master, abbiano assegnato un valore advbase ed advskew molto basso affinchè l'host possa rimanere il master per tutti i VHID
Alle macchine che dovranno fare da Backup verranno assegnati valori di  advbase ed advskew più alti. Come abbiamo visto questo farà si che il master si annuncerà con più frequenza sulla rete e pertanto rimarrà Master

Un esempio di parametri potrebbero essere:

Firewall Master
CARP INTERFACCIA1 -> VHID 1  advbase 1 advskew 0
CARP INTERFACCIA2 -> VHID 2  advbase 1 advskew 0

Firewall Backup
CARP INTERFACCIA1 -> VHID 1  advbase 1 advskew 10
CARP INTERFACCIA2 -> VHID 2  advbase 1 advskew 10

Configurazione active/active

Questo tipo di configurazione prevede che entrambi i nodi siano master contemporaneamente ma per VHID diversi. Per ottenere questo comportamento è necessario che le interfacce virtuali (VHID) vengano suddivise tra gli host affinchè ognuno sia master di un certo numero d'interfacce.

Un esempio di parametri potrebbero essere:

Firewall A
CARP INTERFACCIA1 -> VHID 1  advbase 1 advskew 0
CARP INTERFACCIA2 -> VHID 2  advbase 1 advskew 10

Firewall B
CARP INTERFACCIA1 -> VHID 1  advbase 1 advskew 10
CARP INTERFACCIA2 -> VHID 2  advbase 1 advskew 0

In questo modo il Firewall A sarà master per l'interfaccia VHID 1 mentre il Firewall B sarà master per l'interfaccia VHID 2

Conclusione

In questo primo articolo abbiamo visto perchè nasce il carp, cos'è e quali sono i parametri principali necessari a determinare il comportamento degli host appartenenti ad un gruppo di HA. Nel prossimo vedremo come gli host si scambiano le informazioni sugli stati delle connessioni.
Posta un commento