venerdì, Novembre 22, 2024

Alla conquista del NAT

theirish81
theirish81
write about it later

Introduzione

Tutti lo usano, ma pochi si sono mai posti domande su cosa faccia veramente, quali siano le sue potenzialità e su come riesca a compiere “il miracolo”. NAT (Network Address Translation) è uno strumento ormai indispensabile nelle reti moderne.
Il suo lavoro è effettuare la traduzione tra un indirizzo IP a un altro, mantenendo un legame logico tra i due. In questi termini, il suo lavoro sembra ancora più oscuro, vediamo quindi di prendere in esame la sua applicazione per eccellenza: il gateway.

What’s This?

Normalmente, in una LAN vengono assegnati indirizzi IP privati, ovvero indirizzi che sono validi e funzionanti nel momento in cui la loro “esposizione” è la LAN stessa e, una volta usciti su Internet, sarebbero considerati non validi. Il gateway in quetione (che può essere un router o una macchina apposita) possiede due interfacce: una LAN, con indirizzo IP privato, e una WAN (collegata al provider), con indirizzo IP pubblico.

Nel setup descritto, il gateway, unico detentore di un IP pubblico, dovrà permettere ai client di inviare e ricevere dati da Internet, traducendo gli indirizzi privati della LAN, nell’unico IP pubblico a disposizione e facendo in seguito il lavoro contrario, consegnando i dati al corretto destinatario.

L’uso più comune è, appunto, dare connettività internet ad una rete. Tipicamente, il gateway dovrà permettere ai client di inviare richieste verso Internet e consegnare loro i dati che desideravano.

Per fare ciò, viene utilizzata una tecnologia nota come dynamic NAT (per intenderci, sulle piattaforme Cisco è un’istruzione di NAT che si conclude con overload).

Prima però di spiegare come realmente effettua la traduzione, è necessaria una premessa tecnologica.
Eccezion fatta per le applicazioni che non richiedono affidabilità, TCP è il protocollo normalmente usato nelle comunicazioni. All’interno della trama TCP c’è un campo detto numero di sequenza. Questo numero viene generato casualmente da chi comincia una comunicazione. Quando la trama raggiunge il destinatario, questi elabora la risposta e vi inserisce il numero di sequenza ricevuto+1. Ad ogni “rimbalzo” il numero di sequenza aumenta di 1.

E’ proprio questo numero di sequenza che permette al NAT dinamico di funzionare a dovere.
Quando un client vuole comunicare con, per esempio, un webserver, crea una trama TCP che contiene la richiesta. Al suo interno, viene inserito un numero di sessione.

I dati raggiungono il gateway che deve effettuare la traduzione. Prima di operare, prende le informazioni salienti, quali IP di origine, IP di destinazione, porta di origine e destinazione e numero di sequenza, li salva in una tabella, quindi sostituisce l’IP di origine (privato) con l’unico IP pubblico a disposizione e invia la trama.
Questa raggiunge il webserver che risponde (per semplificare, la risposta sarà di una sola trama) con una trama composta dal suo IP pubblico, l’IP pubblico di destinazione (il nostro IP pubblico), i dati e il numero di sequenza incrementato di 1.

Quando questa trama raggiunge il nostro gateway, questi riconosce che il mittente, il numero di sequenza (+1) e le porte corrispondono ad una entry nella sua tabella. Il riconoscimento gli permette quindi di sapere chi è il client destinatario, ovvero il richiedente del dato.
Cosa succede se dei dati vengono deliberatamente inviati dall’esterno al nostro gateway? Beh, non ci saranno riscontri nella tabella e quindi verranno scartati.
Vi sarete a questo punto domandati cosa bisogna fare per permettere ad un ideale Web Server di essere accessibile dall’esterno. Con le informazioni che abbiamo adesso, se un client esterno alla LAN decidesse di comunicare con un Web Server all’interno della stessa LAN, le sue richieste verrebbero cestinate dal gateway, non essendoci un riscontro nelle tabelle.
In nostro soccorso viene un’altra forma di NAT, detta NAT statico. Il suo funzionamento è decisamente più semplice e le risorse impiegate sono molto più esegue.

Il suo scopo è “mappare” una specifica porta con uno specifico indirizzo IP. Tornando al nostro setup ideale, supponiamo di voler mettere un Web Server all’interno della LAN e desiderare che sia accessibile dall’esterno. Ciò significa che, se mappiamo con una istruzione di NAT statico la porta 80 sull’interfaccia WAN, con l’IP privato del Web Server, faremo sì che chiunque dall’esterno ci invii dati TCP alla porta 80, parli direttamente con il Web Server.

Limitazioni

Tutto sembra bello e iridiato. Bisogna, però, tenere in considerazione vari elementi. Noterete come fin dall’inizio, parlando di NAT dinamico, io abbia preso in considerazione TCP, ma UDP? ICMP? Il NAT, nella sua implementazione tecnologicamente pertinente, non è in grado di trattarli in quanto privi di connessione. Solo i protocolli orientati alla connessione sono NATtabili dinamicamente. Spesso alcuni router mettono in atto dei procedimenti “simili” al NAT per quanto riguarda i domain-lookup e alcuni ICMP, ma è necessario tenere a mente che in realtà si tratta di manipolazioni di layer superiori all’OSI/4.

Falsi storici

Il più diffuso, noioso e assolutamente pericoloso è considerare il NAT uno strumento di sicurezza.
NO, il NAT non è uno strumento di sicurezza. A tal proposito leggetevi anche NAT_is_not_a_security_feature.
E’ ovvio che nel caso del NAT statico, la sicurezza venga completamente lasciata nelle mani della macchina ricevente.
Il NAT dinamico invece maschera le macchine interne, ma nella storia del networking si sono inventati decine di modi per aggirarlo, imbrogliarlo, confonderlo… e altri ne verranno inventati.
Fate quindi attenzione, il NAT serve solo a tradurre indirizzi.

Articoli correlati

Noleggia una Tesla per il tuo evento ICT!

Categorie