Network Address Translation - NAT
Descrizione dei vari NAT e loro configurazione
I creatori dell'IPv4 non credevano che Internet si sarebbe espanso così tanto e 4.3 miliardi di indirizzi sembravano essere sufficienti.
Le autorità di Internet cominciarono a predire la fine degli indirizzi allocabili alla fine degli anni '80, quindi venne creato IPv6 come soluzione a lungo termine.
Tuttavia la migrazione da IPv4 a IPv6 non è liscia: viene quindi usato il NAT come metodo temporaneo fino a che non si ha il passaggio completo ad IPv6.
Un'organizzazione può usare gli indirizzi IP privati nella loro rete interna, ma garantire accessibilità ad Internet ai suoi host interni utilizzando i loro indirizzi IP pubblici.
Molti host all'interno dell'organizzazione possono condividere uno o pochi indirizzi IP pubblici.


Dall'immagine possiamo vedere che nonostante i due uffici abbiano la stessa sottorete, non ci sono conflitti in quanto quegli indirizzi sono privati e quindi non raggiungibili da Internet.
Molti esperti di settore predissero che entro i primi anni del 2000 IPv6 sarebbe stato adottato da tutti, ma non è andata così: molte organizzazioni oggi usano ancora RFC 1918 (IPv4) con NAT.
L'RFC 1918 ha il benefit di nascondere gli host interni di default (non avendo un indirizzo IP instradabile su Internet).
NAT Statico
Il NAT statico usa un mapping permanente 1:1 di solito tra un indirizzo IP pubblico ed uno privato. Viene usato per i server che devono ricevere connessioni in entrata.


In questo esempio di NAT statico abbiamo comprato il range di indirizzi pubblici 203.0.113.0/28 dal nostro ISP.
203.0.113.2 viene usato sull'interfaccia esterna del nostro Internet edge router R1.
203.0.113.1 viene usato come l'indirizzo del default gateway che è il router SP1 dall'altra parte del collegamento.
Il range da 203.0.113.3 a 203.0.113.14 rimane disponibile.
Int-S1 che si trova a 10.0.1.10 è un server web interno che deve accettare connessioni in entrata da Internet.
Abbiamo bisogno di assegnare un indirizzo IP pubblico statico per accettare connessioni e scegliamo il primo disponibile: 203.0.113.3.
E' necessaria una traduzione NAT per poter risolvere l'indirizzo pubblico 203.0.113.3 su F0/0 in 10.0.1.10 su F1/0 per le connessioni in entrata. Questa traduzione è bilaterale.
Configurazione:
R1(config)#int f0/0
R1(config-if)#ip nat outside
R1(config)#int f1/0
R1(config-if)#ip nat inside
R1(config)ip nat inside source static 10.0.1.10 203.0.113.3
Per la verifica usiamo il comando "show ip nat translation"
Definizioni NAT
Vediamo ora le varie definizioni del NAT:
Inside local: L'indirizzo IP configurato all'interno del Sistema Operativo dell'host.
Inside global: L'indirizzo IP "NAT'd" dell'host interno che verrà raggiunto dalla rete esterna.
Outside local: L'indirizzo IP dell'host esterno per come appare nel network interno.
Outside global: L'IP assegnato all'host dalla rete esterne dal proprietario dell'host.
Possiamo vedere che outside local e outside global, in questo esempio, sono gli stessi.
Questo perché il router R1 del nostro esempio conosce un indirizzo per raggiungere l'host esterno (203.0.113.20) e non lo risolve.
Per il NAT ad una via, quindi, gli indirizzi outside local e outside global vengono mostrati come uguali.
NAT Dinamico


Riprendiamo il nostro esempio ed ora usiamo il NAT dinamico per configurare i due PC.
Gli host nella sottorete 10.0.2.0/24 non accettano connessioni in entrata e quindi non hanno bisogno di un indirizzo IP pubblico statico con una traduzione NAT, ma hanno bisogno di una connessione in uscita verso Internet, quindi devono essere risolti in indirizzi IP pubblici.
Possiamo usare il range da 203.0.113.4 a .14 come pool per il NAT.
Gli indirizzi IP interni degli host vengono risolti in indirizzi IP pubblici, in ordine di richiesta, per quando inviano il traffico all'esterno.
Il primo host ad inviare il traffico verrà risolto in 203.0.113.4, il secondo con 203.0.113.5 e così via fino a 203.0.113.14 che è l'ultimo indirizzo della pool.
Con il NAT dinamico standard si ha bisogno di un indirizzo pubblico per ogni host interno che deve comunicare con l'esterno. Se si hanno 30 host si ha bisogno di 30 indirizzi.
Quando vengono usati tutti gli indirizzi della pool, le nuove connessioni dagli altri host interni falliranno perché non ci saranno rimasti indirizzi a cui risolverli.
Questi host devono aspettare che le connessioni esistenti finiscano prima di poter comunicare con l'esterno.
Configurazione:
R1(config)#int f0/0
R1(config-if)#ip nat outside
R1(config)#int f2/0
R1(config-if)#ip nat outside
Per configurare la pool degli indirizzi globali:
R1(config)#ip nat pool Hayden 203.0.113.4 203.0.113.14 netmask 255.255.255.240
Per creare una lista d'accesso che si rifersce agli indirizzi IP interni che vogliamo risolvere:
R1(config)#access-list 1 permit 10.0.2.0 0.0.0.255
Associare una lista d'accesso con una pool NAT per completare la configurazione:
R1(config)#ip nat inside source list 1 pool Hayden
Port Address Translation - PAT
Il PAT è un'estensione al NAT che permette il mappamento di più dispositivi ad un singolo indirizzo IP pubblico.
Tramite il PAT non si ha bisogno di avere un indirizzo pubblico per ogni host interno.
Il router conosce la differenza tra i vari host interni grazie alle differenti porti, che gli permette di mandare il traffico di ritorno all'host corretto.
NAT dinamico con Overload
Il NAT dinamico con Overload permette di avere più client rispetto agli indirizzi IP disponibili nella pool NAT.
Se la pool NAT è 203.0.113.4 fino a 203.0.113.6 per esempio, i primi due host con connessioni in uscita verranno risolti con 203.0.113.4 e 203.0.113.5.
Il terzo host verrà risolto in 203.0.113.6 e il router terrà traccia di quale porta sorgente è stata usata nella tabella di traduzione.
Il quarto e quinto host verranno risolti in 203.0.113.6 ma con porta sorgente differente.
Quando il traffico di ritorno arriva al router, questo controlla la porta di destinazione per capire a quale host instradarlo.
Configurazione:
R1(config)#int f0/0
R1(config-if)#ip nat outside
R1(config)#int f2/0
R1(config-if)#ip nat outside
Per configurare la pool degli indirizzi globali:
R1(config)#ip nat pool Hayden 203.0.113.4 203.0.113.14 netmask 255.255.255.240
Per creare una lista d'accesso che si rifersce agli indirizzi IP interni che vogliamo risolvere:
R1(config)#access-list 1 permit 10.0.2.0 0.0.0.255
Associare una lista d'accesso con una pool NAT per completare la configurazione:
R1(config)#ip nat inside source list 1 pool Hayden overload
PAT con un singolo indirizzo IP
L'ultimo caso da coprire è un piccolo ufficio che non ha comprato un range di indirizzi IP pubblici.
In questo caso l'interfaccia esterna ottiene il suo IP tramite DHCP dell'ISP.
Il PAT può essere usato per permettere a più host interni di condividere un singolo indirizzo IP pubblico.
La configurazione è molto simile al NAT dinamico con Overload ma risolve verso interfacce esterne piuttosto che ad una pool di indirizzi.
Bisogna risolvere all'interfaccia esterna piuttosto che ad un indirizzo IP specifico perché gli indirizzi ottenuti tramite DHCP possono cambiare.
Configurazione:
R1(config)#int f0/0
R1(config-if)#ip address dhcp
R1(config-if)#ip nat outside
R1(config)#int f1/0
R1(config-if)#access-list 1 permit 10.0.2.0 0.0.0.255
R1(config)#ip nat inside source list 1 interface f0/0 overload