Network address translation: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Funzionalità collegamenti suggeriti: 2 collegamenti inseriti.
 
(224 versioni intermedie di oltre 100 utenti non mostrate)
Riga 1:
Nel campo delle [[rete telematica|reti telematiche]], il '''network address translation''' o '''NAT''', ovvero ''traduzione degli indirizzi di rete'', conosciuto anche come '''network masquerading''', è una tecnica che consiste nel modificare gli indirizzi [[Internetindirizzi Protocol|IP]] contenuti negli header dei [[Pacchetto (reti)|pacchetti]] in transito su un sistema che agisce da [[router]] all'interno di una comunicazione tra due o più [[host]].
La modifica automatica degli indirizzi può essere impiegata per realizzare un sistema che permette a più computer di utilizzare un unico indirizzo pubblico per effettuare la connessione ad [[Internet]].
 
Sono molto note anche alcune tipologie specifiche di NAT, come l{{'}}IP masquerading e il [[port forwarding]].
Si può distinguere tra '''source NAT''' (SNAT) e '''destination NAT''' (DNAT), a seconda che vengano modificati gli indirizzi della sorgente o gli indirizzi della destinazione dei pacchetti. Il NAT è spesso implementato dai [[router]] e dai [[firewall]].
 
==IP masqueradingDescrizione ==
=== Tipi di NAT ===
[[Immagine:Ipmasquerading.png|thumb|300px|Un esempio di comunicazione mascherata.]]
 
Il NAT è spesso implementato dai [[router]] e dai [[firewall]].
Il ''source NAT'' può essere utilizzato per realizzare una comunicazione tra due host, in cui uno dei due host utilizza l'indirizzo IP di un terzo host, che quindi funge da [[router]], attraverso il quale si realizza un canale di comunicazione.
 
Si può distinguere tra ''source NAT'' (SNAT) e ''destination NAT'' (DNAT), a seconda che venga modificato l'indirizzo sorgente o l'indirizzo destinazione del ''pacchetto che inizia una nuova [[connessione (informatica)|connessione]]''.
Ad esempio in una connessione tra due host A e B, A invia i dati con il proprio indirizzo sorgente a un terzo host, R, il quale modifica l'indirizzo sorgente inserendo il proprio indirizzo e spedisce i dati a B. Quando B vuole rispondere ad A, invierà i dati a R, in quanto B ha ricevuto dei dati che avevano come sorgente l'indirizzo di R e ignora completamente l'esistenza di A. R riconosce che i dati sono in realtà destinati ad A, quindi impostata l'indirizzo di A come destinazione e inoltra il pacchetto.
 
I pacchetti che viaggiano in senso opposto verranno modificati in modo corrispondente, in modo da dare ad almeno uno dei due [[computer]] che stanno comunicando l'illusione di parlare con un indirizzo IP diverso da quello effettivamente utilizzato dalla controparte.
Se al posto di A abbiamo una rete locale e al posto di B la rete pubblica Internet, è facile comprendere come sia possibile connettere gli host di una rete privata ad Internet usando un solo indirizzo pubblico, nell'esempio di sopra quest'unico indirizzo pubblico sarà l'indirizzo di R. Questa tecnica è definita '''IP masquerading''', ovvero mascheramento dell'IP.
Per permettere a un router di smistare il traffico dei dati correttamente, si
utilizza la tecnica denominata ''Port translation'' o ''IP Overloading'', che consiste nell'associare a ciascuna connessione proveniente dalla rete interna una [[porta (reti)|porta TCP]] dell'indirizzo pubblico.
 
Per implementare il NAT, un router ha quindi bisogno di effettuare il [[tracciamento delle connessioni]], ovvero di tenere traccia di tutte le connessioni che lo attraversano. Per "connessione" in questo contesto si intende un flusso bidirezionale di pacchetti tra due host, identificati da particolari caratteristiche a livelli superiori a quello di [[livello di rete|rete]] ([[Internet Protocol|IP]]):
Questa tecnica viene ampiamente usata per risparmiare indirizzi IP pubblici e per "nascondere" dall'esterno una rete privata.
* nel caso di [[Transmission Control Protocol|TCP]] è una connessione TCP in senso proprio, caratterizzata da una coppia di [[Porta (reti)|porte]].
* nel caso di [[User Datagram Protocol|UDP]], per quanto UDP sia un [[livello di trasporto|protocollo di trasporto]] [[comunicazione senza connessione|senza connessione]], viene considerata connessione uno scambio di pacchetti UDP tra due [[host]] che usino la stessa coppia di numeri di porta.
* altri protocolli vengono gestiti in modo analogo, usando caratteristiche del pacchetto a livelli superiori ad IP per identificare i pacchetti che appartengono ad una stessa connessione.
 
===Double Source NAT= ==
Nel source NAT, le connessioni effettuate da uno o più computer vengono alterate in modo da presentare verso l'esterno uno o più indirizzi IP diversi da quelli originali. Quindi chi riceve le connessioni le vede provenire da un indirizzo diverso da quello utilizzato da chi effettivamente le genera.
Talvolta è necessario far comunicare tra loro due LAN connesse ad Internet tramite IP Masquerading (ad esempio, due sedi di una stessa azienda). In questi casi viene generalmente utilizzata una [[VPN]] (Virtual Private Network) tra i due [[router]] che connettono le reti ad Internet, indirizzando sulla VPN il traffico tra le due LAN.
 
=== Motivazioni ===
In alcuni casi però capita che le LAN utilizzino gli stessi range di indirizzi IP, quindi non è possibile collegarle direttamente, ma sarebbe necessario '''rinumerare''' una delle due reti, ovvero riassegnare indirizzi IP in una diversa sottorete a tutti gli host.
Storicamente il NAT si è affermato come mezzo per ovviare alla scarsità di indirizzi [[indirizzo IP pubblico|IP pubblici]] disponibili, soprattutto in quei paesi che, a differenza degli [[USA]], hanno meno [[indirizzi IP|spazio di indirizzamento IP]] allocato pro-capite.
* Considerato che spesso gli indirizzi IP pubblici statici hanno un prezzo, per molti utenti Internet questo costo di indirizzi IP extra non sarebbe stato compensato dai benefici che avrebbero potuto ricavare. Viene quindi utilizzato un IP pubblico dinamico gestito dall'ISP ([[Internet Service Provider]]).
* Le tecniche utilizzate per risparmiare indirizzi IP pubblici rendono i dispositivi non direttamente raggiungibili da internet, per cui spesso questa configurazione viene scelta per ragioni di [[sicurezza informatica|sicurezza]], anche se il NAT non è stato pensato per funzionare come sistema di protezione, per cui rimane sempre meno efficace rispetto ad un [[firewall]].<ref>{{cita web|url=http://otacon22.com/2013/01/15/network-address-translation-an-abomination-and-horror/|titolo=Network Address Translation: an abomination and horror|accesso=11/02/2014|lingua=en}}</ref>
 
=== IP masquerading o PAT (Port Address Translation) ===
 
Viene detto '''IP masquerading''' (a volte '''NAT dinamico''') un caso particolare di source NAT, in cui le connessioni generate da un insieme di computer vengono "presentate" verso l'esterno con un solo indirizzo IP. La tecnica è detta anche ''Port Address translation'' ([[Port Address Translation|PAT]]), ''IP Overloading'' o NAPT (Network Address and Port Translation), in quanto vengono modificati non solo gli indirizzi IP ma anche le [[Porta (reti)|porte]] [[Transmission Control Protocol|TCP]] e [[User Datagram Protocol|UDP]] delle connessioni in transito. Tale tecnica viene codificata nella [https://www.rfc-editor.org/rfc/rfc2663.txt RFC2663], col nome di "Network Address Port Translation (NAPT)".
 
I Network Address and Port Translation sono quindi Network Address Translation ai quali viene aggiunta la funzione di tradurre anche le porte e, quindi, dare una diversa e dinamica mappatura delle porte rispetto a quella vista dall'esterno. Quando un software chiede l'uso di una determinata porta, che risulta chiusa, il NAPT entra in funzione, traducendola e reindirizzandola su una seconda porta aperta.
Con questa mappatura ci si riserva la possibilità di utilizzare un software anche da remoto ma senza aprire porte che potrebbero essere soggette ad eventuali attacchi di virus o aggressori.
 
Questo metodo prevede di individuare una rete "interna" (che tipicamente utilizza indirizzi IP privati) ed una "esterna" (che tipicamente utilizza indirizzi IP pubblici), e permette di gestire solo connessioni che siano originate da host della rete "interna".
 
Ciascuna connessione TCP o UDP viene gestita individualmente: quando la connessione viene iniziata, la porta sorgente originale può essere modificata, e il router NAT mantiene una tabella di corrispondenze tra porte sull'indirizzo esterno e corrispondenti porte e indirizzi IP privati. Quando riceve un pacchetto TCP o UDP sull'indirizzo IP esterno, consulta la tabella per sapere a quale host interno e su quale porta inviarlo. Il router NAT deve quindi tenere traccia di tutte le connessioni TCP e UDP attive tra la rete interna e quella esterna (e preoccuparsi di eliminare le voci inutilizzate da questa tabella mediante un meccanismo di scadenza). Alcune implementazioni modificano sistematicamente le porte sorgente di tutte le connessioni, utilizzando tipicamente numeri di porte molto alti (tipicamente sopra 61000), altre tendono a mantenere i numeri di porta originali, e li modificano solo se un numero di porta sorgente è utilizzato da due host contemporaneamente.
 
[[File:Ipmasquerading.png|thumb|upright=1.4|Un esempio di comunicazione mascherata.]]
 
Questa tecnica è spesso usata per collegare le [[Intranet]] (reti private sviluppate sul modello di Internet) ad [[Internet]], permettendo di mantenere un piano di indirizzamento IP che non permetterebbe la connessione diretta ad internet, di risparmiare indirizzi IP pubblici e di "nascondere" all'esterno una rete privata. In una intranet, gli host utilizzano normalmente [[Indirizzo IP privato|indirizzi IP privati]], e necessitano di un dispositivo che possa effettuare la traduzione da indirizzo IP privato (valido nella sola Intranet) ad [[indirizzo IP pubblico]] (quindi utilizzabile in Internet): questo dispositivo può essere un host multicollegato che effettui relaying a livello 3 oppure un tipico router.
 
Alcuni host possono, però, avere la necessità di utilizzare un proprio ben determinato indirizzo pubblico in uscita pur conservando il proprio indirizzo privato. In questo caso tramite il '''NAT statico''' si può fare una mappatura 1:1 in cui è garantito il mascheramento ma l'unicità dell'host in uscita permette di tradurre solamente l'indirizzo IP sorgente lasciando inalterata la porta TCP/UDP (questa tecnica è chiamata NAT 444).
 
== Destination NAT ==
Nel destination NAT, le connessioni effettuate da uno o più computer vengono alterate in modo da venire redirette verso indirizzi IP diversi da quelli originali. Quindi chi effettua le connessioni si collega in realtà ad un indirizzo diverso da quello che seleziona.
 
=== Possibili usi del ''destination NAT'' ===
* Port forwarding: in una configurazione di ''masquerading'', può essere necessario che alcuni host o servizi di rete ospitati sulla rete "mascherata" siano accessibili dall'esterno. Per ottenere questo, viene utilizzata una configurazione detta [[Port forwarding]], per cui le connessioni verso una determinata porta TCP o UDP dell'indirizzo esterno vengono redirette verso un particolare host della rete interna.
* [[Bilanciamento del carico]] di lavoro: tramite il ''destination NAT'' si può realizzare un sistema in cui una connessione destinata ad un indirizzo IP viene reindirizzata a un altro indirizzo scelto tra quelli di un insieme di [[server]] che si hanno a disposizione. Questo permette di distribuire il carico di lavoro tra diversi server, migliorando così le prestazioni del servizio di rete offerto dal sistema.
* Gestione dei fallimenti: il ''destination NAT'' può essere usato per realizzare un sistema ad alta disponibilità. Un sistema di questo tipo deve essere sempre in grado di offrire il servizio di cui è responsabile. Tutti i server sono soggetti a possibili fallimenti. Se si fa uso di un router con ''destination NAT'', il router può rilevare il fallimento del server principale e reindirizzare le connessioni a un server secondario, mantenendo così il servizio attivo.
* Trasparenza del servizio di [[proxy]]: il ''destination NAT'' può reindirizzare le connessioni (ad esempio [[Hypertext Transfer Protocol|HTTP]]) a un server speciale, chiamato ''proxy'', che ha a disposizione una memoria temporanea in cui memorizza il contenuto di siti web visitati in precedenza. Se la connessione richiesta da un [[client]] è verso un indirizzo di cui il proxy ha già a disposizione il contenuto, esso invierà al client i dati richiesti senza la necessità di effettuare una vera connessione a Internet. Questa tecnica è usata dagli [[Internet Service Provider]] per ridurre l'uso della [[Banda (informatica)|banda di trasmissione]] senza richiedere ai client di configurare il loro [[browser]] per il supporto del proxy, anche se ci sono delle controindicazioni.
 
== Double NAT ==
Talvolta è necessario far comunicare tra loro due [[LAN]], entrambe connesse ad Internet tramite ''IP masquerading'' (ad esempio, due sedi di una stessa azienda). In questi casi viene generalmente utilizzata una VPN ([[Virtual Private Network]]) tra i due [[router]] che connettono le reti ad Internet, indirizzando sulla VPN il traffico tra le due LAN.
 
In alcuni casi però capita che le LAN utilizzino gli stessi range di indirizzi IP, quindi non è possibile collegarle direttamente, ma sarebbe necessario ''rinumerare'' una delle due reti, ovvero riassegnare indirizzi IP in una diversa sottorete a tutti gli host.
Questa operazione è normalmente faticosa, comporta disservizi e spese, per cui spesso si preferisce ricorrere a configurazioni di "double NAT", che nascondono reciprocamente le due reti, permettendo loro di comunicare come se non usassero indirizzi IP sovrapposti.
 
Le configurazioni di double NAT possono essere descritte come combinazioni di Source e Destination NAT.
==Possibili usi del ''destination NAT''==
 
*Bilanciamento del carico di lavoro: tramite il ''destination NAT'' si può realizzare un sistema in cui quando una connessione è destinata a un server essa in realtà viene reindirizzata a un'altro server scelto a caso tra un insieme di server che si hanno a disposizione. Questo permette di distribuire il carico di lavoro tra diversi server, migliorando così le prestazioni del servizio di rete offerto dal sistema.
== Problematiche ==
*Gestione dei fallimenti: il ''destination NAT'' può essere usato per realizzare un sistema ad alta disponibilità. Un sistema di questo tipo deve essere sempre in grado di offrire il servizio di cui è responsabile. Tutti i server sono soggetti a possibili fallimenti. Se si fa uso di un router con ''destination NAT'', il router può rilevare il fallimento del server principale e reindirizzare le connessioni a un server secondario, mantendo così il servizio attivo.
Il NAT non è ben visto dai puristi delle reti, in quanto mina profondamente la semplicità di [[Internet Protocol|IP]], e in particolare viola il principio della comunicazione "da qualsiasi host a qualsiasi host" (''any to any''). Questa critica "filosofica" si ripercuote in conseguenze pratiche:
*Trasparenza del servizio di [[proxy]]: il ''destination NAT'' può reindirizzare le connessioni [[HTTP]] a un server speciale, chiamato ''proxy'', che ha a disposizione una memoria temporanea in cui memorizza il contenuto di siti web visitati in precedenza. Se la connessione richiesta da un client è verso un indirizzo di cui il proxy ha già a disposizione il contenuto, esso invierà al client i dati richiesta senza la necessità di effettuare una vera connessione a Internet. Questa tecnica è usata dagli [[Internet Service Provider]] per ridurre l'uso della [[Banda (informatica)|banda di trasmissione]] senza richiedere ai client di configurare il loro [[browser]] per il supporto del proxy.
 
* L'[[instradamento]] dei pacchetti viene a dipendere non solo dall'indirizzo IP destinazione, ma anche da caratteristiche di [[Modello OSI#Livello 4: trasporto (Transport Layer)|livello di trasporto]].
* Le configurazioni NAT possono diventare molto complesse e di difficile comprensione.
* Il dispositivo che effettua il NAT deve dedicare una sua porta per ogni connessione attiva tra i pc interni e l'esterno, limitando notevolmente il numero di porte totali utilizzabili.
* L'apparato che effettua il NAT ha bisogno di mantenere in memoria lo stato delle connessioni attive in ciascun momento. Questo a sua volta viola un principio insito nella progettazione di IP, per cui i router non devono mantenere uno stato relativo al traffico che li attraversa.
** Possono essere necessarie grandi quantità di memoria sul router
** I protocolli di alta disponibilità del router, come [[Hot Standby Router Protocol|HSRP]], diventano molto più complessi da realizzare, perché è necessario che il router di [[backup]] mantenga sempre aggiornata una copia della tabella NAT del principale.
* Alcune applicazioni inseriscono nel dato utile (ovvero il frame meno l'intestazione ed il [[checksum]], ''payload'') informazioni relative al livello IP o TCP/UDP. Questo rende difficile attraversare un NAT, ed è necessario che il dispositivo NAT analizzi il traffico di controllo riscrivendo queste informazioni.
 
== Note ==
<references/>
 
== Voci correlate ==
* [[Port forwarding]]: un tipo particolare di DNAT.
* [[Port Address Translation]]
*[[Netfilter/iptables|iptables]]: un programma per realizzate il NAT sui sistemi [[Linux]].
* [[Netfilter]] con [[iptables]]/[[nftables]]: programma per configurare il NAT sui sistemi [[Linux]].
* [[STUN]]: acronimo di Simple Traversal of User Datagram Protocol (UDP) Through Network Address Translators (NATs).
* [[NAPT]]
* [[Attraversamento NAT|NAT traversal]]
* [[Stub network]]
 
== Altri progetti ==
==Collegamenti esterni==
{{interprogetto|preposizione=sul}}
* [http://www.netfilter.org/documentation/HOWTO/it/NAT-HOWTO.html Linux 2.4 NAT HOWTO]
*{{en}} [http://www.cisco.com/pcgi-bin/Support/browse/psp_view.pl?p=Technologies:NAT NAT (Network Address Translation) - documentazione Cisco ]
* [http://www.ebruni.it/docs/lf/ Documento in italiano che spiega il significato e gli utilizzi del SNAT/DNAT]
 
== Collegamenti esterni ==
[[Categoria:Reti telematiche]]
* {{FOLDOC}}
* {{cita web|https://www.netfilter.org/documentation/HOWTO/it/NAT-HOWTO.html|Linux 2.4 NAT HOWTO}}
* {{cita web|http://www.ciscozine.com/2013/02/16/nat-and-pat-a-complete-explanation/|Documento che spiega la configurazione del NAT/PAT su apparati Cisco}}
* {{cita web|https://www.cisco.com/en/US/tech/tk648/tk361/tk438/tsd_technology_support_sub-protocol_home.html|NAT (Network Address Translation) - documentazione Cisco|lingua=en}}
* {{cita web|http://www.ebruni.it/docs/lf/|Documento in italiano che spiega il significato e gli utilizzi del SNAT/DNAT}}
{{portale|informatica|telematica}}
 
[[Categoria:Servizi di rete]]
[[cs:Network address translation]]
[[da:Network Address Translation]]
[[de:Network Address Translation]]
[[en:Network address translation]]
[[es:Traducción de dirección de red]]
[[fi:Osoitteenmuunnos]]
[[fr:Network address translation]]
[[he:Network Address Translation]]
[[ja:IPマスカレード]]
[[nl:Network address translation]]
[[no:Network Address Translation]]
[[pl:NAT]]
[[pt:NAT]]
[[ru:NAT]]
[[sv:Network Address Translation]]
[[tr:NAT]]
[[zh:网络地址转换]]