NAT e indirizzi privati
In questa pagina 6
In questa pagina 4
Gli indirizzi IPv4 sono pochi (Livello di rete e indirizzamento IPIl livello di rete (network layer) porta i datagrammi da host a host attraverso i router: incapsula (framing), sceglie il percorso (routing) e sposta il pacchetto da un ingresso a un'uscita del router (forwarding); in Internet lascia ai livelli superiori controllo d'errore, di flusso e di congestione. Un indirizzo IPv4 è di 32 bit, diviso in prefisso (rete, $n$ bit) e suffisso (host, $32-n$ bit). L'indirizzamento a classi (A, B, C, D, E) è obsoleto; oggi si usa quello senza classi (CIDR): data una notazione $a.b.c.d/n$ si ricavano $N=2^{32-n}$ indirizzi, indirizzo di rete (suffisso tutto 0) e di broadcast (suffisso tutto 1), oppure con la netmask: rete $=$ indirizzo AND maschera, broadcast $=$ indirizzo OR (NOT maschera).Livello di rete e indirizzamento IP →). Oltre al CIDR e al subnetting (Subnetting e supernettingIl subnetting divide un blocco di indirizzi in sottoblocchi più piccoli allungando la maschera ($n_{\text{sub}}=n_{\text{rete}}+s$, con $2^s$ sottoreti); il supernetting (aggregazione CIDR) fa l'opposto, accorciando il prefisso per unire blocchi contigui in uno più grande. Regole di progetto: ogni sottorete ha un numero di indirizzi potenza di 2 ($M=2^k\ge$ host richiesti $+2$), prefisso $n=32-k$, indirizzo iniziale multiplo di $M$; si assegnano prima le sottoreti più grandi. Per aggregare $2^j$ blocchi di prefisso $n$ servono blocchi contigui il cui primo indirizzo sia multiplo della dimensione dell'aggregato, e il nuovo prefisso è $n-j$.Subnetting e supernetting →) una soluzione a breve termine al loro esaurimento è usare indirizzi privati e tradurli quando serve: è il NAT.
Reti private e intranet
Definizione (intranet). Rete privata che usa la pila di protocolli TCP/IP (server web, server di posta, router, ...). Può essere connessa a Internet oppure no, e non è mai attraversata da traffico "esterno". Dentro l'intranet ci sono Internal Gateway (IG) che collegano le sottoreti; un External Gateway (EG) la collega a Internet. Dentro l'intranet si usano indirizzi privati, fuori indirizzi pubblici.
Gli host dell'intranet possono avere o no bisogno dell'accesso a Internet, e in genere hanno indirizzi IP privati. I server possono avere o no indirizzi pubblici.
Definizione (indirizzi privati). Tre blocchi riservati, mai instradati nella rete pubblica:
| classe | intervallo | indirizzi | maschera massima | bit di HostID |
|---|---|---|---|---|
| A | - | () | 24 | |
| B | - | () | 20 | |
| C | - | () | 16 |
(Nelle slide per il blocco B il numero di bit di HostID è scritto 12; con maschera /12 i bit di host sono , coerentemente con indirizzi.)
Esempio. è l'ultimo indirizzo del blocco B privato: con copre i secondi byte da a (, i 4 bit di prefisso nel secondo byte sono , quindi il secondo byte va da a ). Controllo sul conteggio: i secondi byte possibili sono e per ciascuno restano i bit degli ultimi due byte, cioè indirizzi, come dice la tabella.
Come si verifica che un indirizzo sia privato. Si applica la regola dell'appartenenza a una rete (indirizzo AND maschera = indirizzo di reteun indirizzo appartiene alla rete se azzerando il suo HostID si ottiene l'indirizzo di reteLivello di rete e indirizzamento IP →). Per con maschera : il secondo byte è , AND , quindi : è privato. Per : , AND , quindi : non è privato (è pubblico, perché il blocco finisce a ).
Diverse intranet possono riusare gli stessi indirizzi privati: l'unicità dell'indirizzo privato deve essere garantita solo dentro la stessa intranet.
- Vantaggio: in una intranet posso configurare e attivare più host di quanti siano gli indirizzi disponibili per quell'ISP.
- Svantaggio: per collegarmi a Internet mi serve comunque un indirizzo pubblico.
Esempio di uso. Un collegamento punto-punto tra due router interni si può numerare con un blocco privato : ha rete , host e , broadcast , senza consumare indirizzi pubblici. Per risparmiare indirizzi pubblici conviene sempre assegnare indirizzi privati dove possibile (negli esercizi: "usa indirizzi privati quando possibile, senza ricorrere a NAT, NAPT o altri proxy", come in Esercizio - sottoreti classful e sottoreti con rete privata e Esercizio - indirizzamento di LAN A e LAN B e tabella di router 1).
I pacchetti con indirizzi privati sono scartati dai router di bordo e non sono mai inoltrati attraverso la rete pubblica. Come può allora un'intranet offrire servizi pubblici o collegarsi a Internet? Soluzioni: proxy applicativo, NAT, NAPT.
Proxy applicativo
Tutte le richieste sono indirizzate al proxy, che le inoltra usando il proprio indirizzo IP pubblico. La comunicazione si realizza in realtà con due connessioni TCP/IP (client-proxy e proxy-server). Svantaggio: serve un proxy per ogni applicazione.
NAT
Un Network Address Translator (NAT) si comporta come un router standard, e in più può mappare indirizzi privati in indirizzi pubblici. Al NAT è assegnato un pool di indirizzi pubblici da usare per inoltrare i messaggi nella rete pubblica. Può succedere che alcune richieste siano bloccate perché non ci sono indirizzi pubblici disponibili nel pool.
Esempio. Il pool è . L'host vuole contattare . Il pacchetto, indirizzato alla rete esterna, è intercettato dal NAT, che sostituisce la sorgente con un indirizzo del pool, : il pacchetto esce con sorgente e destinazione .
La tabella NAT
Per permettere la comunicazione bidirezionale la traduzione deve essere reversibile: l'associazione tra indirizzi pubblici e privati è registrata nella tabella NAT. Nell'esempio la riga è (): la risposta da a viene riconvertita in destinazione .
- Corrispondenza statica: un certo host è sempre associato allo stesso indirizzo pubblico. Non è praticabile: servirebbe un indirizzo pubblico per ogni host interno, e non si risparmierebbe niente (il NAT esiste proprio perché gli host sono più degli indirizzi pubblici).
- Corrispondenza dinamica: un host viene associato a uno qualsiasi degli indirizzi pubblici disponibili, su richiesta.
L'associazione dinamica si basa sul concetto di sessione: quando intercetta il primo pacchetto di un host, il NAT crea una sessione e associa l'indirizzo privato dell'host a un indirizzo pubblico; quando la sessione finisce, l'associazione si scioglie, l'indirizzo pubblico torna nel pool e può servire ad altre richieste.
Caratteristiche del NAT
- Traduzione trasparente: l'associazione (e la sua rimozione) è trasparente agli host.
- Trasparente agli algoritmi di instradamento: l'instradamento non deve sapere della traduzione.
- Traduzione dei pacchetti ICMP: i messaggi ICMP portano indirizzi IP nel corpo (Protocollo ICMPIPv4 non ha meccanismi per segnalare o correggere gli errori né per interrogare host e router: li fornisce l'ICMP (Internet Control Message Protocol), un protocollo di rete i cui messaggi viaggiano dentro datagrammi IP con campo Protocol $=1$. I messaggi sono di errore (destination unreachable, tipo 3; time exceeded, tipo 11; redirect, tipo 5; parameter problem, tipo 12), sempre inviati alla sorgente originale e con l'intestazione IP più i primi 8 byte del datagramma che ha causato l'errore, oppure di interrogazione (echo request 8 e reply 0, timestamp 13-14). ICMP segnala ma non corregge. Con l'echo si fanno ping (RTT) e scoperta dell'MTU (bit D, codice 4, payload massimo $1500-20-8=1472$ byte); con time exceeded e port unreachable si fa traceroute ($n+1$ messaggi con TTL crescente). Attacchi: smurf e redirect.Protocollo ICMP →: l'intestazione IP del datagramma errato), quindi anche questi vanno tradotti.
Tipi di NAT:
| NAT tradizionale (traditional) | NAT bidirezionale (bidirectional) |
|---|---|
| Basic NAT | Twice NAT |
| NAPT (Network Address Port Translation) |
NAT tradizionale
Detto anche NAT outbound, supporta solo le connessioni che partono dall'intranet verso Internet. Le informazioni di instradamento della rete esterna possono essere distribuite nell'intranet, non viceversa.
Basic NAT
Traduce solo l'indirizzo IP privato dell'host in un indirizzo pubblico. La corrispondenza tra indirizzo privato e pubblico è uno a uno per tutta la sessione: un indirizzo pubblico può essere usato da un solo host durante una sessione. Se gli indirizzi pubblici sono meno degli host, alcune sessioni non possono iniziare.
Come servire più sessioni con un solo indirizzo pubblico? Usare l'indirizzo pubblico del NAT per più sessioni diverse. Ma il solo indirizzo non basta: non si possono supportare più sessioni con lo stesso indirizzo pubblico del NAT. Si risolve con le porte.
NAPT
Con il NAPT (Network Address Port Translation) la traduzione riguarda anche la porta: La porta sorgente del NAT è scelta a caso tra le porte ancora disponibili del gateway abilitato NAT (Livello di trasporto - porte e multiplexingIl livello di trasporto (transport layer) offre la comunicazione logica end-to-end tra processi applicativi di host diversi, ed è realizzato solo negli host finali, non nei router. Il livello di rete consegna al computer giusto (indirizzo IP), il trasporto consegna al processo giusto (numero di porta di 16 bit, 0-65535). Una porta più un indirizzo IP formano un socket; la quaterna (IP sorgente, porta sorgente, IP destinazione, porta destinazione) identifica una connessione. I servizi sono: comunicazione processo-processo, indirizzamento, incapsulamento/decapsulamento, multiplexing/demultiplexing e, se il protocollo è affidabile, controllo di errore, di flusso e di congestione. I protocolli sono UDP (senza connessione, inaffidabile), TCP (con connessione, affidabile) e SCTP (combina i due).Livello di trasporto - porte e multiplexing →). Lo stesso IP pubblico si può usare per più sessioni, anche con lo stesso host esterno, purché il numero di porta sia diverso. Una singola coppia di indirizzo pubblico e porta distingue la sessione.
Esempio. Il NAT ha indirizzo pubblico . Due host interni aprono connessioni verso lo stesso server porta usando la stessa porta sorgente :
| privato (IP, porta) | pubblico (IP, porta del NAT) | destinazione |
|---|---|---|
| , | , | , |
| , | , | , |
Il server vede due connessioni dallo stesso IP ma da porte diverse. Alla risposta destinata a il NAT trova la riga e riconverte la destinazione in . Con lo spazio di porte - un solo IP pubblico può sostenere fino a decine di migliaia di sessioni contemporanee.
Passo per passo, per il secondo host ():
- Uscita. L'host manda un segmento con sorgente e destinazione . Il NAT, che non trova quella coppia nella tabella, crea una nuova riga scegliendo una porta libera (qui ) e riscrive la sorgente: il pacchetto esce con sorgente . Deve anche ricalcolare il checksum IP (cambia l'indirizzo) e quello TCP/UDP (che include anche gli indirizzi IP nel suo calcolo, e le porte).
- Perché serve la porta. Senza la porta le due risposte del server arriverebbero entrambe a e il NAT non saprebbe a quale host interno consegnarle: la porta è la chiave che distingue le sessioni, come il multiplexing/demultiplexing a destinazione (Livello di trasporto - porte e multiplexingIl livello di trasporto (transport layer) offre la comunicazione logica end-to-end tra processi applicativi di host diversi, ed è realizzato solo negli host finali, non nei router. Il livello di rete consegna al computer giusto (indirizzo IP), il trasporto consegna al processo giusto (numero di porta di 16 bit, 0-65535). Una porta più un indirizzo IP formano un socket; la quaterna (IP sorgente, porta sorgente, IP destinazione, porta destinazione) identifica una connessione. I servizi sono: comunicazione processo-processo, indirizzamento, incapsulamento/decapsulamento, multiplexing/demultiplexing e, se il protocollo è affidabile, controllo di errore, di flusso e di congestione. I protocolli sono UDP (senza connessione, inaffidabile), TCP (con connessione, affidabile) e SCTP (combina i due).Livello di trasporto - porte e multiplexing →). Nota che le due porte interne coincidono (): proprio per questo il NAT deve scegliere porte esterne diverse.
- Ritorno. Il server risponde con sorgente e destinazione . Il NAT cerca la porta nella tabella, trova e riscrive la destinazione: il segmento arriva all'host con destinazione . L'host non si accorge di nulla.
- Quante sessioni. Le porte sono numeri a 16 bit, valori; escludendo le porte riservate ai servizi noti (-) ne restano per le sessioni, quindi circa per ciascun indirizzo pubblico del pool. La riga si cancella a fine sessione, e la porta torna disponibile.
Limite del NAPT: una connessione che parte da fuori verso senza una riga già in tabella non sa a chi andare e viene scartata; per questo il NAPT è outbound e per i server interni servono associazioni statiche o il Twice NAT.
NAT bidirezionale: Twice NAT
Supporta l'inizio della sessione sia dall'interno sia dall'esterno. Problema: come può un host nella rete pubblica iniziare una sessione con un host nell'intranet privata senza conoscere un indirizzo pubblico con cui raggiungerlo?
Soluzione: Twice NAT, con il DNS (Livello applicazione - DNSIl DNS (Domain Name System) traduce i nomi (www.amazon.com) negli indirizzi IP, perché le persone preferiscono i nomi e i protocolli TCP/IP usano gli indirizzi. È un database distribuito e gerarchico: albero rovesciato con radice, domini di primo livello e sottodomini (al più 128 livelli); le informazioni sono su tanti server (13 server radice) e i nuovi domini si registrano presso un registrar accreditato ICANN. Ogni ISP ha un DNS locale, il cui indirizzo l'host riceve con DHCP: l'host (resolver) gli manda la richiesta, di solito su UDP, e il DNS locale interroga radice, dominio di primo livello e server dell'organizzazione. Ogni server che impara un'associazione la tiene in cache, marcando la risposta non autoritativa, e la scarta dopo il TTL. Record (nome, tipo, valore, classe, TTL). Con il NAT il DNS deve restituire l'indirizzo pubblico. Quattro attacchi: macchina compromessa, risposta falsa all'host, avvelenamento della cache del DNS locale, server DNS malevolo.Livello applicazione - DNS →) dentro l'intranet:
- il server DNS traduce il nome dell'host nei suoi indirizzi IP (per esempio un URL nel corrispondente indirizzo): per un server nell'intranet l'indirizzo è privato;
- dopo la traduzione del DNS, l'indirizzo IP viene tradotto in uno pubblico dal NAT;
- l'indirizzo pubblico è rimandato al client nella risposta DNS; di conseguenza il DNS deve stare dentro l'intranet e deve essere associato in modo statico a un indirizzo pubblico (associazione statica pubblico/privato per gli indirizzi dei DNS);
- tutte le comunicazioni successive usano quell'indirizzo pubblico, e il NAT tradizionale fa le traduzioni per raggiungere il vero server nell'intranet.
Esempio. Il client () vuole raggiungere myserver.com, che nell'intranet ha indirizzo privato :
- il client invia una richiesta DNS per
myserver.com; - il DNS dell'intranet converte il nome nell'indirizzo privato ;
- il NAT lo traduce nell'indirizzo pubblico (riga della tabella NAT: );
- la risposta DNS riporta al client : da quel momento il client spedisce i pacchetti a , e il NAT li consegna a .
Un caso numerico di piano di indirizzamento
Nella rete delle slide due router sono collegati tra loro da un collegamento punto-punto; un host con indirizzo pubblico (, il suo router ha ) è dietro il primo router, un server pubblico (, il suo router ha ) e un NAT con un host privato () sono dietro il secondo. Il collegamento tra i due router non ha bisogno di indirizzi pubblici: gli si assegna un blocco privato , con interfacce e , rete e broadcast . Gli indirizzi pubblici si riservano a ciò che deve davvero essere raggiungibile da Internet.
Versione ripasso
Gli indirizzi IPv4 sono pochi (Livello di rete e indirizzamento IPIl livello di rete (network layer) porta i datagrammi da host a host attraverso i router: incapsula (framing), sceglie il percorso (routing) e sposta il pacchetto da un ingresso a un'uscita del router (forwarding); in Internet lascia ai livelli superiori controllo d'errore, di flusso e di congestione. Un indirizzo IPv4 è di 32 bit, diviso in prefisso (rete, $n$ bit) e suffisso (host, $32-n$ bit). L'indirizzamento a classi (A, B, C, D, E) è obsoleto; oggi si usa quello senza classi (CIDR): data una notazione $a.b.c.d/n$ si ricavano $N=2^{32-n}$ indirizzi, indirizzo di rete (suffisso tutto 0) e di broadcast (suffisso tutto 1), oppure con la netmask: rete $=$ indirizzo AND maschera, broadcast $=$ indirizzo OR (NOT maschera).Livello di rete e indirizzamento IP →): oltre al CIDR e al subnetting (Subnetting e supernettingIl subnetting divide un blocco di indirizzi in sottoblocchi più piccoli allungando la maschera ($n_{\text{sub}}=n_{\text{rete}}+s$, con $2^s$ sottoreti); il supernetting (aggregazione CIDR) fa l'opposto, accorciando il prefisso per unire blocchi contigui in uno più grande. Regole di progetto: ogni sottorete ha un numero di indirizzi potenza di 2 ($M=2^k\ge$ host richiesti $+2$), prefisso $n=32-k$, indirizzo iniziale multiplo di $M$; si assegnano prima le sottoreti più grandi. Per aggregare $2^j$ blocchi di prefisso $n$ servono blocchi contigui il cui primo indirizzo sia multiplo della dimensione dell'aggregato, e il nuovo prefisso è $n-j$.Subnetting e supernetting →) si usano indirizzi privati, tradotti con il NAT.
Reti private
- Intranet: rete privata TCP/IP; Internal Gateway collegano le sottoreti, un External Gateway la collega a Internet.
- Tre blocchi privati, scartati dai router di bordo:
| classe | intervallo | indirizzi | maschera | bit host |
|---|---|---|---|---|
| A | - | 24 | ||
| B | - | 20 | ||
| C | - | 16 |
- Blocco B: secondo byte da a .
- Intranet diverse riusano gli stessi privati; per Internet serve comunque un indirizzo pubblico. Privati sempre dove possibile: punto-punto , host e , broadcast (Esercizio - sottoreti classful e sottoreti con rete privata).
- Proxy applicativo: inoltra con il proprio IP pubblico, due connessioni, uno per applicazione.
NAT
- Router che mappa privati in pubblici di un pool; pool esaurito = richiesta bloccata. Esempio: contatta , sorgente sostituita con ; la risposta torna a grazie alla tabella NAT ().
- Statica: un pubblico per host, non praticabile. Dinamica: per sessione; a fine sessione l'indirizzo torna nel pool.
- Trasparente a host e instradamento; traduce anche ICMP (Protocollo ICMPIPv4 non ha meccanismi per segnalare o correggere gli errori né per interrogare host e router: li fornisce l'ICMP (Internet Control Message Protocol), un protocollo di rete i cui messaggi viaggiano dentro datagrammi IP con campo Protocol $=1$. I messaggi sono di errore (destination unreachable, tipo 3; time exceeded, tipo 11; redirect, tipo 5; parameter problem, tipo 12), sempre inviati alla sorgente originale e con l'intestazione IP più i primi 8 byte del datagramma che ha causato l'errore, oppure di interrogazione (echo request 8 e reply 0, timestamp 13-14). ICMP segnala ma non corregge. Con l'echo si fanno ping (RTT) e scoperta dell'MTU (bit D, codice 4, payload massimo $1500-20-8=1472$ byte); con time exceeded e port unreachable si fa traceroute ($n+1$ messaggi con TTL crescente). Attacchi: smurf e redirect.Protocollo ICMP →), che porta IP nel corpo.
NAT tradizionale (outbound)
Solo connessioni dall'intranet verso Internet.
- Basic NAT: solo IP, uno a uno per sessione; pubblici meno degli host, alcune sessioni non iniziano.
- NAPT: Porta scelta tra le libere (Livello di trasporto - porte e multiplexingIl livello di trasporto (transport layer) offre la comunicazione logica end-to-end tra processi applicativi di host diversi, ed è realizzato solo negli host finali, non nei router. Il livello di rete consegna al computer giusto (indirizzo IP), il trasporto consegna al processo giusto (numero di porta di 16 bit, 0-65535). Una porta più un indirizzo IP formano un socket; la quaterna (IP sorgente, porta sorgente, IP destinazione, porta destinazione) identifica una connessione. I servizi sono: comunicazione processo-processo, indirizzamento, incapsulamento/decapsulamento, multiplexing/demultiplexing e, se il protocollo è affidabile, controllo di errore, di flusso e di congestione. I protocolli sono UDP (senza connessione, inaffidabile), TCP (con connessione, affidabile) e SCTP (combina i due).Livello di trasporto - porte e multiplexing →): un IP pubblico per molte sessioni, anche verso lo stesso host. Esempio con NAT , server : e ; la risposta a torna a .
Twice NAT
Sessioni anche dall'esterno: DNS (Livello applicazione - DNSIl DNS (Domain Name System) traduce i nomi (www.amazon.com) negli indirizzi IP, perché le persone preferiscono i nomi e i protocolli TCP/IP usano gli indirizzi. È un database distribuito e gerarchico: albero rovesciato con radice, domini di primo livello e sottodomini (al più 128 livelli); le informazioni sono su tanti server (13 server radice) e i nuovi domini si registrano presso un registrar accreditato ICANN. Ogni ISP ha un DNS locale, il cui indirizzo l'host riceve con DHCP: l'host (resolver) gli manda la richiesta, di solito su UDP, e il DNS locale interroga radice, dominio di primo livello e server dell'organizzazione. Ogni server che impara un'associazione la tiene in cache, marcando la risposta non autoritativa, e la scarta dopo il TTL. Record (nome, tipo, valore, classe, TTL). Con il NAT il DNS deve restituire l'indirizzo pubblico. Quattro attacchi: macchina compromessa, risposta falsa all'host, avvelenamento della cache del DNS locale, server DNS malevolo.Livello applicazione - DNS →) dentro l'intranet, associazione statica per i DNS. Esempio: il client cerca myserver.com (); il NAT lo traduce in , che il DNS restituisce; poi il NAT consegna a .
Caso numerico: il collegamento tra due router usa un blocco privato , interfacce e , rete , broadcast ; gli indirizzi pubblici si riservano a ciò che deve essere raggiungibile da Internet.
Errori tipici: credere che il NAT statico risparmi indirizzi; confondere Basic NAT (IP) con NAPT (IP e porta); 12 bit di host per il blocco B (sono 20).