Network Address Translation

Il NAT, definito dalla RFC 1631, è il processo che cambia un indirizzo IP con un altro indirizzo IP nell’header del pacchetto IP. In pratica, il NAT è usato per permettere a degli host che hanno un indirizzo IP privato di accedere a una rete con diverso indirizzamento, spessissimo usato per accedere a reti con indirizzamento pubblico come internet. 

 

Un elaboratore abilitato a NATtare, ovvero a tradurre un indirizzo con un altro, può essere un computer Unix o un router che opera al confine di un dominio STUB (una internetwork che ha un solo collegamento verso il mondo esterno). Quando un host nel dominio STUB vuole colloquiare con un host che si trova fuori da questo dominio, spedisce un pacchetto di dati con l’indirizzo IP di origine (Source Address) all'elaboratore abilitato a NATtare. Questo elaboratore NAT, ricevuto il pacchetto, lo processa ispezionando l’header IP e, se l’indirizzo IP sorgente corrisponde ad un indirizzo IP della sua NAT Table, sostituisce l’indirizzo IP sorgente (Inside Local IP Address) con un altro indirizzo IP globalmente unico (Inside Global IP Address). Questo nuovo indirizzo è l’ IP con il quale l’host  viene mappato all’esterno. Tipicamente su internet, ma non solo.

 



In origine il NAT é nato per affrontare il problema dell’esaurimento degli indirizzi IP della rete pubblica, massimizzando quindi l'uso degli indirizzi IP pubblici assegnati. La traduzione di un indirizzo IP, è una soluzione che permette di utilizzare lo stesso indirizzo IP per l’accesso ad Internet di piú sottoreti interne all’organizzazione, riducendo di conseguenza la necessitá di utilizzare degli indirizzi IP registrati. In sintesi il NAT compie la traduzione degli Indirizzi IP Locali interni in Indirizzi IP Globali esterni e viceversa.

 

Indirizzi IP interni ed esterni

L’IETF ha definito, all’interno dello spazio di indirizzamento IP, alcuni range di indirizzi che sono riservati all’uso privato, da utilizzare cioè solamente in ambito privato (RFC 1918). Gli indirizzi privati sono indirizzi che non sono instradabili sulla rete pubblica ovvero, se un router pubblico riceve un pacchetto destinato ad un indirizzo IP privato, il pacchetto viene scartato.

 

Indirizzi IP per uso privato

(Classe A) da 10.0.0.0 a 10.255.255.255

(Classe B) da 172.16.0.0 a 172.31.255.255

(Classe C) da 192.168.0.0 a 192.168.255.255

 

Inoltre la rete 127.0.0.0 (di classe A) è normalmente usata dai sistemi operativi Unix come rete di “loopback”, per esempio il comando << ping 127.0.0.1 >> effettua un test sul funzionamento della rete ( e dei dispositivi di rete locali all’host come la NIC card) senza utilizzare realmente la rete.

 

Tipi di traduzioni NAT 

La traduzione effettuata utilizzando il NAT può essere di due tipi: statica o dinamica.

 

Traduzione statica 

La Traduzione Statica avviene quando il gestore della rete configura manualmente sulla macchina abilitata ad effettuare il NAT gli indirizzi in una tabella di NAT (NAT Table). Uno specifico indirizzo interno viene mappato uno specifico indirizzo esterno e viceversa in modalitá uno-a-uno. Gli indirizzi interni ed esterni sono configurati staticamente uno per uno. 

 

Traduzione dinamica 

La Traduzione Dinamica prevede che i router di confine NAT siano configurati con un elenco di indirizzi interni che devono essere tradotti, e con un elenco di indirizzi pubblici detto “pool” che può essere utilizzato per assegnare gli indirizzi esterni. Ci possono essere piú pool di indirizzi esterni. Quando un host interno accede alla rete pubblica, viene allocato per la traduzione del suo indirizzo privato uno degli indirizzi del pool. Questi indirizzi poi vengono disallocati (diciamo rilasciati) con un meccanismo di timeout. In questo modo piú host interni  possono condividere un singolo indirizzo IP esterno in momenti diversi. Questa procedura permette di sfruttare al massimo lo spazio di indirizzamento pubblico. 

 

I componenti del NAT 

Il NAT viene effettuato dal router di confine (attenzione che il confine è un termine usato per la segmentazione “border”. Spesso si segmentano reti locali in diverse dmz o altri meccanismi e quindi il nat serve a far colloquiare host diversi ma appartenenti a una stessa struttura amministrativa come la LAN) . A questo router si assegna un indirizzo IP Globale pubblico sulla interfaccia verso la rete esterna, e un indirizzo IP privato sulla interfaccia verso la rete interna.

 

La funzionalità di NAT era disponibile inizialmente solo utilizzando dei firewall. Dalla versione di Cisco IOS 11.2 in poi questa funzionalitá è disponibile su tutti i router Cisco dotati di IOS di tipo IP-Plus. Dalla versione IOS 12.0 in poi questa funzionalitá è disponibile nella versione base IP-Only di tutti i modelli di router.

 

Terminologia usata

Vediamo nel seguito la terminologia utilizzata nell’ambito del NAT: 

 

Inside Local IP address – Si tratta degli indirizzi assegnati agli host della rete interna privata (STUB network). Questi indirizzi sono di norma inseriti in una parte della tabella NAT e precisamente nella parte riguardante la rete privata interna. Questi indirizzi sono unici all’interno della rete interna.

 

Inside Global IP address – Si tratta di un indirizzo IP che rappresenta in un certo momento uno o piú indirizzi locali interni sulla rete pubblica. Questi indirizzi fanno parte della tabella NAT del router e piú precisamente della colonna corrispondente agli indirizzi IP pubblici. Si tratta di un indirizzo pubblico assegnato da uno spazio di indirizzi globalmente unico dal provider di servizi Internet (ISP).

 

Outside global IP address – Si tratta di un indirizzo IP che è stato assegnato ad un host sulla rete Internet. É un indirizzo pubblico instradabile su Internet. 

 

Simple translation – Traduzione semplice di un indirizzo IP verso un altro indirizzo IP (uno-a-uno).

 

Extended  translation – Traduzione di tipo esteso. Ad una coppia composta da un indirizzo IP (inside local) e da un numero di porta viene associato un altro indirizzo IP (inside global) e un altro numero di porta. Questa modalitá serve come vedremo nel seguito ad effettuare il cosiddetto “overload”.

 

Quando si deve utilizzare il NAT?

Si utilizza il  NAT se:  

 

Il NAT risolve i problemi di indirizzamento

La tecnologia NAT permette ad una internetwork privata che usa indirizzi IP privati a connettersi ad una rete pubblica come Internet. Un router NAT è posizionato sul confine tra un dominio STUB (rete interna) ed una rete pubblica (rete esterna), e traduce gli indirizzi locali interni in indirizzi IP globalmente unici prima di spedire pacchetti alla rete esterna.  

 

Il NAT approfitta del fatto che relativamente pochi host, in un dominio STUB, comunicano fuori del dominio in un determinato periodo di tempo. Perciò, solamente un sottoinsieme degli indirizzi IP in un dominio STUB deve essere tradotto in un indirizzo IP globalmente unico per comunicare con l’esterno in un dato momento. 

  

Esempi di utilizzo del NAT 

Il NAT puó essere impiegato anche quando due società che hanno identici schemi di indirizzamento interno si fondono, oppure quando una società cambia il suo Internet Service Provider (ISP) ma non vuole cambiare il suo schema di indirizzamento interno.   

 

Le considerazioni per implementare il NAT 

  

Vantaggi del NAT 

Prima di implementare il NAT, bisogna valutare le seguenti considerazioni.

I vantaggi del NAT sono: 

  

Svantaggi del NAT

Seguono i tipici svantaggi del NAT:

 

Le operazioni del NAT

1.      Tradurre gli indirizzi interni locali

2.      Effettuare un “overloading” degli indirizzi interni globali

  

1. Tradurre gli indirizzi interni locali  

Stabilire una associazione fra indirizzi interni locali e indirizzi interni globali. 

 

2. “L’Overloading” degli indirizzi interni globali 

Si possono risparmiare gli indirizzi di un pool di indirizzi globali, effettuando una associazione non a livello di indirizzo IP ma a livello di accoppiata indirizzo IP/porta. Quando differenti indirizzi interni locali sono associati allo stesso indirizzo interno globale, si utilizzano i numeri di porta (TCP o UDP), per distinguere tra loro i pacchetti associati alle diverse conversazioni e di conseguenza ai diversi host locali. 

 

Come sono tradotti gli indirizzi interni locali e viceversa  

Questa sezione illustra il funzionamento del NAT.  

 

Nei seguenti passi viene mostrato il funzionamento del meccanismo della traduzione NAT semplice quando viene usata per tradurre indirizzi interni verso destinazioni esterne alla vostra rete e viceversa.

Step 1: L’host A interno con IP 10.1.1.2 apre un collegamento verso l’host B esterno con IP 199.100.0.1. 

  

 

Step 2: Viene inviato il primo pacchetto IP dall’host A 10.1.1.2, il router NAT di confine ricevuto il pacchetto IP lo fa salire spacchettizzandolo lungo la pila OSI fino al livello tre, a questo punto il router legge l’indirizzo IP di origine Source IP Address,  questo impone al router di controllare la sua NAT table. Se viene trovata una traduzione, cioè una corrispondenza tra il Source IP Address (l’indirizzo IP Privato interno) ed un indirizzo IP nel campo “Inside Local IP Address” della tabella di NAT si procede alla traduzione ovvero nel pacchetto IP viene sostituito l’indirizzo IP nel campo Source IP Address con l’Inside Global IP Address corrispondente. A questo punto viene ricalcolato l’header checksum e il pacchetto è poi fatto avanzare lungo la pila OSI verso il basso ed inviato al buffer della porta di uscita del router, per essere poi spedito sulla rete pubblica verso la sua destinazione con il suo nuovo Source IP Address.

 

 

 

 

Se non viene trovata nessuna traduzione staticamente assegnata, il router, che non può inviare all’esterno un pacchetto IP con un indirizzo IP privato, “pesca” nel “pool di indirizzi pubblici” e assegna tra quelli disponibili nel pool un nuovo indirizzo Source IP Address pubblico locale. Questo indirizzo viene usato per modificare il campo Source IP Address in uscita, viene quindi ricalcolato l’header checksum. A questo punto il pacchetto viene inviato verso il buffer di uscita verso la destinazione con il suo nuovo Source IP Address pubblico.

 

Step 3: Il router NAT di confine sostituito l’indirizzo IP privato 10.1.1.2 locale con l’indirizzo IP Globale pubblico locale 198.168.2.2  manda avanti il pacchetto verso l’host B. 

  

Step 4: L’host B riceve il pacchetto e risponde all’host A con un pacchetto IP che ha nel campo Destination IP Address l’indirizzo IP Globale interno 198.168.2.2, che è l’indirizzo pubblico assegnato dal router NAT. 

 

  

 

Step 5: Quando il router di confine riceve il pacchetto con l’indirizzo Destination IP Address Globale interno, il router, lo fa salire spacchettizzandolo lungo la pila OSI fino al livello tre, a questo punto il router legge l’indirizzo IP,  compie un lookup nella NAT table trovando una corrispondenza con un indirizzo IP Privato locale interno. 

 

 

 

Step 6: Il router effettua il NAT sostituendo nel pacchetto IP l’indirizzo IP nel campo Destination IP Address, viene ricalcolato l’header checksum e fatto avanzare lungo la pila OSI verso il basso ed inviato al buffer della porta di uscita del router e poi spedito sulla rete privata verso la sua destinazione, l’host A con il suo nuovo Destination IP Address.

  

Questo è l’esempio della procedura standard che viene compiuta dalla traduzione NAT statica o NAT dinamica. 

 

Il router NAT mantiene al suo interno una tabella di record con la corrispondenza tra l’indirizzo IP privato sorgente della comunicazione e l’indirizzo IP pubblico di destinazione della comunicazione, questi record vengono creati in modo dinamico ogni volta che un pacchetto verso una data destinazione attraversa il NAT. I record vengono poi cancellati tramite un meccanismo di timeout.