Andrea Beggi

If I could, I would, but I can't so I shan't.

TCP/IP in pillole: NAT

A T T E N Z I O N E ! Questo post ha piu' di sei mesi. Le informazioni contenute potrebbero non essere aggiornate.

NATNAT (Network Address Translation) è una tecnica usata per sostituire nell’intestazione di un pacchetto IP un indirizzo, sorgente o destinazione, con un altro indirizzo. E’ definito nella RFC 3022
NAT, nel suo impiego più diffuso, viene usato per permettere ad una rete che usa una classe di indirizzi privata di accedere ad Internet usando uno o più indirizzi pubblici.
E’ stato studiato nel momento in cui ci si è accorti che lo spazio di indirizzamento IPv4 non era poi così grande come era sembrato al momento della sua creazione.
All’inizio si credeva fosse una soluzione temporanea, che l’implementazione di IPv6 sarebbe arrivata presto, invece la rapida crescita dell’accesso ad Internet ha reso il NAT una pratica molto comune, IPv6 è di là da venire, e gli indirizzi IPv4 sono sempre meno e sempre più costosi.
Tutto questo ha portato alla situazione attuale, tanto più che ci si è accorti che i principali protocolli TCP funzionano molto bene anche dietro ad un NAT.
In realtà non tutti nuovi tipi di comunicazione funzionano con NAT, una per tutte IPSec, quindi si è reso necessario aggiungere il supporto per questi protocolli. In particolare si tratta di aggiungere lo specifico supporto ALG (Application Level Gateway) per l’applicazione desiderata. Il supporto ALG usato per permettere alle connessioni IPSec di passare attraverso un NAT si chiama NAT Traversal.

La versione di NAT tradizionale è di due tipi:

  • Basic NAT, che si occupa della traduzione degli indirizzi. Durante una sessione di comunicazione iniziata da un host all’interno della rete privata verso un server pubblico, stabilisce un mapping uno a uno dei due indirizzi. La connessione può essere iniziata solo dall’interno.
  • NATP (Network Address Port Translation), che si occupa della traduzione degli indirizzi ed anche delle porte TCP. Diversi indirizzi IP e le loro porte TCP/UDP sono mappate in un singolo indirizzo con le sue porte TCP/UDP. (E’ detta anche NAT/PAT).

I due metodi spesso sfumano uno nell’altro, ma l’accezione comune del termine NAT si riferisce al secondo tipo.
Ci sono anche altri tipi di NAT, come il bidirezionale, dove il mapping è uno a uno e la connessione può essere iniziata da entrambe le parti, ed il NAT doppio, che si usa per mettere in comunicazione due reti che condividono lo stesso spazio di indirizzi.

Facciamo un esempio pratico: una rete con una ventina di host usa una classe di indirizzi privati del tipo 192.168.0.0. In qualche punto del path che collega la rete ad Internet c’è un dispositivo che fa il NAT, tipicamente il firewall o il router, che espone la rete verso Internet con un unico indirizzo IP pubblico, che può essere statico o dinamico. Configurando opportunamente il router ed il firewall si controlla il traffico e, opzionalmente si possono pubblicare servizi che “girano” su host in rete. In realtà è più sicuro usare una DMZ (DeMilitarized Zone), ma non ne parliamo, qui.
Il device NAT si comporta così: nel pacchetto in uscita toglie l’indirizzo privato ed inserisce il proprio (pubblico), quando il pacchetto di risposta arriva fa il processo inverso, toglie il proprio IP e mette l’indirizzo privato dell’host che ha generato la sessione, e glielo inoltra.
Ma come fa a capire di chi è il pacchetto, se due o più host iniziano una connessione verso lo stesso server, e quindi l’indirizzo e la porta TCP sorgente dei pacchetti di ritorno sono gli stessi?
Presto detto: le porte sorgenti degli host privati, unite all’indirizzo IP, costituiscono un socket univoco che permette di identificare il destinatario del pacchetto. (Le porte di origine sono scelte tramite un algoritmo pseudo casuale).
Esempio:
Connessione A, tra host 192.168.0.1, porta origine 45875, e 212.239.40.76, porta destinazione 80.
Connessione B, tra host 192.168.0.2, porta origine 35821, e 212.239.40.76, porta destinazione 80.
Dopo il NAT, i due indirizzi privati saranno sostituiti da un unico IP pubblico (es:151.44.134.29), ma le porte di origine rimarranno le stesse. Al momento dell’arrivo del pacchetto con sorgente IP 212.239.40.76, porta 80 e destinazione 151.44.134.29 porta 45875, il router NAT riconoscerà la connessione A. Il pacchetto con sorgente IP 212.239.40.76, porta 80 e destinazione 151.44.134.29 porta 35821 sarà destinato all’host che ha generato la connessione B.

Da sottolineare come in NAT sia completamente trasparente per gli host in comunicazione. Inoltre non esiste alcun modo per stabilire se e quanti host privati ci siano dietro un IP pubblico “nattato”. In parole povere il vostro provider non è in grado di sapere se in casa vostra c’è un solo PC oppure un intero datacenter. Nel più puro stile hacker qualcuno si è chiesto se fosse possibile un simile conteggio, ma a quanto pare è difficile cercare di capire cosa si trovi dietro ad un NAT, a meno di non sniffare il traffico nelle immediate vicinanze, e comunque non esiste alcun tool che faccia una cosa del genere, si tratta solo di uno studio teorico. (Attenzione! Lettura consigliata solo a geek duri e puri. :D)

I vantaggi del NAT sono quelli che abbiamo visto:

  • Risolve in parte il problema della carenza di indirizzi IPv4.
  • Non è necessario cambiare gli indirizzi della rete privata per accedere ad Internet.
  • I dati viaggiano tra le reti in maniera trasparente.
  • I protocolli più comuni funzionano bene.
  • E’ una sicurezza in più poichè il traffico entrante non può raggiungere gli host sulla rete privata, a meno che non siano state definite specifiche regole di NAPT.

Gli svantaggi:

  • NAT non è conforme ai dettami che prevedono che la connessione end-to-end debba essere trasparente ed i pacchetti non modificati.
  • Dato il suo funzionamento, è richiesto uno specifico supporto ALG per tutte le applicazioni che inseriscono l’indirizzo di destinazione nell segmento dati del pacchetto.
  • Sempre per queste applicazioni, il pacchetto deve essere deframmentato prima di essere inoltrato ad un host dietro ad un NAT.
  • E’ un lavoro aggiuntivo per la CPU dei router che lo implementano.
  • Introduce un “single point of failure” nella rete, poichè, a meno di complicate acrobazie di sharing, gli host della rete non possono usare più di un dispositivo NAT.

Anche in ambiente casalingo si usa il NAT: tutti router ADSL lo usano, e va correttamente configurato, se si desidera aprire porte verso servizi interni. Non è sufficiente configurare il firewall sul proprio PC, anche il router va “istruito” perchè inoltri le richieste provenienti dall’esterno su una determinata porta, verso l’indirizzo e la porta dell’host interno che fornisce il servizio.
Ciascun router ha una gestione diversa, la sezione NAT può chiamarsi di volta in volta NAT, SUA/NAT, PAT, NAT/PAT, Public Server e così via. Bisogna comunque fare riferimento al manuale. Nei router/firewall ZyXel, ad esempio, non è immediatamente chiaro che, oltre a creare la regola del firewall che consenta il passaggio del protocollo desiderato, bisogna anche specificare l’indirizzo e la porta del “SUA Server” nella sezione “SUA/NAT”.

Dal punto di vista della sicurezza, anche se non efficace come un firewall, un NAT offre già buone garanzie, proprio perchè nasconde gli host interni e non indirizza loro il traffico “generico” proveniente dall’esterno.

Riferimenti:

104 Commenti

Aldo | #

Utilizzando ShieldsUP su un PC connesso al router 3G si ottiene: “Your Internet connection has no Reverse DNS”.
Se invece utilizzo un router tradizionale e connesso alla linea ADSL mi individua un Reverse DNS che corrisponde al relativo IP assegnato.
Quindi il webserver non sembra raggiungibile da fuori tramite 3G?
Ho sentito che molto di recente anche tutti gli altri gestori (oltre a Vodafone) assegnano un unico IP pubblico a vari utenti per cui le SIM internet sono associate a IP privati.
Domanda fondamentale: non è più possibile accedere ai sistemi webserver tramite una connessione Internet mobile e quindi non ha più senso parlare del webserver GPRS?

massimo | #

mi piacerebbe tantissimo,
mi puoi dare dei consigli per iniziare a studiare
configurazioni di rete e di router?

meno male che hanno inventato la musica….

Grazie, Massimo

macellon | #

ma cazzo dai, risatina, pappette e fango sotto le suole….