# Network address translation

Nel campo delle reti telematiche, il network address translation o NAT, ovvero traduzione degli indirizzi di rete, conosciuto anche come network masquerading, è una tecnica che consiste nel modificare gli indirizzi IP contenuti negli header dei pacchetti in transito su un sistema che agisce da router all'interno di una comunicazione tra due o più host.
Sono molto note anche alcune tipologie specifiche di NAT, come l'IP masquerading e il port forwarding.

## Descrizione
### Tipi di NAT

Il NAT è spesso implementato dai router e dai firewall.
Si può distinguere tra source NAT (SNAT) e destination NAT (DNAT), a seconda che venga modificato l'indirizzo sorgente o l'indirizzo destinazione del pacchetto che inizia una nuova connessione.
I pacchetti che viaggiano in senso opposto verranno modificati in modo corrispondente, in modo da dare ad almeno uno dei due computer che stanno comunicando l'illusione di parlare con un indirizzo IP diverso da quello effettivamente utilizzato dalla controparte.
Per implementare il NAT, un router ha quindi bisogno di effettuare il tracciamento delle connessioni, ovvero di tenere traccia di tutte le connessioni che lo attraversano. Per "connessione" in questo contesto si intende un flusso bidirezionale di pacchetti tra due host, identificati da particolari caratteristiche a livelli superiori a quello di rete (IP):
* nel caso di TCP è una connessione TCP in senso proprio, caratterizzata da una coppia di porte.
* nel caso di UDP, per quanto UDP sia un protocollo di trasporto senza connessione, viene considerata connessione uno scambio di pacchetti UDP tra due host che usino la stessa coppia di numeri di porta.
* altri protocolli vengono gestiti in modo analogo, usando caratteristiche del pacchetto a livelli superiori ad IP per identificare i pacchetti che appartengono ad una stessa connessione.

## Source NAT

Nel source NAT, le connessioni effettuate da uno o più computer vengono alterate in modo da presentare verso l'esterno uno o più indirizzi IP diversi da quelli originali. Quindi chi riceve le connessioni le vede provenire da un indirizzo diverso da quello utilizzato da chi effettivamente le genera.

### Motivazioni

Storicamente il NAT si è affermato come mezzo per ovviare alla scarsità di indirizzi IP pubblici disponibili, soprattutto in quei paesi che, a differenza degli USA, hanno meno spazio di indirizzamento IP allocato pro-capite.
* Considerato che spesso gli indirizzi IP pubblici statici hanno un prezzo, per molti utenti Internet questo costo di indirizzi IP extra non sarebbe stato compensato dai benefici che avrebbero potuto ricavare. Viene quindi utilizzato un IP pubblico dinamico gestito dall'ISP (Internet Service Provider).
* Le tecniche utilizzate per risparmiare indirizzi IP pubblici rendono i dispositivi non direttamente raggiungibili da internet, per cui spesso questa configurazione viene scelta per ragioni di sicurezza, anche se il NAT non è stato pensato per funzionare come sistema di protezione, per cui rimane sempre meno efficace rispetto ad un firewall.

### IP masquerading o PAT (Port Address Translation)

Viene detto IP masquerading (a volte NAT dinamico) un caso particolare di source NAT, in cui le connessioni generate da un insieme di computer vengono "presentate" verso l'esterno con un solo indirizzo IP. La tecnica è detta anche Port Address translation (PAT), IP Overloading o NAPT (Network Address and Port Translation), in quanto vengono modificati non solo gli indirizzi IP ma anche le porte TCP e UDP delle connessioni in transito. Tale tecnica viene codificata nella RFC2663, col nome di "Network Address Port Translation (NAPT)".
I Network Address and Port Translation sono quindi Network Address Translation ai quali viene aggiunta la funzione di tradurre anche le porte e, quindi, dare una diversa e dinamica mappatura delle porte rispetto a quella vista dall'esterno. Quando un software chiede l'uso di una determinata porta, che risulta chiusa, il NAPT entra in funzione, traducendola e reindirizzandola su una seconda porta aperta. Con questa mappatura ci si riserva la possibilità di utilizzare un software anche da remoto ma senza aprire porte che potrebbero essere soggette ad eventuali attacchi di virus o aggressori.
Questo metodo prevede di individuare una rete "interna" (che tipicamente utilizza indirizzi IP privati) ed una "esterna" (che tipicamente utilizza indirizzi IP pubblici), e permette di gestire solo connessioni che siano originate da host della rete "interna".
Ciascuna connessione TCP o UDP viene gestita individualmente: quando la connessione viene iniziata, la porta sorgente originale può essere modificata, e il router NAT mantiene una tabella di corrispondenze tra porte sull'indirizzo esterno e corrispondenti porte e indirizzi IP privati. Quando riceve un pacchetto TCP o UDP sull'indirizzo IP esterno, consulta la tabella per sapere a quale host interno e su quale porta inviarlo. Il router NAT deve quindi tenere traccia di tutte le connessioni TCP e UDP attive tra la rete interna e quella esterna (e preoccuparsi di eliminare le voci inutilizzate da questa tabella mediante un meccanismo di scadenza). Alcune implementazioni modificano sistematicamente le porte sorgente di tutte le connessioni, utilizzando tipicamente numeri di porte molto alti (tipicamente sopra 61000), altre tendono a mantenere i numeri di porta originali, e li modificano solo se un numero di porta sorgente è utilizzato da due host contemporaneamente.
Questa tecnica è spesso usata per collegare le Intranet (reti private sviluppate sul modello di Internet) ad Internet, permettendo di mantenere un piano di indirizzamento IP che non permetterebbe la connessione diretta ad internet, di risparmiare indirizzi IP pubblici e di "nascondere" all'esterno una rete privata. In una intranet, gli host utilizzano normalmente indirizzi IP privati, e necessitano di un dispositivo che possa effettuare la traduzione da indirizzo IP privato (valido nella sola Intranet) ad indirizzo IP pubblico (quindi utilizzabile in Internet): questo dispositivo può essere un host multicollegato che effettui relaying a livello 3 oppure un tipico router.
Alcuni host possono, però, avere la necessità di utilizzare un proprio ben determinato indirizzo pubblico in uscita pur conservando il proprio indirizzo privato. In questo caso tramite il NAT statico si può fare una mappatura 1:1 in cui è garantito il mascheramento ma l'unicità dell'host in uscita permette di tradurre solamente l'indirizzo IP sorgente lasciando inalterata la porta TCP/UDP (questa tecnica è chiamata NAT 444).

## Destination NAT

Nel destination NAT, le connessioni effettuate da uno o più computer vengono alterate in modo da venire redirette verso indirizzi IP diversi da quelli originali. Quindi chi effettua le connessioni si collega in realtà ad un indirizzo diverso da quello che seleziona.

### Possibili usi del destination NAT

* Port forwarding: in una configurazione di masquerading, può essere necessario che alcuni host o servizi di rete ospitati sulla rete "mascherata" siano accessibili dall'esterno. Per ottenere questo, viene utilizzata una configurazione detta Port forwarding, per cui le connessioni verso una determinata porta TCP o UDP dell'indirizzo esterno vengono redirette verso un particolare host della rete interna.
* Bilanciamento del carico di lavoro: tramite il destination NAT si può realizzare un sistema in cui una connessione destinata ad un indirizzo IP viene reindirizzata a un altro indirizzo scelto tra quelli di un insieme di server che si hanno a disposizione. Questo permette di distribuire il carico di lavoro tra diversi server, migliorando così le prestazioni del servizio di rete offerto dal sistema.
* Gestione dei fallimenti: il destination NAT può essere usato per realizzare un sistema ad alta disponibilità. Un sistema di questo tipo deve essere sempre in grado di offrire il servizio di cui è responsabile. Tutti i server sono soggetti a possibili fallimenti. Se si fa uso di un router con destination NAT, il router può rilevare il fallimento del server principale e reindirizzare le connessioni a un server secondario, mantenendo così il servizio attivo.
* Trasparenza del servizio di proxy: il destination NAT può reindirizzare le connessioni (ad esempio HTTP) a un server speciale, chiamato proxy, che ha a disposizione una memoria temporanea in cui memorizza il contenuto di siti web visitati in precedenza. Se la connessione richiesta da un client è verso un indirizzo di cui il proxy ha già a disposizione il contenuto, esso invierà al client i dati richiesti senza la necessità di effettuare una vera connessione a Internet. Questa tecnica è usata dagli Internet Service Provider per ridurre l'uso della banda di trasmissione senza richiedere ai client di configurare il loro browser per il supporto del proxy, anche se ci sono delle controindicazioni.

## Double NAT

Talvolta è necessario far comunicare tra loro due LAN, entrambe connesse ad Internet tramite IP masquerading (ad esempio, due sedi di una stessa azienda). In questi casi viene generalmente utilizzata una VPN (Virtual Private Network) tra i due router che connettono le reti ad Internet, indirizzando sulla VPN il traffico tra le due LAN.
In alcuni casi però capita che le LAN utilizzino gli stessi range di indirizzi IP, quindi non è possibile collegarle direttamente, ma sarebbe necessario rinumerare una delle due reti, ovvero riassegnare indirizzi IP in una diversa sottorete a tutti gli host. Questa operazione è normalmente faticosa, comporta disservizi e spese, per cui spesso si preferisce ricorrere a configurazioni di "double NAT", che nascondono reciprocamente le due reti, permettendo loro di comunicare come se non usassero indirizzi IP sovrapposti.
Le configurazioni di double NAT possono essere descritte come combinazioni di Source e Destination NAT.

## Problematiche

Il NAT non è ben visto dai puristi delle reti, in quanto mina profondamente la semplicità di IP, e in particolare viola il principio della comunicazione "da qualsiasi host a qualsiasi host" (any to any). Questa critica "filosofica" si ripercuote in conseguenze pratiche:
* L'instradamento dei pacchetti viene a dipendere non solo dall'indirizzo IP destinazione, ma anche da caratteristiche di livello di trasporto.
* Le configurazioni NAT possono diventare molto complesse e di difficile comprensione.
* Il dispositivo che effettua il NAT deve dedicare una sua porta per ogni connessione attiva tra i pc interni e l'esterno, limitando notevolmente il numero di porte totali utilizzabili.
* L'apparato che effettua il NAT ha bisogno di mantenere in memoria lo stato delle connessioni attive in ciascun momento. Questo a sua volta viola un principio insito nella progettazione di IP, per cui i router non devono mantenere uno stato relativo al traffico che li attraversa.
** Possono essere necessarie grandi quantità di memoria sul router
** I protocolli di alta disponibilità del router, come HSRP, diventano molto più complessi da realizzare, perché è necessario che il router di backup mantenga sempre aggiornata una copia della tabella NAT del principale.
* Alcune applicazioni inseriscono nel dato utile (ovvero il frame meno l'intestazione ed il checksum, payload) informazioni relative al livello IP o TCP/UDP. Questo rende difficile attraversare un NAT, ed è necessario che il dispositivo NAT analizzi il traffico di controllo riscrivendo queste informazioni.