Il Source NAT modifica nell’intestazione dei pacchetti IP l’indirizzo IP del mittente, facendo credere al destinatario che il pacchetto provenga da un indirizzo IP diverso.
Il caso più comune di SNAT è l’IP masquerading.
L’IP masquerading permette a una rete locale che usa indirizzi privati di collegarsi a Internet tramite l’indirizzo pubblico di un router (che può essere un indirizzo IP assegnato dal provider in modo statico o dinamico tramite il DHCP).
Quando un pacchetto passa dalla rete interna a Internet passa attraverso il router, che mediante il NAT sostituisce l’indirizzo IP interno con l’indirizzo IP pubblico assegnato alla rete.
Il NAT maschera l’indirizzo sorgente della macchina locale; quando arriva la risposta sostituisce l’indirizzo di destinazione con quello locale.
Un pacchetto di risposta contiene come destinazione l’indirizzo del router; il router lo sostituisce con l’indirizzo del computer che aveva iniziato la comunicazione.
Per permettere al router di smistare i dati correttamente si usa la sostituzione delle porte (PAT – Port Address Translation) o IP overloading che consiste nell’associare a ciascuna connessione proveniente dalla rete (IP, porta) una porta relativa all’indirizzo pubblico (0-65.535).
Le assegnazioni vengono cancellate dalla tabella quando non sono più utilizzate.
La tabella di traduzione contiene righe del tipo:
indirizzo sorgente, porta | porta sul dispositivo NAT
Una stazione A della rete locale, con un indirizzo IP privato, comunica con una stazione B su Internet attraverso il router R.
A invia a R i pacchetti con il proprio indirizzo sorgente.
R modifica nei pacchetti l’indirizzo sorgente (privato) col proprio (pubblico), sostituisce anche la porta sorgente con un indice che punta a una voce della propria tabella di traduzioni da 65.536 voci; in questa voce di tabella inserisce l’IP sorgente originale e la porta sorgente originale, poi ricalcola e sostituisce i codici di controllo e invia il pacchetto.
Quando B risponde invia i dati a R.
R riconosce che i dati sono destinati ad A e imposta l’indirizzo di A come destinazione del pacchetto: estrae la porta di destinazione dal pacchetto in arrivo e la usa come indice nella tabella di traduzione; nella voce individuata trova i dati originali, li inserisce nel pacchetto e ricalcola i codici di controllo e può quindi inoltrare correttamente il pacchetto.
Per esempio le richieste di connessione:
192.168.0.1:2050 210.100.100.100:80 192.168.0.2:1093 220.200.200.200:25
verranno trasformate dal NAT/PAT in:
200.1.2.3:1 210.100.100.100:80 200.1.2.3:2 220.200.200.200:25
La tabella conterrà le righe:
192.168.0.1:2050 1 192.168.0.2:1093 2
Una risposta alla prima richiesta del tipo:
210.100.100.100:80 200.1.2.3:1
verrà trasformata dal NAT in:
210.100.100.100:80 192.168.0.1:2050
Tutto il traffico con la rete esterna viene intrattenuto (apparentemente) dal router che si occupa di inoltrare le risposte all’interno della rete locale. Ciò significa che all’esterno appare sempre solo il router; dall’esterno non c’è modo di accedere ai computer della rete locale perché questi non hanno un indirizzo accessibile.