Vorrei sapere che cosa è e come funziona un server NAT. Grazie.

Il termine NAT (Network Address Translation)
indica non tanto un tipo di server, ma un servizio svolto da un router.

Il “router” è un dispositivo di rete necessario per
interconnettere due reti locali (LAN) fra loro; l’insieme delle LAN
interconnesse costituisce la
rete Internet. In particolare il router ha lo scopo
di instradare i messaggi IP in modo che possano giungere a
destinazione (si vedano anche le risposte relative alle
apparecchiature di rete
ed al protocollo
TCP/IP
).

Nei casi più semplici una LAN ha una sola via di interconnessione con
il resto di Internet, costituita da un router che ha un’interfaccia
verso la LAN ed una verso un provider.
In questo caso la funzione del
router è abbastanza semplice: tutti i messaggi che non sono
indirizzati ad un nodo interno della LAN (che si riconoscono dalla prima parte
dell’indirizzo) vengono inviati al router che, semplicemente, li manda
al router corrispondente, il quale a sua volta dovrà decidere il passo
successivo verso la destinazione finale.

Per
comprendere la funzione NAT occorre aggiungere un ulteriore
precisazione:
ogni messaggio TCP/IP è caratterizzato da un specifica di provenienza
ed una specifica di destinazione. Ciascuna di queste è composta da due
parti:
l’indirizzo IP che identifica il nodo di rete (solitamente
rappresentato
mediante quattro cifre decimali comprese fra 0 e 255, ad esempio:
195.204.33.12) ed il port, che identifica, all’interno del particolare
nodo di rete, quale programma riceve effettivamente il messaggio.

Nel funzionamento base della rete Internet,
ciascun nodo viene univocamente identificato mediante il suo numero
IP1,
che deve essere assegnato da un’apposita autorità e che non può
essere contempraneamente usato da alcun altro nodo in nessun punto della rete.

Con l’enorme sviluppo dell’uso della rete Internet degli ultimi 15 anni si
è presto presentato il problema della limitatezza degli indirizzi IP.
I possibili indirizzi diversi rappresentabili sono infatti meno di 4 miliardi
e tenuto conto che per le LAN devono essere assegnati blocchi
di indirizzi con numero di nodi che sono potenze di 2, ne
sono
effettivamente disponibili assai di meno. In attesa che si diffonda la versione
aggiornata dei protocolli di rete (la IPV6 o Internet 2) occorreva trovare un
modo per utilizzare meglio gli indirizzi disponibili.
A questo scopo sono state introdotte le funzioni NAT dei router.

La funzione NAT consiste nel “mascherare” dietro un unico indirizzo IP
un’intera LAN.
Il meccanismo di funzionamento è
piuttosto
semplice: a tutti i nodi della LAN vengono assegnati numeri in modo
arbitrario, quindi anche utilizzando insiemi di numeri già utilizzati da altre
LAN. All’interno della LAN questi numeri funzionano
perfettamente: i nodi sono in grado di comunicare fra loro usando questi
indirizzi. Il problema nasce quando un nodo interno alla LAN deve
comunicare con l’esterno: il suo indirizzo entrerebbe infatti in conflitto con
qualche altro nodo di rete che usa lo stesso numero. Il router allora effettua
una “traduzione dell’indirizzo”, ovvero cambia la specifica di provenienza
dell’indirizzo assegnando un nuovo numero di port (che non sia già
utilizzato) e cambiando il numero IP nel numero ufficialmente assegnato.

Supponiamo ad esempio, che all’interno della LAN vengano utilizzati numeri del tipo
10.0.0.x (con x fra 1 e 254) e che la stessa LAN sia stata autorizzata ad
usare un indirizzo IP “ufficiale”: 177.43.22.121.

Quando il nodo 10.0.0.7 deve comunicare con l’esterno (ad esempio con il nodo
193.206.214.6) il messaggio da trasmettere avrà la forma seguente:

Provenienza   Destinazione      Dati
10.0.0.7:54 193.206.214.6:80 ...............

si noti il numero dopo il segno “:” che rappresenta il port (ovvero
l’identificatore del
programma che deve entrare in comunicazione con il programma corrispondente
sul nodo remoto).

Poiché la destinazione è esterna alla LAN il messaggio viene
inviato al router.
Il router, prima di inviare il messaggio, applica la funzione NAT cambiando
l’indirizzo di provenienza in modo
che il messaggio uscente risulta:

Provenienza          Destinazione     Dati
177.43.22.121:2077 193.206.214.6:80 ...............

Il nuovo numero di port (2077) viene scelto a caso ed in modo che sia
univoco2.
Contemporaneamente il router registra in una sua tabella interna
un’associazione fra il port 2077
e la specifica di provenienza originale del messaggio (cioè:
10.0.0.7:54) che servirà quando il nodo di destinazione finale
risponderà.

Il nodo destinatario per rispondere al messaggio ricevuto scambia
fra loro i campi di provenineza e di destinazione,
quindi il messaggio di risposta risulta:

Provenienza       Destinazione         Dati
193.206.214.6:80 177.43.22.121:2077 ...............

Il messaggio quindi viene instradato verso la destinazione e raggiunge il
router che, tramite la tabella interna, può sostituire l’indirizzo di
destinazione con quello corretto all’interno della LAN:

Provenienza       Destinazione    Dati
193.206.214.6:80 10.0.0.7:54 ...............

Come si può comprendere la funzione NAT del router rende completamente
trasparente ai due nodi finali della comunicazione il fatto che all’interno
della LAN vengono utilizzati numeri del tipo 10.0.0.x che quindi possono essere
utilizzati all’interno di altre LAN senza alcuna interferenza.
Per quanto riguarda tutta la rete esterna alla LAN tutti i messaggi
sembrano provenire dallo stesso nodo di rete, l’unico con indirizzo
ufficialmente assegnato

L’uso di questa tecnica comporta alcuni problemi:

  • Se gli stessi numeri
    usati all’interno della LAN sono assegnati in modo standard ad altri nodi di rete
    questi particolari numeri non possono essere raggiunti dai nodi della nostra
    LAN, perché vengono considerati nodi interni.
    Per questo motivo le autorità di assegnazione hanno
    concordato di riservare alcuni insiemi di numeri per supportare le funzioni
    NAT3

  • Poiché per l’accesso ad un servizio offerto da uno
    specifico nodo di rete (ad esempio per accedere al sito Web di un provider)
    occorre conoscere sia il numero IP del sito che il port assegnato al
    particolare servizio4, una rete “mascherata”
    tramite NAT non è adatta a contenere server che debbano essere
    utilizzabili dall’esterno. In altre parole, i nodi che devono
    fungere da server non possono avere la specifica di destinazione (Indirizzo
    IP e port) generata dinamicamente dal servizio NAT, ma devono averla fissa. Per risolvere
    questo problema è necessario che alla LAN vengano assegnati
    almeno due indirizzi in modo ufficiale: uno può essere usato
    come indirizzo visibile dall’esterno per un server5, l’altro per tutto il
    resto delle attività verso l’esterno. Anche in questo modo, rimane
    il vantaggio che tutti i nodi della LAN che non sono server “occupano”
    un solo indirizzo IP ufficiale.

L’uso di tecniche NAT ha anche però un vantaggio significativo:
dato che di fatto rende possibili solo collegamenti che vengono iniziati
da un nodo interno alla LAN verso l’esterno, e non viceversa (se non nel caso
dei server discusso sopra), i nodi interni della LAN sono automaticamente
protetti da accessi non autorizzati provenienti dall’esterno. Il router
svolge quindi anche, parzialmente, una funzione di tipo “firewall”.



Note

  1. Più precisamente: il numero IP identifica l’interfaccia
    di rete. Nel caso dei router, che hanno due o più interfaccie verso
    la rete, occorre un numero per ogni interfaccia.

  2. Il protocollo TCP/IP prevede 65535 differenti port.

  3. Quindi l’assegnazione del blocco di indirizzi da usare all’interno di
    una LAN con NAT non è arbitraria, ma conviene utilizzare uno dei
    blocchi riservati.

  4. Anche i numeri di port assegnati a particolari servizi sono
    stabiliti a priori. Ad esempio ai server Web viene assegnato
    il numero di port 80.

  5. In questo caso, ovviamente il numero di port non può essere
    assegnato in modo arbitrario e l’indirizzo di destinazione
    all’interno della LAN deve corrispondere al server,
    per cui la funzione NAT consiste nel cambiare
    il solo indirizzo IP usando una associazione statica (cioè decisa una
    volta per tutte).