Ridondanza di rete con carp e pfsync su openbsd parte 2°

Bentornati al nostro secondo tutorial sulla ridondanza di rete tra macchine openBSD, questa sera vedremo la parte pratica del tutorial, vale a dire che ci occuperemo della vera e propria configurazione di carp e pfsync.

E’ consigliabile un [[ridondanza di rete con carp e pfsync|ripassino]] prima di procedere, in quanto si riprenderanno concetti e parametri già espressi.

Carp: Settaggio delle interfaccie virtuali

Per far funzionare carp dovremo creare delle interfaccie virtuali da legare a quelle fisiche, queste interfaccie virtuali avranno l’ip esposto con carp e quindi visibile dal resto della rete, e sarà lo stesso ip condiviso dalle due macchine per garantire la continuità di rete.

Carp fa uso di determinati parameteri che verranno spiegati di volta in volta, cominciamo con la prima macchina:

ifconfig carp0 vhid 10 [pass password] [carpdev eth0] \
[advbase 1] [advskew 50] [state state] 10.10.10.2 \
netmask 255.255.255.0

vediamo i parametri passati ad ifconfig:

carp0: è il nome dell’interfaccia virtuale, essendo dedicata a carp con molta fantasia l’abbiamo chiamata carp0

vhid: il vhid è l’acronimo per Virtual Host ID, è l’id che identifica il gruppo carp a cui l’host appartiene,
questo perchè un sola macchina può appartenere a più segmenti di rete ridondati,
quindi sarebbe necessario creare più carp,
e quindi serve un identificazione univoca dei pacchetti di stato che verranno taggati con questo vhid.

pass: è un parametro opzionale, si può definire una password
del gruppo (vhid) carp condivisa da tutti gli hosts,
utile per innalzare il livello di sicurezza della rete.

carpdev: dobbiamo legare questa interfaccia virtuale ad una fisica,
con questo parametro definiamo tale interfaccia fisica.

advbase: è il lasso di tempo, in secondi, oltre il quale la macchina master
deve mandare un pacchetto di stato per segnalare se è viva o morta,
di default è valorizzato ad 1.

advskew: indica il "peso" della macchina all’interno del gruppo carp,
quella con peso minore è la macchina master,
tutte le altre saranno le macchine slave.

state: con questo parametro si può forzare lo stato dell’interfaccia in init, backup, o master.

Carp: abilitiamo carp via sysctl

adesso dobbiamo abilitare carp via sysctl( 8 ) dato che ovviamente, di default è spento, i parametri che ci interessano sono:

net.inet.carp.allow: abilita o disabilita la ricezione dei pacchetti di stato per

carp. net.inet.carp.preempt: con questa opzione abilitiamo o meno la gestione automatica dell’advskew della macchina.
quando un interfaccia va giù automaticamente viene settato il parametro advskew
di tutte le altre interfaccie carp a 240, ponendo anch’esse in stato di down
e facendo passare tutto il carico sulla macchina slave,
appena la macchina master ritorna disponibile viene abbassato l’advskew al valore iniziale,
facendo ritornare automaticamente la macchina come master.

net.inet.carp.log: abilita o meno il logging dei pacchetti di stato carp.

net.inet.arp.balance: abilita il load balancing del traffico su più macchine facenti parte allo stesso gruppo carp.

quindi ad esempio sulla nostra macchina dopo aver impostato l’interfaccia carp, modificheremo sysctl con:

:~# sysctl -w net.inet.carp.allow=1

ricordiamoci di settare lo stesso parametro anche nel file /etc/sysctl.conf altrimenti al riavvio perderemo la modifica.

Carp: ultime rifiniture

Adesso la configurazione di carp è completata, ma manca ancora una cosa, carp come già detto è un protocollo proprio, e dobbiamo quindi abilitare il transito del traffico per tale protocollo sul firewall, editiamo quindi /etc/pf.conf ed aggiungiamo la riga (prima dei drop finali mi raccomando):

pass out on eth0 proto carp keep state

PfSync: cosa come e perchè

PfSync è il secondo tool che ci serve per mettere in piedi il nostro gruppo di ridondanza con carp, via pfsync le macchine si scambiano quelli che fino ad ora abbiamo chiamato pacchetti di stato, questi pacchetti sono trasmessi dalla macchina che è master, e servono ad indicare che essa è viva e vegeta e che quindi tutto sta andando bene. Entrambe le macchine avranno il parametro advbase settato allo stesso valore, e quindi sapranno l’una ogni quanto deve inviare un pacchetto, e l’altra ogni quanto si deve aspettare tale pacchetto, se trascorso il tempo definito la macchina slave non riceve nulla, questa si attiva, abbassa il parametro advskew ad 1 e diventa automaticamente la macchina master.

La comunicazione tramite pfsync deve essere diretta, vale a dire che tra le due macchine dovranno esserci due schede di rete collegate via back-to-back[fn]Tipo di collegamento diretto tra due schede di rete, tali schede sono collegate tramite un solo cavo di rete cross, senza passare quindi per altri apparati quali switch/hub, ecc…[/fn].

PfSync: interfaccia virtuale e firewall

Come per carp, dobbiamo abilitare il traffico anche per i pacchetti di pfsync, aggiungiamo alle regole di pf quindi:

pass on em0 proto pfsync

ATTENZIONE: Mi sono reso conto che sullo schema di rete, ho segnato sulle due macchine l’interfaccia virtuale pfsync al posto delle fisiche collegate in back-to-back, quindi l’interfaccia pfsync0 in realtà sarà l’interfaccia fisica em0.

Finito col firewall dobbiamo attivare un interfaccia pfsync e legarla alla scheda di rete in b2b:

ifconfig pfsync0 syncdev em0

ripetiamo le operazioni per carp e pfsync anche sulla seconda macchina e questa prima parte è finita; dopo dobbiamo occuparci di configurare il sistema in modo che all’avvio vengano ricreate le interfaccie in maniera opportuna.

Configurazione delle interfaccie al boot

Creiamo i rispettivi file per le interfaccie carp e pfsync e inseriamo i parametri che seguono.

Per /etc/hostname.carp0

inet 10.10.10.2 255.255.255.0 10.10.10.255 vhid 10 carpdev eth0 \ pass password

Per /etc/hostname.pfsync0

up syncdev em0

Abbiamo finito! per verificare il tutto possiamo dare /sbin/ifconfig -A e dovremo ottere, in mezzo al resto, questo risultato:

carp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
carp: MASTER carpdev eth0 vhid 10 advbase 1 advskew 50
groups: carp inet 10.10.10.2 netmask 0xffffff00 broadcast 10.10.10.255

da notare la voca MASTER che indica se la macchina al momento è quella attiva o meno del gruppo.


Altri articoli che potrebbero interessarti

Ridondanza di rete con carp e pfsync su openbsd Chi lavora nell'.con la ridondanza infatti riduciamo quasi allo zero i tempi di disservizio, garantendo...
Alla stregua di C.Colombo..anche io scopro un nuovo mondo (per me) Devo dire che nella nuova azienda dove lavoro sono astuti, scelgono sempre i momenti migliori per mettertela...
Alta Affidabilità (HA) su Linux con HeartBeat Da Wikipedia: Nell'ambito scientifico, con il termine cluster si intende un gruppo di unità simili...
Interfaces bonding su Debian Ritornano i nostri how-to prettamente tecnici :) Questa volta (come sempre) approfitto dell'esperienza...
*BSD&Linux, ovvero: come ti tiro su una vpn tra OpenBSD e Linux (debian) Ieri al lavoro ho imparato come creare un tunnel VPN tra una macchina OpenBSD e una macchina Linux...La...

About the Author

M0rF3uS al secolo Alex è un ggiovine 25enne appassionato di informatica e linux. Lavora come Network and System Administrator e nel tempo libero gioca un pò con la sua fotocamera (Canon EOS 1000D) riuscendo a volte, per sbaglio, a fare qualche scatto decente. Completano il corredo, degli hobbies "vorrei ma non posso" ossia l'astronomia e l'astronautica....si è uno di quelli che da grande vorrebbe fare l'astronauta (povero coglione vero?).