.. meta:: :language: it :description language=it: Networking Fundamentals: NAT per IPv4 :description language=en: Networking Fundamentals: NAT for IPv4 :keywords: Networking Fundamentals, NAT for IPv4 :author: Luciano De Falco Alfano P2/9 NAT per IPv4 ========================================= .. contents:: :local: 9.0 introduzione ----------------- 9.0.1 benvenuto ^^^^^^^^^^^^^^^^^^^ **9.0.1.1 capitolo 9: NAT per IPv4**. Il meccanismo di Network Address Translation e gli indirizzi IPv4 privati (RFC 1918) sono un meccanismo per fronteggiare nel breve periodo l'esaurirsi degli indirizzi IPv4. **9.0.1.2 NAT concettuale** 9.1 operazioni del NAT ----------------------- 9.1.1 caratteristiche del NAT ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **9.1.1.1 spazio degli indirizzi IPv4 privato**. Siccome non vi sono abbastanza indirizzi IPv4 da assegnare ai device, le reti vengono implementate usando indirizzi IPv4 privati (RFC1918), in grado di comunicare solo localmente, non su Internet. Se un device con indirizzo privato vuole accedere ad una risorsa su Internet, il suo indirizzo deve essere tradotto in un indirizzo IPv4 univoco. Questo indirizzo univoco può essere condiviso tra più indirizzi privati. La classificazione degli indirizzi privati è definita nella RFC 1918 come segue: +--------+-------------------------------+-----------------+ | classe | intervallo degli indirizzi | CIDR | +========+===============================+=================+ | A | 10.0.0.0 - 10.255.255.255 | 10.0.0.0/8 | +--------+-------------------------------+-----------------+ | B | 172.16.0.0 - 172.31.255.255 | 172.16.0.0/12 | +--------+-------------------------------+-----------------+ | C | 192.168.0.0 - 192.168.255.255 | 192.168.0.0./16 | +--------+-------------------------------+-----------------+ **9.1.1.2 cos'è NAT**? Per risparmiare indirizzi IPv4 pubblici, nell'ambito di una rete locale si utilizzano indirizzi IPv4 privati, convertiti ad indirizzi pubblici solo quando serve: se l'utente richiede di raggiungere una risorsa esterna alla LAN, su Internet. Questo comportamento dà anche una certa garanzia di sicurezza perché nasconde gli indirizzi interni idella LAN ad osservatori esterni. I router NAT possono essere configurati con uno o più indirizzi IPv4 pubblici, raccolti in un NAT pool. Quando un indirizzo device interno alla rete invia traffico verso l'esterno, il router NAT traduce l'idirizzo privato del device in un indirizzo pubblico prelevato dal NAT pool. Ai device esterni tutto il traffico in ingresso e sucita dalla rete sembrerà avere indirizzi pubblici. Un router NAT tipicamente opera al confine di una *stub network*, ovvero di una rete dotata di un una sola connessione verso le reti vicine. Quando un device in una *stub network* vuole comunicare con un device all'esterno, il pacchetto vieneinoltrato al router di confine. Questo esegue il processo NAT, traducendo l'indirizzo privato interno in indirizzo pubblico, routabile all'esterno. Nel caso di connessione tramite un ISP, il NAT router può usare un indirizzo privato alla rete del ISP, o un indirizzo pubblico. In questo corso si considera solo l'impiego di indirizzi pubblici. **9.1.1.3 terminologia NAT**. NAT definisce *rete interna* l'insieme delle reti che è soggetta a traduzione. Il termine *rete esterna* si riferisce a tutte le altre reti. Con il NAT gli indirizzi IPv4 hanno designazioni diverse a seconda se sono nella rete privata o in quella pubblica (Internet) e se il traffico è entrante o uscente. Sono previsti i seguenti tipi di indirizzi: * inside local address; * inside global address; * outside local address; * outside global address. La terminologia NAT viene sempre applicata dal punto di vista del device che ha l'indirizzo tradotto: * **inside address** - indirizzo del device che viene tradotto dal NAT; * **outside address** - indirizzo del device destinazione. Inoltre il NAT usa il concetto di locale o globale in relazione agli indirizzi: * **local address** - ogni indirizzo che appare nella porzione interna della rete; * **global address** ogni indirizzo che appare all'esterno della rete. Il seguente diagramma illustra la terminologia su esposta: .. image:: ./images/04_nat.svg Nel diagramma si vede che il *inside local address* è l'indirizzo del PC sorgente che viene tradotto da 192.168.10.10 a 210.165.200.226 (*inside global address*). Mentre il *outside local address* è l'indirizzo del Server destinazione, ed è usualmente non tradotto quando diviene il *outside global address*. Dal punto di vista del server l'indirizzo IPv4 d'origine della richiesta è il *inside global address*. Il NAT router è il confine tra rete interna (*inside*) ed esterna (*outside*), nonché tra indirizzi locali (*local*) e globali (*global*). **9.1.1.4 terminologia NAT (continua)**. Il seguente diagramma mostra uno scambio di pacchetti, richiesta e risposta, tra client e server. Il primmo con indirizzo privato, il secondo con indirizzo pubblico. .. image:: ./images/05_nat-2.svg Il NAT router provvede alla traduzone dell'indirizzo privato del cliente in un indirizzo pubblico routabile. E viceversa, all'arrivo della risposta trasforma l'indirizzo pubblico della destinazione nell'indirizzo privato effettivamente usato all'interno della rete. **9.1.1.5 come funziona NAT**. Come detto nelle due pagine precedenti, il processo NAT è attuato dal NAT router di confine, che all'uscita di un pacchetto dalla rete interna verso l'esterna preparerà nella tabella NAT un record come segue: +---------------+-----------------+---------------+----------------+ | inside local | Inside Global | outside local | outside global | +===============+=================+===============+================+ | 192.168.10.10 | 210.165.200.226 | 209.165.201.1 | 209.165.201.1 | +---------------+-----------------+---------------+----------------+ 9.1.2 tipi di NAT ^^^^^^^^^^^^^^^^^^^^ **9.1.2.1 Static NAT**. Vi sono tre tipi di traduzioni NT: * traduzione in indirizzi statici (**static NAT**) - questa è una mappatura uno ad uno tra indirizzi locali e globali. * traduzione in indirizzi dinamici (**dynamic NAT**) - mappatura molti a molti tra indirizzi locali e globali. La traduzione avviene sulla base della disponibilità degli indirizzi pubblici nel NAT pool: in un determinato istante, esauriti gli indirizzi nel NAT pool, le richieste in eccesso devono attendere. * traduzione degli indirizzi in porte (**port address translation** *PAT*) - mappatura molti a uno tra indirizzi locali e globali. Conosciuto anche con il nome di *NAT overloading*. Oltre l'indirizzo IPv4 usa anche il numero di porta per fare la traduzione, in tal modo si aggira la limitazione del n.ro di indirizzi *inside global address* nel NAT pool. Si può arrivare ad un rapporto di 65,536 *inside local address* per ogni *inside global address* (a seconda del flusso UDP, TCP e ICMP). **Static NAT** usa una mappaura 1 a 1 tra locale e globale. Le mappature sono configurate dall'amministratore di sistema e rimangono costanti. Lo *static NAT* è utile per WEB server o device che devono avere un indirizzo costante e raggiungibile da Internet. Bisogna avere un numero di indirizzi pubblici sufficiente per soddisfare il numero totale di sessioni utente simultanee. **9.1.2.2 Dynamic NAT**. Usa un pool di indirizzi pubblici e li assegna secondo una logica fist in/first out. Anche in questo caso bisogna avere un numero di indirizzi pubblici sufficiente per soddisfare il numero totale di sessioni utente simultanee. **9.1.2.3 Port Address Translation (PAT)**. Conosciuto anche come **NAT overload**. Mappa più indirizzi IPv4 privati su un unico indirizzo IPv4 pubblico. Questo è il meccanismo più utilizzato dai NAT router. Per ottenere l'effetto molti-a-uno si usa il numero di porta TCP. Quando un device invia un pacchetto richiedendo un servizio TCP/IP, di solito il richiedente genera un numero di porta UDP o TCP sorgente [#]_. Il NAT router usa la coppia IP-sorgente+porta-sorgente per identificare univocamente la traduzione NAT. Se più di un device usa la stessa porta, allora il NAT la modifica per assicurare l'univocità della coppia IP-sorgente+porta-sorgente **9.1.2.4 prossima porta disponibile**. come accennato nella pagina precedente, il NAT router che usa il PAT cerca di preservare il numero di porta assegnato dal mittente, ma se fosse già usato lo deve modificare per assicurare l'univocità della coppia IPv4+porta sorgente. A questo fine PAT assegna la prima porta disponibile rimanendo nei gruppi definiti: * 0-511 (2^8-1); * 512-1023 (2^10-1); * 1024-65535 (2^16-1). Quando non vi sono più porte disponibili, PAT passa al prossimo IPv4 pubblico disponibile. **9.1.2.5 comparazione di NAT e PAT**. Nel caso di NAT statico o dinamico, il NAT router effettua la traduzione inversa, ovvero sui pacchetti entranti verso la local network, basandosi solo sull'IPv4 destinazione considerato come *inside global*. Questo permette di ottenere l'indirizzo *inside local* senza ambiguità. Invece nel caso di PAT il solo indirizzo IPv4 destinazione non basta. Il NAT router deve esaminare anche la seconda parte della coppia: la porta destinazione; e la coppia IPv4+porta/destinazione permette di ottenere la coppia *inside local+porta*. La tabella del router che referenzia le coppie IP+porta permette il processo appena descritto, detto *connection tracking*. Esistono pacchetti che non hanno dati dei segmenti TCP o UDP. Questi pacchetti non hanno un numero di porta del layer 4. Questi sono gestiti caso per caso dal PAT. Ad esempio il ICMPv4 viene gestito monitorando, ed eventualmente modificando il Query ID. La gestione di altri tipi di protocolii di livello 4 non è studiata in questo corso. **9.1.2.6 packet tracer - investigare le operazioni NAT** 9.1.3 vantaggi del NAT ^^^^^^^^^^^^^^^^^^^^^^^^ **9.1.3.1 vantaggi del NAT** * risparmio di indirizzi pubblici necessarei per il collegamento a rete pubblica - sopratutto utilizzando il PAT; * flessibilità di connesione alla rete pubblica - perché è possibile avere pool multipli, pool di backup, e pool di load balancing; * coerenza dello schema di indirizzamento interno - si può modificare il set di indirizzi pubblici senza modificare gli indirizzi interni assegnati; in pratica si può cambiare ISP senza modifiche alla rete; * aumento della sicurezza della rete - perhé nasconde gli indirizzi interni, ma si ricordi che non è questo lo scopo di RFC 1918; per gestire la sicurezza si ricorra all'uso di firewall. **9.1.3.2 svantaggi del NAT** * diminuizione delle performance - problematico sopratutto per i protocolli real time, come il VoIP; dovuto al fatto che il router deve controllare ogni pacchetto per decidere se deve essere tradotto, in caso affermativo deve modificare gli header IPv4 e TCP (o UDP), e ricalcolare il relativi checksum; queste operazioni avvengono sicuramente per il primo pacchetto (*process-switched path*), i successivi passano attraverso il *fast-switched path* se esiste la relativa voce della cache. * diminuizione delle funzionalità end-to-end - esistono applicazioni e protocolli che fanno affidamento sulla possibilità di comunicazione diretta tra i due interlocutori, ad esempio applicazioni di sicurezza, come le firme digitali, falliscono perché l'indirizzo sorgente cambia prima di raggiungere la destinazione. Analogamente le applicazioni esterne che usano direttamente gli indirizzi fisici invece dei nomi a dominio. Alcuni di questi problemi si possono evitare con assegnazioni statice del NAT. * difficile tracciabilità end-to-end - sopratutto se vi è più di una traduzione NAT per l'attraversamento di più confini. In queste condizioni il troubleshooting di rete diviene più complesso. * tunneling diviene complesso - come ad esempio i protocolli che usano IPsec, perché il NAT modifica gli header acendo fallire i controlli di integrità. * può non essere possibile l'inizializzazione di connessioni TCP o UDP dall'esterno della rete - è necessario che il NAT router sia appositamente configurato per il supporto di questi protocolli, o i pacchetti entranti non raggiungeranno le destinazioni richieste. Alcuni protocolli possono ammettere che uno dei sistemi partecipanti al servizio siano dietro un NAT, ma falliscono se entrambi i sistemi sono dietro un NAT (un esempio è il FTP passivo). 9.2 configurare il NAT ------------------------- 9.2.1 configurare il NAT statico ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **9.2.1.1 configurare il NAT statico**. Utile quando si deve accedere dall'esterno ad una macchina interna, ad esempio un WEB server. Sono necessari due passi: #. creare una mappatura tra *inside local* e *inside global* addresses. Ad esempio: +----------------+----------------+ | inside local | inside global | +================+================+ | 192.168.10.254 | 209.165.201.5 | +----------------+----------------+ Si ottiene con il comando (local-ip a sx e global-ip a dx):: R(config)# ip nat inside source static 192.168.10.254 209.165.201.5 #. configurare l'interfaccia del router che partecipa alla traduzione come interna o esterna. Ad esempio, nel seguente schema, *g0/1* è l'interfaccia interna, mentre *s0/1/0* è l'interfaccia esterna: .. image:: ./images/06_nat_statico.svg Si ottiene con:: R(config)# interface g0/1 R(config-if)# ip address 192.168.10.1 R(config-if)# ip nat inside R(config-if)# interface s0/1/0 R(config-if)# ip address 209.165.200.1 R(config-if)# ip nat outside **9.2.1.2 analizzare il NAT statico**. Se un client esterno vuole aprire una connessione verso il web server interno: #. invia un pacchetto al web server utilizzando l'indirizzo pubblico IPv4 di destinazione: 209.165.201.5, che è il *inside global* address. #. il primo pacchetto che riceve il NAT router dal client sulla sua interfaccia esterna, provoca il controllo nel router della NAT table, che così localizza l'indirizzo *inside global* e lo traduce. #. Il router rimpiazza l'inside global address con l'inside local address 192.168.10.254, dopo di che lo inoltra al web server. #. il web server riceve il pacchetto e risponde al client usando l'inside local address. #. il router riceve il pacchetto del server sulla sua interfaccia interna, con IPv4 sorgente l'inside local address del server: 192.168.10.254 #. il router controlla la NAT table cercando l'inside local address, lo trova, e lo sostituisce con l'inside global address 209.165.201.5 e inoltra il pacchetto verso il client #. il client riceve il pacchetto e continua la conversazione. **9.2.1.3 verificare il NAT statico**. Il comando per visualizzare le traduzioni attive è:: R# show ip nat translations Le traduzioni statiche, a differenza di quelle dinamiche, sono sempre nella NAT table. Se vi è una connessione attiva in corso, il comando visualizza anche l'indirizzo del device esterno. È utile anche analizzare le statistiche. A questo fine si usa:: R# show ip nat statistics che mostra le statisitiche relative alle traduzioni attive, i parametri di configurazione del NAT, il n.ro di indirizzi nel pool e quanti sono stati allocati. Per azzerare le statistiche usare:: R# clear ip nat statistics **9.2.1.4 packet tracer - configurare il NAT statico** 9.2.2 configurare il NAT dinamico ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **9.2.2.1 operazioni del NAT dinamico**. In questo caso l'associazione nel NAT router tra *inside local* e *inside global* addresses è dinamica. Ad esempio si può avere un NAT pool come segue: +-------------------+--------------------+ | inside local addr | inside global addr | +===================+====================+ | 192.168.10.10 | 209.165.200.226 | +-------------------+--------------------+ | 192.168.11.10 | 209.165.200.227 | +-------------------+--------------------+ | | . . . | +-------------------+--------------------+ | | 209.165.200.240 | +-------------------+--------------------+ Anche in questo caso è necessario configurare le interfacce interne ed esterne del router. Inoltre si noti che la traduzione NAT si può applicare a qualunque tipologia di indirizzi, non solo a *inside global* rispetto *inside local*. Il pool di indirizzi NAT pubblici (*inside global address pool*) è disponibile a ogni device della inside network con una logica del tipo first-come/first-served. Il n.ro di *inside global address* deve essere tale da permettere l'allocazione al numero di device interni che contemporaneamente lo richiedono. In caso contrario, se il pool è già tutto allocato, il nuovo richiedente deve attendere si liberi un indirizzo pubblico prima di poter accedere all'esterno. **9.2.2.2 configurare il NAT dinamico**, si deve: #. definire un pool di global addresses:: R(config)# ip nat pool name start-ip end-ip {netmask nmask | prefix-length len} #. configurare una access list standard per definire gli indirizzi che devono essere tradotti:: R(config)# access-list acl-num permit source [wildcard] #. stabilire la traduzione dinamica specificando le precedenti: ACL e pool:: R(config)# ip nat inside source list acl-num pool name #. identificare l'interfaccia interna:: R(config)# interface interf-id R(config-if)# ip nat inside #. identificare l'interfaccia esterna:: R(config)# interface interf-id R(config-if)# ip nat outside Ad esempio:: R(config)# ip nat pool NAT-POOL1 209.165.2000.226 209.165.200.254 netmask 255.255.255.224 R(config)# access-list 1 permit 192.168.0.0 0.0.255.255 R(config)# ip nat inside source list 1 pool NAT-POOL1 R(config)# interface serial 0/0/0 R(config-if)# ip nat inside R(config-if)# interface serial 0/1/0 R(config-if)# ip nat outside **9.2.2.3 analizzare il NAT dinamico**. In questo caso il traffico è dalla rete interna alla esterna. #. Gli host con indirizzo mittente 192.168.10.10 (PC1) e ...11.10 (PC2) richiedono una connessione al server con IPv4 pubblic 209.165.200.254. #. il NAT router riceve ill primo pacchetto da 192.168.10.10 sulla *inside NAT interface* e quindi controlla la sua configurazione NAT e osserva che deve essere tradotto. La ACL dà l'ok e il router traduce il pacchetto controllando la NAT table; l'inside local address non è in tabella, quindi il router seleziona un inside global address (209.165.200.226), crea la voce in tabella. Per il secondo host (PC2) il router ripete la procedura selezionando il successivo global address disponibile. #. il router sostituisce l'inside global all'inside local nel pacchetto, e lo routa, questo prima per PC1 e successivamente per PC2 utilizzando l'inside global 209.165.200.227. #. il server 209.165.200.254 riceve i pacchetti di richiesta dal router e risponde con pacchetti le cui destinazioni sono 209.165.200.226 e ...227 #. quando il router riceve questo pacchetti esegue un lookup nella NAT table ed usando il mapping dato dalle relative voci, trasforma le destinazioni da *inside global* ad *inside local*, ovvero 209.165.200.226 diviene 192.168.10.10, mentre 209.165.200.227 diviene 192.168.11.10, ed inoltra i pacchetti verso PC1 e PC2 #. PC1 e PC2 ricevono i pacchetti e continuzno la conversazione verso il server. Il router per ogni nuovo pacchetto ripeterà i passi precedenti. **9.2.2.4 verificare il NAT dinamico**. L'uscita del comando *show ip nat translations* mostra i dettagli delle trasformazioni in corso: tutte quelle statiche, e quelle dinamiche in corso per motivi di traffico. Con la keyword *verbose* il precedente comando mostra anche da quanto tempo la traduzione è in corso. Di default esiste un timeout di 24 ore per la soluzione della traduzione. Si può modificare questo timeout con il comando:: R(config)# ip nat tranlation timeout timeout-seconds Il comando:: R(config)# clear ip nat translation * azzera le voci NAT create dinamicamente. È utile in fase di test. Si noti che vengono cancellate solo le voci create dinamicamente. Quelle statiche non possono essere cancellate. Per avere le statistiche, si usa il comando:: R# show ip nat statistics che indica: il numero totale di transazioni attive, i larametri di configurazione del NAT, il n.ro di indirizzi nel pool, quanti indirizzi sono stati allocati. **9.2.2.5 packet tracer - configurare il NAT dinamico** **9.2.2.6 lab - configurare il NAT dinamico e il NAT statico** 9.2.3 configurare il PAT ^^^^^^^^^^^^^^^^^^^^^^^^^ **9.2.3.1 configurare il PAT: pool degli indirizzi**. Il PAT, o NAT overload, conserva indirizzi globali permettendo al router di utilizzare un singolo iside global addrees per più inside local address. Per poterlo fare, il router utilizza, ed eventualmente modifica, informazioni da livelli superiori, quali i numeri di porta TCP e UDP. Quidi usa una coppia inside-global+port per identificare il corretto inside-local. Il n.ro totale di indirizzi interni che può essere tradotto in indirizzi esterni può arrivare in teoria a 65536. In pratica il n.ro di internal local addresses gestiti con un singolo internal global address è circa 4000. vi sono due modi di configurare il PAT, a seconda di come ISP alloca gli indirizzi IPv4 pubblici: * se vengono allocati più indirizzi pubblici, * o se viene allocato un singolo indirizzo pubblico. **Configurare il PAT per un pool di indirizzi IPv4 pubblici**. È simile alla configurazione del NAT dinamico, si noti qui di seguito la parola chiave **overload** che configura PAT invece di NAT dinamico:: R(config)# ip nat pool name start-i end-ip {netmask nmask | prefix-length len} R(config)# access-list acl-number permit source [wildcard] R(config)# ip nat inside source list acl-number pool name overload R(config)# interface interf-id R(config-if)# ip nat inside R(config-if)# interface interf-id2 R(config-if)# ip nat outside Ad esempio:: R(config)# ip nat pool NAT-POOL2 209.165.200.226 209.165.200.240 netmask 255.255.255.224 R(config)# access-list 1 permit 192.169.0.0 0.0.255.255 R(config)# ip nat inside source list 1 pool NAT-POOL2 overload R(config)# interface serial 0/0/0 R(config-if)# ip nat inside R(config-if)# interface serial 0/1/0 R(config-if)# ip nat outside **9.2.3.2 configurare il PAT: indirizzo singolo**. **Configurare il PAT per un singolo indirizzo IPv4 pubblic0**. Ad esempio tutti gli host della rete 192.168.0.0/16 (che collima con ACL 1) per collegarsi ad Internet utilizzano l'indirizzo 209.165.200.225, assegnato alla interfaccia s0/1/0 del NAT Router. Il flusso del traffico srà identificato dai numeri delle porte nella NAT table perché viene usata la aparola chiave **overload**. Gli step per configurare sono i seguenti: #. definire la ACL per permettere la traduzione del traffico; #. configurare la trasformazione degli indirizzi della rete sorgente usando le parole chiave **interface** e **overload**. *Interface* indica quale interfaccia utilizzare per la trasformazione *degli inside local address*. *Overload* indica al router di registrare il numero di porta oltre l'inside local address. #. identificare quali interfacce [#]_ sono *inside* in relazione al NAT. #. identificare l'interfaccia outside al NAT. Questa deve essere la stessa indicata nel secondo step; Di seguito i comandi da usare:: R(config)# access-list acl-number permit source [wildcard] R(config)# ip nat inside source list acl-numbber interface iterf-id2 overload R(config)# interface interf-id R(config-if)# ip nat inside R(config-if)# interface interf-id2 R(config-if)# ip nat outside Ad esempio: R(config)# access-list acl-number permit source [wildcard] R(config)# ip nat inside source list acl-number interface interf-id2 overload R(config)# interface interf-id R(config-if)# ip nat inside R(config-if)# interface interf-id2 R(config-if)# ip nat outside **9.2.3.3 analizzare il PAT**. Che si usi un pool di indirizzi pubblici, o un singolo indirizzo pubblico, il processo PAT è lo stesso. **Processo dal client al server**. Riprendendo l'esempio precedente. Se PC1 e PC2 vogliono comunicare con due diversi server pubblici: #. PC1 (192.168.10.10:1444) e PC2 (192.168.10.11:1444) inviano i pacchetti rispettivamente a Srv1 (209.165.201.1:80) e Srv2 (209.165.202.129:80) [#]_. #. Il pacchetto di PC1 rggiunge per primo il router. Usando il PAT il router modifica l'indirizzo IPv4 sorgente in 209.165.200.225:1444. La porta non viene modificata perché non vi sono altri client che la stanno usando. Il pacchetto è inoltrato a Srv1. #. Al route arriva il pacchetto di PC2. PAT trasforma l'inside local address (e la porta TCP) in 209.165.200.225:1445, dove l'IPv4 è uguale a quello di PC1, ma il n.ro di porta viene incrementato al primo numero libero per non avere collisione con il precedente. Dopo di che inoltra il pacchetto modificato. **Processo dal server al client**. Nella tratta di ritorno, il server utilizza la porta del client come porta di destinazione, oltre l'indirizzo IPv4: #. i idue server rispondono rispettivamente a: 209.165.200.225:1444 e 209.165.200.225:1445. Ovvero, sembrano comunicare con due diversi processi nella stessa macchina. In relatà non è così. #. Quando i pacchetti arrivano al router, questo esegue una ricerca nella NAT table usando la coppia indirizzo+porta di destinazione. Nel caso del pacchetto di Srv1 209.165.200.225:1444 individua 192.168.10.10:1444, che viene sostituito all'indirizzo di destinazione (la porta non cambia). Dopo di che il pacchetto viene inoltrato a PC1. #. Quando il router riceve il pacchetto da Srv2 la ricerca nella NAT table avviene per 209.165.200.225:1445, che porta ad individuare 192.168.10.11:1444. In questo caso vengono sostituiti sia IPv4 che porta di destinazione nel pacchetto in ingresso, puntando a 192.168.10.11:1444. Dopo di che il pacchetto viene inoltrato a PC2. **9.2.3.4 verificare il PAT**. Siusano gli stessi comandi utilizzati per verificare i NAT statici e dinamici:: R# show ip nat translations in questo caso l'output deve essere controllato facendo attenzione anche alle porte. Mentre le statistiche valgono anche per il PAT:: R# show ip nat statistics Come nei casi precedenti, è possibile azzerare le statistiche:: R# clear ip nat statistics **9.2.3.5 attività - identificare le informazioni degli indirizzi ad ogni salto** **9.2.3.6 packet tracer - implementare NAT statico e NAT dinamico** **9.2.3.7 lab - configurare Port Address Translation (PAT)** 9.2.4 Configurare l'inoltro delle Porte ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **9.2.4.1 inoltro delle porte**. L'inoltro delle porte (*port forwarding*) consiste nell'inoltrare il traffico ad una specifica porta di rete da un nodo di rete ad un altro. In questo modo un utente esterno può raggiungere una porta in un indirizzo IPv4 privato utilizzando un NAT router. Vi sono servizi come il file-sharing peer-to-peer, i web server e il FTP richiedono che le rispettive porte siano aperte o inoltrate. Siccome NAT nasconde gli indirizzi interni, solo il peer-to-peer può lavorare dall'interno all'esterno visto che NAT può mappare le richieste in uscita rispetto le risposte entranti. Ma il NAT non permette di iniziare una richiesta dall'esterno. Per risolvere questo problema è necessaria una configurazione manuale per inoltrare dall'esterno all'interno delle porte specifiche a determinati host. Per esempio, data la porta 80 per il protocollo http, una richiesta per questa porta alla interfaccia WAN del router verrebbe inoltrata al server WEB nella rete interna. Server WEB di solito configurato con un indirizzo privato. Quindi un client per usare il servizio del PC interno utilizza l'indirizzo pubblico del router e la porta del servizio stesso. **9.2.4.2 esempio di router wireless**. Ad esempio utilizzando il wireless router del packet tracer è possibile attivare la finestra di configurazione per l'inoltro di una singola porta (*single port forwarding*) Questa finetra è una GUI che permette all'utente di sceglier la porta esterna, quella interna su cui mappare e il relativo indirizzo IPv4. **9.2.4.3 configurare il port forwarding con IOS**. Con il sistema operativo Cisco IOS la configurazione è simile a quella del NAT Statico:: R(config)# ip nat inside source {static {tcp | udp} local-ip local-port global-ip global-port} [extendable] Ad esempio:: R(config)# ip nat inside source static tcp 192.168.10.254 80 209.165.200.225 80 R(config)# interface s0/0/0 R(config-if)# ip nat inside R(config-if)# interface s0/1/0 R(config-if)# ip nat outside Si noti che, essendo di fatto un tipo di NAT, il port forwarding richiede l'identificazione delle interfacce inside e outside. Inoltre, non è detto le due porte debbano essere uguali, è possibile trasformare anche la porta tra due diversi valori. Per verifica, al solito:: R# show ip nat translations **9.2.4.4 packet tracer - configurare il port forwarding in un router wireless** 9.2.5 NAT e IPv6 ^^^^^^^^^^^^^^^^^ **9.2.5.1 NAT per IPv6**? Come detto, indirizzi privati e NAT sono stati concepiti per rallentare l'esaurimento degli indirizzi IPv4. Esaurimento avvenuto nel 2011 con l'affidamento da parte di IANA ai RIR degli ultimi indirizzi pubblici IPv4 disponibili. Nel mettere in opera reti private con NAT router vi è stata anche la percezione di un aumento della sicurezza perché gli indirizzi interni della rete sono nascosti. Anche se Internet Architecture Board (IAB) ha ribadito in RFC 5902 che il modo corretto per rendere sicure le reti private è luso di un NAT con firewall. IPv6, con 128 bit, e quindi uno spazio di indirizzamento pubblico di 340 * 10^36 (contro 4.3 * 10^9 di IPv4), non ha problemi di esaurimento degli indirizzi disponibili. Comunque anche IPv6 implementa una forma di NAT e di indirizzi privati, anche se diversi da quelli IPv4. **9.2.5.2 indirizzi locali univoci IPv6**. Gli indirizzi univoci locali (*unique local addresses*: ULA) hanno lo scopo di permettere la comunicazione entro un sito locale. **Non sono** *local-link addresses*. Sono definiti in RFC 4193. A volte sono detti local IPv6 addresses. Hanno prefisso FC00::/7, e quindi un range da FC00 a FDFF. Per ora il bit sucessivo è fisso ad 1 (assegnazione locale) in futuro potrebbe esser utilizzato lo 0. Seguono 40 bit di global ID e poi 16 bit di Subnet ID. L'insieme di questi 64 bit firmano il prefisso dell'ULA. I rimanenti 64 bit sono l'interface ID, ovvero l'host address. Di seguito si riassume quanto qui esposto: +-------+----------+-------+-------------------------+---------------+--------------------------+ | bits | 7 | 1 | 40 | 16 (sum:/64) | 64 | +-------+----------+-------+-------------------------+---------------+--------------------------+ | field | prefix | L | global ID | subnet ID | Interface ID | +-------+----------+-------+-------------------------+---------------+--------------------------+ | value | FC00::/7 | 1 o 0 | pseudo random algorithm | | EUI-64 or manual config. | +-------+----------+-------+-------------------------+---------------+--------------------------+ Questi indirizzi: * permettono di combinare siti o di connetterli privatamente, senza rinumerare le interfacce coinvolte; * sono indipendenti dagli ISP ed usabili anche senza connessione ad Internet; * non sono routabili attraverso Internet; in caso di inoltro accidentale, non vi è comunque conflitto. L'uso degli IPv6 ULA è ancora in discussione e sono possibili evoluzioni future. Ad esempio si pensa ad avere il global ID assegnato centralmente, in tal caso utilizzando FC00::/8, mentre se si ha FD00::/8 il global ID potrebbe essere generato casualmente. In vecchi documenti si può trovare riferimento a *site-local addresses*. Questi erano stati definiti in origine, ma successivamente sono stati deprecati. **9.2.5.3 NAT per IPv6**. Questo ha uno scopo del tutto diverso da quello per IPv4. Serve per mettere in comunicazione reti IPv6 con reti IPv4. Per la fase di transizione da IPv4 a IPv6, IETF ha ipotizzato tre meccanismi di poossibile convivenza: dual-stack, tunneling e conversione. *Dual-stack* consiste in devic che fanno girare IPv4 di fianco a IPv6. *Tunneling per iPv6* incapsula un pacchetto IPv6 in un pacchetto IPv4, permettendo il loro trasporto in reti IPv4. La *conversione* è il *NAT per IPv6* come detto permette la comunicazione tra rete IPv6 e rete IPv4. Deve essere utilizzata solo in via temporanea, e ne esistono diversi tipi, inclusa Network Address Translation-Protocol Translation (NAT-PT), che è stata sostituita da NAT64. Che qui non viene esposta. 9.3.1 Comandi per il troubleshooting di NAT ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **9.3.1.1 comandi show ip nat**. Per il troubleshooting di NAT seguire questi passi: #. basandosi sulla configurazione, controllare gli obietivi del NAT; #. controllare che le conversioni siano corrette utilizzando:: R# show ip nat translations #. usare i comandi *clear* e *debug* per verificare che il NAT operi come atteso. Controllare che le entry dinamiche siano ricreate dopo la loro cancellazione:: R# clear ip nat translations * R# clear ip nat statistics #. controllare nel dettaglio cosa avviene nel pacchetto e controllare che il router abbia la configurazione corretta per il routing **9.3.1.2 il comando debug ip nat**. Il comando:: R# debug ip nat [detailed] IP NAT debugging is on R# *Feb 15 20:01:311.67: NAT*: s=192.168.10.10->2019.165.200.226, d=209.165.201.1 [2817] ... mostra tutti i pacchetti sottoposti a conversione. La parola chiave *detailed* abilita un output molto più dettagliato. Ricordare i seguenti aspetti: * il simbolo di asterisco vicino NAT significa che la transazione è sul path fast-switched. Il promo pacchetto è sempre process-switched, più lento. I pacchetti successivi sono più veloci seguendo il fast-switched path se esiste una entry della cache. * il simbolo **s=** indica che è il source address IPv4; * **a.b.c.d->w.x.y.z** indica la trasformazione * **d=** è la destinazione * **[xxxx]** è un numero identificativo per permettere la correlazione in altri analizzatori di pacchetto Attenzione alla ACL cui si fa riferimento nel NAT. I pacchetti non permessi dalla ACL in questione *non sono sottoposti* a conversione. **9.3.1.3 NAT troubleshooting scenario** **9.3.1.4 packet tracer - verificare e correggere configurazioni NAT** **9.3.1.5 lab - correggere configurazioni NAT** 9.4 sommario ------------------------------- 9.4.1 conclusioni ^^^^^^^^^^^^^^^^^^^ **9.4.1.1. NAT Check** **9.4.1.2 packet tracer - skills integration challenge** **9.4.1.3 capitolo 9 - NAT per IPv4** ------------------------------- .. [#] Oltre il numero di porta UDP o TCP destinazione. Nel caso di ICMP, che non usa la porta, si utilizza il numero di query ID generato dal richiedente. .. [#] Evidentemente possono essere più di una. .. [#] Casualmente i due client usano lo stesso n.ro di porta.