NAT – Network Address Translation

Assegnazione degli indirizzi IP

L’indirizzo IP di ogni host connesso ad una rete deve necessariamente essere univoco. A livello internazionale esiste un’authority che coordina l’assegnazione degli indirizzi IP ed è la IANA (Internet Assigned Numbers Authority) che a sua volta delega alle diverse autorità locali, le quali a loro volta delegano agli ISP dei vari paesi.

Per sopperire alla scarsità di indirizzi IPv4 dovuta all’enorme incremento di dispositivi connessi alla rete, ed in attesa di passare definitivamente ad IPv6 che risolverà alla base il problema, si utilizzano i cosiddetti indirizzi privati, ovvero relativi ad una particolare rete. Tali indirizzi sono quindi visibili solo all’interno di una determinata LAN.

In pratica l’indirizzo IP pubblico è assegnato dall’authority competente, mentre all’interno della propria rete locale è possibile definire degli indirizzi IP privati che non saranno visibili su Internet ma solo all’interno della propria rete locale.

NAT

La tecnica del Network Address Translation nasce originariamente per sopperire in parte alla carenza di indirizzi IPv4. Come il suo nome suggerisce, il NAT è una traduzione di indirizzi IP tra due reti, operata tipicamente dal router, ovvero una traduzione tra un indirizzo IP ed un altro, mantenendo tuttavia un legame logico tra i due indirizzi.

Tramite il NAT è possibile “nascondere” dietro un solo indirizzo IP pubblico numerosi host che all’interno della loro rete locale hanno un proprio indirizzo IP privato.

Il NAT utilizza un gateway con almeno un’interfaccia connessa alla rete locale interna (LAN) e un’altra interfaccia collegata alla rete esterna Internet (WAN). Grazie alle funzioni realizzate dal NAT, tutti i dispositivi della rete locale (aventi un proprio indirizzo IP privato) possono accedere ad Internet tramite l’indirizzo IP pubblico del gateway, e viceversa da Internet è possibile raggiungere uno specifico host all’interno della rete locale. Il gateway, tipicamente un router o un firewall, è lo strumento che si occupa materialmente di effettuare la traslazione degli indirizzi IP e quindi di mantenere le informazioni su queste operazioni in memoria, nella cosiddetta tabella NAT.

Nella pratica l’esigenza di utilizzare la tecnica del NAT si può presentare in due casi:

  • Caso 1: l’host di una LAN deve comunicare con un host su Internet;
  • Caso 2: un host all’interno di una LAN deve essere raggiungibile dall’esterno;

Source NAT

Se ci troviamo nel Caso 1 allora siamo di fronte al primo tipo di traduzione degli indirizzi, detto Source NAT (SNAT), che è il caso più comune e che si verifica quando un host all’interno di una rete locale, dotato quindi soltanto di indirizzo IPv4 privato, deve comunicare con un host che si trova al di fuori della LAN e raggiungibile attraverso un indirizzo IPv4 pubblico.

In questo caso all’interno della LAN dobbiamo distinguere due possibili tipologie di traslazione degli indirizzi:

Static Translation, o traslazione 1 a 1: in questo caso ad ogni host della rete, con il proprio IP privato, verrà assegnato un IP pubblico. Questo è il caso tipicamente detto Network Address Translation.

Dynamic Translation, o traslazione 1 a N: in questo caso tutti gli host della rete condivideranno con il mondo esterno lo stesso IP pubblico ma ad ognuno di essi, affinché sia univocamente identificabile, si attribuirà una specifica porta. Questo è il caso indicato come Port Address Translation (PAT) o più correttamente come Network Address and Port Translation (NAPT). Il Dynamic Translation è il sistema più usato che aiuta a sopperire alla penuria di indirizzi IPv4.

Quando un host della rete, con il proprio IP privato, deve collegarsi con un host su Internet, il gateway prenderà il pacchetto IP inviato dall’host della LAN, modificherà l’header inserendo il proprio indirizzo IP pubblico al posto di quello privato dell’host della rete e un modificherà anche il numero di porta usato internamente dall’host con il numero di una porta disponibile, quindi provvederà ad inviare il pacchetto all’host di destinazione su Internet.

Questi vedrà i dati indicati dal gateway (quindi quelli modificati, non quelli reali dell’host mittente) vedendo quindi solo il gateway come mittente del pacchetto ricevuto, e provvederà a restituire la risposta. Tutte le informazioni che entrano in gioco (IP privato e porta privata dell’host della LAN ha inviato la richiesta) vengono memorizzate nella cosiddetta tabella NAT (o meglio, tabella PAT/NAPT). Quando l’host di destinazione risponderà alla richiesta ricevuta (e modificata) dal gateway, inoltrata dall’host della LAN, a sua volta provvederà ad inviare il pacchetto con la risposta all’indirizzo IP e alla porta che il gateway ha specificato nell’header modificato: tali valori corrisponderanno ad una porta esposta sull’indirizzo IP pubblico del gateway. Il gateway a sua volta, ricevuto quel pacchetto, confronterà i dati header con quelli presenti in tabella e saprà a quale degli host della sua rete inoltrare il pacchetto ricevuto dall’esterno.

Esempio

Abbiamo un router con indirizzo IP pubblico 200.100.100.100 che funziona come gateway predefinito per una rete locale LAN al cui interno si trovano 10 host. All’interno della rete il gateway ha indirizzo 192.168.0.1 mentre gli host hanno indirizzi che vanno da 192.168.0.2 a 192.168.0.11.

Ipotizziamo che l’host con indirizzo 192.168.0.2 voglia comunicare con un web server raggiungibile all’indirizzo IP pubblico 220.220.220.220 sulla porta 80, ad esempio per richiedere una pagina web al Web Server.

L’host della nostra rete, ad esempio, sta usando la porta interna 25.000, e trasmette al gateway la richiesta di instaurare una connessione sulla porta 80 con il server di indirizzo 220.220.220.220 (ricordiamo che l’host, trovandosi sulla stessa rete del gateway, potrà inviare la sua richiesta direttamente senza ulteriori complicazioni). Avremo quindi che il nostro router è indirizzabile direttamente dagli host della sua rete all’indirizzo 192.168.0.1, e comunica con il mondo esterno tramite l’indirizzo 200.100.100.100.

Il router riceverà quindi le seguenti informazioni: l’host di indirizzo 192.168.0.2 vuole stabilire una connessione sulla sua porta 25.000 con la porta 80 del server remoto di indirizzo 220.220.220.220.

Per soddisfare questa richiesta, il router, nel pacchetto IP da inviare all’esterno, sostituisce l’IP privato dell’host con il proprio IP pubblico (ovvero sostituirà 192.168.0.2 con 200.100.100.100) e la porta 25.000 con una propria porta in quel momento libero, mettiamo sia la 30.000. Ecco all’opera la traslazione degli indirizzi di tipo 1 a N.

Le informazioni relative a questa operazione verranno memorizzate in una tabella simile a questa:

IP privato dell’HostPorta dell’hostIP pubblico del routerPorta pubblica del router
192.168.0.225.000200.100.100.10035.000

Una volta inviata al web server la richiesta, questo vedrà come mittente il nostro router con le sue informazioni (indirizzo IP pubblico e porta) e risponderà alla richiesta inviando la pagina web desiderata. La risposta raggiunge quindi il router, all’indirizzo IP pubblico 200.100.100.100 e sulla porta 35.000, il quale riceverà quindi una risposta dal server di indirizzo remoto 220.220.220.220 tramite la porta 80. In base ai dati contenuti nella sua tabella di NAT, il router sa che tale richiesta andrà inoltrata alla porta 25.000 dell’host di indirizzo 192.168.0.2, che vedrà quindi soddisfatta la propria richiesta.

Destination NAT

La tecnica del Destination NAT si usa nel caso inverso, ovvero nel caso 2, cioè quando si vuole rendere raggiungibile dall’esterno un host che ha un indirizzo IP privato all’interno di una LAN. Con il Destination NAT si utilizza una porta pubblica del gateway e la si mappa permanentemente verso un indirizzo IP di rete, tramite delle funzioni normalmente disponibili nei router o nei firewall. La regola sarà quindi memorizzata in maniera permanente e non temporanea, come nella tabella NAT/PAT. Analogamente a quanto visto prima, ogni volta che dall’esterno arriva un pacchetto su quella determinata porta, il gateway, che ha la regola memorizzata, provvederà ad inoltrare il pacchetto verso l’indirizzo IP interno associato. Si parla in questo caso di port forwarding.

Figura 22: Network Address Translation
Figura 22: Network Address Translation