Il NAT (Network Address Translation) è integrato nel router o nel firewall che separa una LAN da una WAN.
NAT opera sostituendo l'indirizzo sorgente quando un pacchetto generato da una stazione della LAN attraversa il router per uscire sulla WAN ed effettua la sostituzione dell'indirizzo destinazione quando il pacchetto ritorna al router per rientrare nella LAN.
Le stazioni della LAN devono possedere un indirizzo privato.
Si consideri un router che si collega alla WAN tramite l'indirizzo pubblico: 137.76.29.7 e abbia su una delle sue linee le stazioni di una sottorete con indirizzi IP privati di classe A,
Indirizzo dell'interfaccia del router lato WAN |
Router | Indirizzi delle stazioni della LAN |
La stazione 1 della LAN genera un pacchetto avente i campi Source address = 10.0.0.1:1165 e Destination address = 128.119.140.186:80
Il pacchetto viene consegnato al router. Qui l'indirizzo privato della stazione sorgente viene sostituito con l'indirizzo dell'interfaccia connessa alla WAN. La porta dell'applicazione in esecuzione sulla stazione sorgente viene sostituita con un numero che rappresenta la riga della tabella di traduzione degli indirizzi dove è contenuta l'associazione tra gli indirizzi entrante e uscente.
Tabella di traduzione (NAT) | ||
Lato WAN | Lato LAN | |
1 | 137.76.29.7:1 | 10.0.0.1:80 |
2 | 137.76.29.7:2 | 10.0.0.1:1165 |
3 | 137.76.29.7:3 | 10.0.0.3:3345 |
Il pacchetto verrà rilasciato dal router sulla linea collegata alla WAN con i campi: Source address = 137.76.29.7:2 (in cui 2 è il numero della riga della tabella) e Destination address = 128.119.140.186:80.
Il pacchetto di risposta, che ritornerà dal destinatario al router, contiene l'intestazione: Source address = 128.119.140.186:80 e Destination address = 137.76.29.7:2.
Il router accede alla tabella di traduzione degli indirizzi, modifica l'indirizzo destinazione prelevandolo dalla riga 2, ed emette il pacchetto sulla LAN, con l'intestazione: Source address = 128.119.140.186:80 e Destination address = 10.0.0.1:1165.
Il protocollo NAT fa apparire una rete come un singolo host. Ad esempio, se la rete LAN contiene molte stazioni, ma il provider ha fornito solo 14 indirizzi IP, con NAT la rete LAN appare dall'esterno come se fosse composta da soli 14 host, mentre, in realtà ve ne possono essere molti di più.
È sufficiente costruire una tabella in cui differenti indirizzi interni sono associati allo stesso indirizzo esterno. Il protocollo traduce ogni indirizzo della rete LAN in un indirizzo della rete WAN, fino ad esaurimento. Esiste un meccanismo di timeout per cui, se una riga della tabella di traduzione non viene utilizzata per un determinato tempo, viene rimossa.
Si riduce il numero di indirizzi IP pubblici richiesti da una organizzazione,
Nasconde gli indirizzi privati, non permettendo quindi di capire la topologia della rete,
Una stazione che si collega alla WAN non lascia traccia del proprio indirizzo IP.
I processi su Internet non sono obbligati a usare TCP o UDP, quindi se le applicazioni inseriscono l'indirizzo nel testo del messaggio, il NAT non può sostituirlo.
Trasforma Internet da una rete senza connessione ad una rete con connessioni perchè NAT conserva l'associazione tra i pacchetti provenienti da un'applicazione e destinati ad un'altra applicazione.
I casi in cui si ricorre al NAT sono:
Una organizzazione ha bisogno di un numero di indirizzi pubblici maggiore di quelli forniti dal provider.
Si devono fondere due reti che usano gli stessi indirizzi privati.
Si desidera nascondere, ai dispositivi della rete pubblica, lo schema di indirizzi privati della rete locale.
Si vuole assegnare lo stesso indirizzo IP a più dispositivi di rete.
La tabella di traduzione degli indirizzi viene inserita manualmente nel dispositivo adibito alla traduzione degli indirizzi. L'associazione degli indirizzi privati con quelli pubblici serve per mettere a disposizione alcune risorse interne agli utenti esterni.
Usato quando gli utenti di una rete locale devono accedere a risorse esterne. Non è importante specificare gli indirizzi pubblici assegnati agli utenti interni, dal momento che i dispositivi esterni devono restituire pachetti di risposta, non devono creare connessioni con gli utenti interni.
Quando un utente nella rete locale trasmette attraverso il dispositivo che esegue il NAT, ad esempio un router, questo legge l'indirizzo IP sorgente e vede se tale indirizzo interno è presente nella lista degli indirizzi da tradurre. Se lo trova, sceglie un indirizzo pubblico a cui associarlo, prelevandolo dalla lista degli indirizzi disponibili. Il router inserisce, quindi, una riga nella tabella di traduzione degli indirizzi, e sostituisce l'indirizzo IP sorgente nel pacchetto, quindi il pacchetto viene instradato nella rete Internet. Se l'indirizzo IP sorgente non è elencato nella lista degli indirizzi da tradurre, il pacchetto viene instradato su Internet nella sua forma originale.
Quando il traffico di risposta ritorna nella rete locale, il dispositivo di traduzione degli indirizzi legge l'indirizzo IP destinazione contenuto nel pacchetto e verifica se è presente nelal tabella di traduzione degli indirizzi. Se lo trova, sostituisce l'indirizzo pubblico, contenuto nell'header del pacchetto, con l'indirizzo privato del destinatario e smista il pacchetto nella rete locale.
Con il PAT, tutti i pacchetti che transitano attraverso il dispositivo di traduzione degli indirizzi recano lo stesso indirizzo pubblico, di conseguenza, per distinguerli si usa il numero di porta assegnato dal livello Trasporto. Se due dispositivi generano pacchetti contenenti lo stesso numero di porta, il router ne cambia uno, allo scopo di assicurare l'univocità.
Il NAT, a differenza del PAT, traduce solo gli indirizzi IP, non i numeri di porta.
In questo esempio il server web, nella sua sottorete, possiede l'indirizzo IP 10.0.0.2. Si desidera che l'indirizzo IP pubblico usato da questo server sia 50.0.0.1. Bisogna configurare il NAT sul router in modo che all'indirizzo IP privato 10.0.0.2 associ l'indirizzo IP pubblico 50.0.0.1.
FastEthernet0/0:
Indirizzo IP: 10.0.0.1
Subnet mask: 255.0.0.0
Port Status: On
Serial 0/0/0:
indirizzo IP: 20.0.0.2
Subnet mask: 255.0.0.0
Port Status: On
Tabella di instradamento:
Network: 30.0.0.0
Mask: 255.0.0.0
Next Hop: 20.0.0.1 - ADD
Aprire la scheda CLI del router:
Router>enable Router#configure terminal Router(config)#hostname R1 R1(config)#ip nat inside source static 10.0.0.2 50.0.0.1 R1(config)#interface fastEthernet 0/0 R1(config-if)#ip nat inside R1(config-if)#exit R1(config)#interface serial 0/0/0 R1(config-if)#ip nat outside R1(config-if)#exit R1(config)#
FastEthernet0/0:
Indirizzo IP: 30.0.0.1
Subnet mask: 255.0.0.0
Port Status: On
Serial 0/0/0:
indirizzo IP: 20.0.0.1
Subnet mask: 255.0.0.0
Clock rate: 64000
Port Status: On
Tabella di instradamento:
Network: 50.0.0.0
Mask: 255.0.0.0
Next Hop: 20.0.0.2 - ADD
Assegnare gli indirizzi indicati in figura e specificare, per ogni stzione, il gateway: 30.0.0.1
Notare che non è stato specificato un instradamento diretto verso la sottorete 10.0.0.0/8. Quindi le stazioni della sottorete 30.0.0.0/8 ignorano la suo posizione. Per verificare la connettività, aprire la scheda Desktop di un PC e fare clic sull'icona "Command prompt". Quindi eseguire il comando: ping 50.0.0.1.
Analogamente, verificare che il server 10.0.0.2 non è raggiungibile: ping 10.0.0.2. Si deve ottenere un esito negativo.
Abilitare il servizio http sul server. Da una qualsiasi stazione della rete 10.0.0.0/8 aorire il browser e collegarsi al server web con l'indirizzo 50.0.0.1, per verificare che avviene la traduzione degl indirizzi.
Per configurare il NAT dinamico, si devono definire due insiemi di indirizzi sui dispositivi che eseguono la traduzione. Un insieme definisce quali sono gli indirizzi della rete locale da tradurre e l'altro insieme elenca i corrispondenti indirizzi pubblici associati.
In questo esempio alla rete locale è satto assegnato l'indirizzo 192.168.0.0/8. Si vogliono usare cinque indirizzi IP pubblici: da 50.0.0.1 a 50.0.0.5. Il Router 0 esegue il NAT
FastEthernet0/0:
Indirizzo IP: 192.168.0.1
Subnet mask: 255.0.0.0
Port Status: On
Serial 0/0/0:
indirizzo IP: 30.0.0.1
Subnet mask: 255.0.0.0
Clock rate: 64000
Port Status: On
Tabella di instradamento:
Network: 0.0.0.0
Mask: 0.0.0.0
Next Hop: 30.0.0.2 - ADD
programmare il router per eseguire il NAT:
Router>enable Router#configure terminal Router(config)#hostname R1 R1(config-if)#exit R1(config)#access-list 1 permit 192.168.0.0 0.0.0.255 R1(config)#ip nat pool test 50.0.0.1 50.0.0.5 netmask 255.0.0.0 R1(config)#ip nat inside source list 1 pool test R1(config)#interface fastEthernet 0/0 R1(config-if)#ip nat inside R1(config-if)#exit R1(config)#interface serial 0/0/0 R1(config-if)#ip nat outside R1(config-if)#exit R1(config)#exit
FastEthernet0/0:
Indirizzo IP: 20.0.0.1
Subnet mask: 255.0.0.0
Port Status: On
Serial 0/0/0:
indirizzo IP: 30.0.0.2
Subnet mask: 255.0.0.0
Clock rate: 64000
Port Status: On
Tabella di instradamento:
Network: 0.0.0.0
Mask: 0.0.0.0
Next Hop: 30.0.0.1 - ADD
Configurare le stazioni assegnando gli indirizzi IP indicati in figura e specificare il router di default: 192.168.0.1
Configurare il server e assegnare il router di default: 20.0.0.1
Per verificare l'operatività del NAT, aprire la scheda di configurazione del Router 0 e, nella scheda CLI, pasasre in modalità exec ed abilitare il debugging del NAT:
Router0#debug ip nat
. Non chiudere questa scheda: servirà per osservare la traduzione degli indirizzi.
Aprire la scheda desktop di uno dei PC della sottorete 192.168.0.0/8 e cliccare sull'icona "Commando promp". Inviare il pacchetto ping al server: ping 20.0.0.2
.L'output sulla scheda CLI del Router 0 è simile al seguente:
IP NAT debugging is on NAT: s=192.168.0.7->50.0.0.1, d=20.0.0.2[1] NAT*: s=20.0.0.2, d=50.0.0.1->192.168.0.7[1] NAT: s=192.168.0.7->50.0.0.1, d=20.0.0.2[1] NAT*: s=20.0.0.2, d=50.0.0.1->192.168.0.7[1] NAT: s=192.168.0.7->50.0.0.1, d=20.0.0.2[1] NAT*: s=20.0.0.2, d=50.0.0.1->192.168.0.7[1] NAT: s=192.168.0.7->50.0.0.1, d=20.0.0.2[1] NAT*: s=20.0.0.2, d=50.0.0.1->192.168.0.7[1]
Si può vedere che ad ogni computer della rete è stato assegnato un indirizzo contenuto nell'intervallo 50.0.0.1 - 50.0.0.5.
Per evitare di sovraccaricare il router con il debug, fino a renderlo inoperativo, disabilitare il debugging:
no debug ip nat.
Nel NAT dinamico la traduzione avviene da un IP ad un altro IP. Quindi sono richiesti tanti indirizzi pubblici quanti sono quelli privati. Se il numero di indirizzi pubblci disponibili è inferiore agli indirizzi privati da tradurre si deve far ricorso al PAT.
Nell'esempio che segue si userà lo stesso schema di rete precedente, ma usando il solo indirizzo IP pubblico 50.0.0.1
Configurare le stazioni specificando, per ognuna, l'indirizzo IP, la subnet mask e il router di default, usando gli indirizzi indicati nella figura.
FastEthernet0/0:
Indirizzo IP: 192.168.0.1
Subnet mask: 255.255.255.0
Port Status: On
Serial 0/0/0:
indirizzo IP: 30.0.0.1
Subnet mask: 255.0.0.0
Clock rate: 64000
Port Status: On
Tabella di instradamento:
Network: 0.0.0.0
Mask: 0.0.0.0
Next Hop: 30.0.0.2 - ADD
Passare alla scheda CLI e programmare il router:
Router(config)#hostname R1 R1(config)#access-list 1 permit 192.168.0.0 0.0.0.255 R1(config)#ip nat pool test 50.0.0.1 50.0.0.1 netmask 255.0.0.0 R1(config)#ip nat inside source list 1 pool test overload R1(config)#interface fastEthernet 0/0 R1(config-if)#ip nat inside R1(config-if)#exit R1(config)#interface serial 0/0/0 R1(config-if)#ip nat outside R1(config-if)#exit R1(config)#
FastEthernet0/0:
Indirizzo IP: 20.0.0.1
Subnet mask: 255.0.0.0
Port Status: On
Serial 0/0/0:
indirizzo IP: 30.0.0.2
Subnet mask: 255.0.0.0
Clock rate: 64000
Port Status: On
Tabella di instradamento:
Network: 0.0.0.0
Mask: 0.0.0.0
Next Hop: 30.0.0.1 - ADD
Da un computer della rete, inviare un ping al server 20.0.0.2
Per verificare il PAT su R1 eseguire il comando:
Router0# show ip nat translations
L'output dovrebbe essere simile a questo:
Pro Inside global Inside local Outside local Outside global icmp 50.0.0.1:1 192.168.0.6:1 20.0.0.2:1 20.0.0.2:1 icmp 50.0.0.1:2 192.168.0.6:2 20.0.0.2:2 20.0.0.2:2 icmp 50.0.0.1:3 192.168.0.6:3 20.0.0.2:3 20.0.0.2:3 icmp 50.0.0.1:4 192.168.0.6:4 20.0.0.2:4 20.0.0.2:4
Si nota che la traduzione viene fatta usando i numeri di porta, anzichè gli indirizzi IP.