Salta al contenuto
Note per Studenti NAT e indirizzi privati

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 10.0.0.010.0.0.0 - 10.255.255.25510.255.255.255 16 777 21616\,777\,216 255.0.0.0255.0.0.0 (/8/8) 24
B 172.16.0.0172.16.0.0 - 172.31.255.255172.31.255.255 1 048 5761\,048\,576 255.240.0.0255.240.0.0 (/12/12) 20
C 192.168.0.0192.168.0.0 - 192.168.255.255192.168.255.255 65 53665\,536 255.255.0.0255.255.0.0 (/16/16) 16

(Nelle slide per il blocco B il numero di bit di HostID è scritto 12; con maschera /12 i bit di host sono 32−12=2032-12=20, coerentemente con 220=1 048 5762^{20}=1\,048\,576 indirizzi.)

Esempio. 172.31.255.255172.31.255.255 è l'ultimo indirizzo del blocco B privato: 172.16.0.0172.16.0.0 con /12/12 copre i secondi byte da 1616 a 3131 (16=00010000216=00010000_2, i 4 bit di prefisso nel secondo byte sono 00010001, quindi il secondo byte va da 00010000=1600010000=16 a 00011111=3100011111=31). Controllo sul conteggio: i secondi byte possibili sono 31−16+1=16=2431-16+1=16=2^4 e per ciascuno restano i 1616 bit degli ultimi due byte, cioè 16⋅65 536=24⋅216=220=1 048 57616\cdot65\,536=2^4\cdot2^{16}=2^{20}=1\,048\,576 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 172.20.5.1172.20.5.1 con maschera 255.240.0.0255.240.0.0: il secondo byte è 20=0001010020=00010100, AND 11110000=00010000=1611110000=00010000=16, quindi 172.16.0.0172.16.0.0: è privato. Per 172.32.5.1172.32.5.1: 32=0010000032=00100000, AND 11110000=00100000=3211110000=00100000=32, quindi 172.32.0.0≠172.16.0.0172.32.0.0\neq172.16.0.0: non è privato (è pubblico, perché il blocco finisce a 172.31.255.255172.31.255.255).

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 /30/30: 10.0.0.0/3010.0.0.0/30 ha rete 10.0.0.010.0.0.0, host 10.0.0.110.0.0.1 e 10.0.0.210.0.0.2, broadcast 10.0.0.310.0.0.3, 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 è 131.175.13.12, 131.175.13.23, 131.175.13.55,…131.175.13.12,\ 131.175.13.23,\ 131.175.13.55,\dots. L'host 10.24.1.17710.24.1.177 vuole contattare 145.13.2.34145.13.2.34. Il pacchetto, indirizzato alla rete esterna, è intercettato dal NAT, che sostituisce la sorgente 10.24.1.17710.24.1.177 con un indirizzo del pool, 131.175.13.55131.175.13.55: il pacchetto esce con sorgente 131.175.13.55131.175.13.55 e destinazione 145.13.2.34145.13.2.34.

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 è (10.24.1.177↔131.175.13.5510.24.1.177\leftrightarrow131.175.13.55): la risposta da 145.13.2.34145.13.2.34 a 131.175.13.55131.175.13.55 viene riconvertita in destinazione 10.24.1.17710.24.1.177.

  • 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

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: [IP privato, porta sorgente] ⟶ [IP pubblico, porta sorgente del NAT].[\text{IP privato},\ \text{porta sorgente}]\ \longrightarrow\ [\text{IP pubblico},\ \text{porta sorgente del NAT}]. 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 131.175.13.55131.175.13.55. Due host interni aprono connessioni verso lo stesso server 145.13.2.34145.13.2.34 porta 8080 usando la stessa porta sorgente 50005000:

privato (IP, porta) pubblico (IP, porta del NAT) destinazione
10.0.0.210.0.0.2, 50005000 131.175.13.55131.175.13.55, 4000140001 145.13.2.34145.13.2.34, 8080
10.0.0.310.0.0.3, 50005000 131.175.13.55131.175.13.55, 4000240002 145.13.2.34145.13.2.34, 8080

Il server vede due connessioni dallo stesso IP ma da porte diverse. Alla risposta destinata a 131.175.13.55:40002131.175.13.55{:}40002 il NAT trova la riga e riconverte la destinazione in 10.0.0.3:500010.0.0.3{:}5000. Con lo spazio di porte 00-65 53565\,535 un solo IP pubblico può sostenere fino a decine di migliaia di sessioni contemporanee.

Passo per passo, per il secondo host (10.0.0.310.0.0.3):

  1. Uscita. L'host manda un segmento con sorgente 10.0.0.3:500010.0.0.3{:}5000 e destinazione 145.13.2.34:80145.13.2.34{:}80. Il NAT, che non trova quella coppia nella tabella, crea una nuova riga scegliendo una porta libera (qui 4000240002) e riscrive la sorgente: il pacchetto esce con sorgente 131.175.13.55:40002131.175.13.55{:}40002. 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).
  2. Perché serve la porta. Senza la porta le due risposte del server arriverebbero entrambe a 131.175.13.55131.175.13.55 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 (50005000): proprio per questo il NAT deve scegliere porte esterne diverse.
  3. Ritorno. Il server risponde con sorgente 145.13.2.34:80145.13.2.34{:}80 e destinazione 131.175.13.55:40002131.175.13.55{:}40002. Il NAT cerca la porta 4000240002 nella tabella, trova 10.0.0.3:500010.0.0.3{:}5000 e riscrive la destinazione: il segmento arriva all'host con destinazione 10.0.0.3:500010.0.0.3{:}5000. L'host non si accorge di nulla.
  4. Quante sessioni. Le porte sono numeri a 16 bit, 216=65 5362^{16}=65\,536 valori; escludendo le 10241024 porte riservate ai servizi noti (00-10231023) ne restano 64 51264\,512 per le sessioni, quindi circa 6,4⋅1046{,}4\cdot10^4 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 131.175.13.55:40002131.175.13.55{:}40002 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 (204.51.16.12204.51.16.12) vuole raggiungere myserver.com, che nell'intranet ha indirizzo privato 10.0.0.20710.0.0.207:

  1. il client invia una richiesta DNS per myserver.com;
  2. il DNS dell'intranet converte il nome nell'indirizzo privato 10.0.0.20710.0.0.207;
  3. il NAT lo traduce nell'indirizzo pubblico 194.54.21.6194.54.21.6 (riga della tabella NAT: 10.0.0.207↔194.54.21.610.0.0.207\leftrightarrow194.54.21.6);
  4. la risposta DNS riporta al client 194.54.21.6194.54.21.6: da quel momento il client spedisce i pacchetti a 194.54.21.6194.54.21.6, e il NAT li consegna a 10.0.0.20710.0.0.207.

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 (130.12.13.1/16130.12.13.1/16, il suo router ha 130.12.13.2/16130.12.13.2/16) è dietro il primo router, un server pubblico (118.98.76.3/8118.98.76.3/8, il suo router ha 118.98.76.4/8118.98.76.4/8) e un NAT con un host privato (192.168.0.1/24192.168.0.1/24) sono dietro il secondo. Il collegamento tra i due router non ha bisogno di indirizzi pubblici: gli si assegna un blocco privato /30/30, con interfacce 10.0.0.1/3010.0.0.1/30 e 10.0.0.2/3010.0.0.2/30, rete 10.0.0.0/3010.0.0.0/30 e broadcast 10.0.0.3/3010.0.0.3/30. 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 10.0.0.010.0.0.0 - 10.255.255.25510.255.255.255 16 777 21616\,777\,216 /8/8 24
B 172.16.0.0172.16.0.0 - 172.31.255.255172.31.255.255 1 048 5761\,048\,576 /12/12 20
C 192.168.0.0192.168.0.0 - 192.168.255.255192.168.255.255 65 53665\,536 /16/16 16
  • Blocco B: secondo byte da 00010000=1600010000=16 a 00011111=3100011111=31.
  • Intranet diverse riusano gli stessi privati; per Internet serve comunque un indirizzo pubblico. Privati sempre dove possibile: punto-punto 10.0.0.0/3010.0.0.0/30, host 10.0.0.110.0.0.1 e 10.0.0.210.0.0.2, broadcast 10.0.0.310.0.0.3 (Esercizio - sottoreti classful e sottoreti con rete privata).
  • Proxy applicativo: inoltra con il proprio IP pubblico, due connessioni, uno per applicazione.

NAT

NAT tradizionale (outbound)

Solo connessioni dall'intranet verso Internet.

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 204.51.16.12204.51.16.12 cerca myserver.com (10.0.0.20710.0.0.207); il NAT lo traduce in 194.54.21.6194.54.21.6, che il DNS restituisce; poi il NAT consegna a 10.0.0.20710.0.0.207.

Caso numerico: il collegamento tra due router usa un blocco privato /30/30, interfacce 10.0.0.1/3010.0.0.1/30 e 10.0.0.2/3010.0.0.2/30, rete 10.0.0.0/3010.0.0.0/30, broadcast 10.0.0.3/3010.0.0.3/30; 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).

Esercizi su questo argomento

Lezioni in cui compare

Teoria collegata