Logo Hinetd

HIgh NETwork Design

Internetworking

Sicurezza Informatica

Analisi & Studi

Software

Cosa è Hinetd

Personale

Help

Internetworking

Source Routing Appliance

Il nome "esotico" della soluzione presentata in questo articolo fa riferimento semplicemente alla realizzazione, con sistemi open source, di un apparato in grado di effettuare routing basandosi sugli indirizzi sorgente di una trasmissione IP, in modo analogo a funzioni di alcuni apparati proprietari.

L'occasione dello sviluppo del dispositivo è nata dalla necessità di utilizzare due accessi ad Internet, distinguendo l'operatore in base all'indirizzo dell'host di partenza e disponendo comunque di tutte le funzionalità che un normale router mette a disposizione, con un meccanismo di alta affidabilità che garantisca la continuità di servizio.

Per la realizzazione della versione definitiva dell'apparato è stato scelto il sistema operativo OpenBSD per le sue caratteristiche di sicurezza e robustezza, ma un prototipo era stato realizzato su s.o. Linux.

Il funzionamento di base del sistema prevede che sia configurato come router di default per la LAN ma che disponga di due interfacce collegate ad Internet tramite operatori distinti, con default gateway distinti e associati ad ogni interfaccia esterna.

In base all'indirizzo sorgente del pacchetto ricevuto, si instrada il traffico sulla interfaccia prevista dal routing predefinito, inviandolo al successivo hop per il percorso di default verso la destinazione. È importante notare che il dispositivo è assimilabile, come ruolo, ad un router di frontiera o ad un firewall e che pertanto dovrebbe disporre di un unico default gateway, mentre in questa configurazione può utilizzare un default gateway per ogni accesso ad Internet al quale è attestato.

Un aspetto curato in particolare nella realizzazione del dispositivo è stata la sua affidabilità, ricorrendo ad un sistema in cluster di due nodi dei quali uno aveva la funzione di sistema di backup.

Implementazione con OpenBSD

La funzionalità del source routing viene facilmente implementata sfruttando le potenzialità del sistema di packet filter di OpenBSD "pf" che, oltre a realizzare le tipiche funzioni di firewalling, mette a disposizione comandi estesi di routing.

Con "pf" è possibile aggregare insiemi di indirizzi secondo metodologie estremamente flessibili e utilizzarne i gruppi in lista di accesso con le quali definire, in base alle caratteristiche dei protocolli IP e TCP, instradamenti verso precise interfacce e default gateway a queste relative.

Poiché tramite lo stesso sistema è possibile implementare regole di packet filter e di traslazione degli indirizzi tramite NAT, il sistema può funzionare anche come firewall perimetrale.

Per garantire la continuità di servizio è stato studiato un meccanismo che prevedere la presenza di due nodi, uno attivo e uno di backup, che assumono l'indirizzo del default gateway per la LAN locale, grazie al controllo di un altro software messo a disposizione da OpenBSD, il CARP.

Connessioni Logiche

Tuttavia in questa configurazione si sarebbe presentato un problema qualora si fosse determinato un guasto su una delle interfacce del nodo attivo, in quanto i meccanismi di controllo sullo stato di funzionamento delle interfacce di rete non garantivano risultati affidabili. In questo caso il malfunzionamento di una delle interfacce avrebbe fatto acquisire l'indirizzo IP condiviso dall'interfaccia del nodo di backup, ma il nodo attivo avrebbe continuato a ricevere pacchetti dalle interfacce buone. In pratica era necessario attivare il meccanismo di failover sul CARP contemporaneamente sulle tre interfacce.

Una soluzione al problema è stata trovata utilizzando una sola interfaccia di rete per nodo e creando su questa tre VLAN per implementare le tre interfacce IP necessarie alla realizzazione dell'apparato.

Connessioni Fisiche

La configurazione di rete veniva completata da uno switch sul quale definire le VLAN per il collegamento ai router degli operatori e al router o alla LAN locale. Riassumendo, gli ingredienti per la realizzazione del "Source Routing Appliance" sono:

  • la configurazione delle interfacce di rete con le VLAN sufficienti al numero di instradamenti previsti (due in questo caso);
  • la configurazione del CARP per la condivisione di indirizzi IP tra i due nodi;
  • la configurazione del pf per le regole di instradamento e quanto necessario per il caso particolare (packet filtering, NAT, ecc.).

I comandi chiave per realizzare la funzionalità descritta con il pf si riducono alla definizione delle interfacce, dei loro indirizzi IP e alla istruzione di source routing:

# Configurazione "pf" per source routing su vlan

....

intvl_if = "vlan0" # vlan per rete interna

extvl_if1 = "vlan1" # vlan per il primo accesso ad Internet

extvl_if2 = "vlan2" # vlan per il secondo accesso ad Internet

ext_gw1 = "indirizzo IP" # default gateway primo operatore

ext_gw2 = "indirizzo IP" # default gateway secondo operatore

table <lan1_int> const { sottoreti IP che accederanno tramite il primo operatore}

table <lan_dmz> const { sottoreti IP di eventuali DMZ }

table <lan2_int> const {sottoreti IP che accederanno tramite il secondo operatore }

pass in quick on $intvl_if route-to ($extvl_if1 $ext_gw1) from { <lan1_int>, <lan_dmz> } to any

pass in quick on $intvl_if route-to ($extvl_if2 $ext_gw2) from <lan2_int> to any

...

Implementazione con Linux

La realizzazione del Source Routing Appliance con Linux può seguire gli stessi accorgimenti utilizzati per OpenBSD e prevedere quindi la presenza di due nodi per l'alta affidabilità, la configurazione di VLAN per garantire il corretto funzionamento dell'intero sistema nel caso di guasto su una delle interfacce di rete, la condivisione di indirizzi IP e i comandi per il source routing, realizzati rispettivamente tramite:

  • il comando "vconfig" o le voci necessarie negli script di inizializzazione di rete per le VLAN;
  • l'utilizzo del software "heartbeat" o il porting del CARP su Linux per la condivisione degli indirizzi;
  • le funzioni di "iproute" per i comandi di source routing.
Common Creative logo

Eccetto dove diversamente specificato,
i contenuti di questo sito sono rilasciati sotto Licenza Creative Commons Attribuzione 2.5