Il NAT: la stessa busta, prima e dopo il router
L'indirizzo 192.168.1.10 non esiste su Internet: nessun router di dorsale lo instrada, perché di reti 192.168.1.0/24 nel mondo ce ne sono milioni. Il router di casa allora riscrive l'intestazione mentre il pacchetto passa. Qui vedi la stessa busta dai due lati, e la tabella che permette alla risposta di ritrovare la strada di casa.
1 · Chi manda, e verso dove
2 · La stessa busta, prima e dopo il router
La tabella NAT del router
Una riga per ogni conversazione aperta in casa. È l'unico posto al mondo dove quel legame è scritto — se la riga non c'è, la risposta non sa a chi andare.
| Quello che è partito da casa | → quello che esce sulla linea | Verso | Prova |
|---|
Ancora nessuna conversazione aperta.
Il viaggio di ritorno
La risposta arriva indirizzata al router, non a te. Ecco cosa fa il router per capire di chi è.
Come funziona
Perché serve: gli indirizzi privati
Tre blocchi di indirizzi sono riservati alle reti locali e nessun router di Internet li instrada. Sono definiti dalla RFC 1918:
| Blocco | Intervallo | Indirizzi | Uso tipico |
|---|---|---|---|
| 10.0.0.0/8 | 10.0.0.0 – 10.255.255.255 | 16.777.216 | grandi reti aziendali |
| 172.16.0.0/12 | 172.16.0.0 – 172.31.255.255 | 1.048.576 | reti medie, Docker |
| 192.168.0.0/16 | 192.168.0.0 – 192.168.255.255 | 65.536 | reti domestiche |
NAT, o meglio PAT
Quello che fa il router di casa si chiama con precisione PAT (Port Address Translation, detto anche NAPT o «NAT overload»): non traduce solo l'indirizzo, traduce la coppia indirizzo + porta. Ed è tutta lì la differenza: un indirizzo pubblico solo, diviso fra decine di dispositivi, funziona perché la porta fa da numero di interno.
La porta si riscrive solo quando serve
Questo è il punto che quasi tutti gli schemi sbagliano. Il router prova a tenere la porta sorgente che ha scelto il tuo PC: se è libera sul lato pubblico, se la tiene e non tocca niente. La riscrive solo se quel numero è già occupato da un'altra conversazione. Provalo: manda dal PC con la porta 51274, poi manda dal telefono con la stessa porta 51274. La prima passa intatta, la seconda viene rinumerata — ed è esattamente il momento in cui capisci a cosa serve la tabella.
Il router è comunque un salto
Nel confronto qui sopra cambiano anche due campi che con il NAT non c'entrano: il TTL scende di 1 (il router è un salto come tutti gli altri) e il checksum va ricalcolato — perché è la firma dei byte dell'intestazione, e quei byte sono appena cambiati. Un router che riscrivesse gli indirizzi senza rifare il checksum produrrebbe pacchetti che il primo apparato a valle butterebbe via. Il numero che vedi è un conto vero, non un segnaposto: è la somma a complemento a uno su 16 bit degli indirizzi e del TTL, la stessa aritmetica del checksum IP. E c'è un secondo checksum da rifare, quello di TCP: nel calcolarlo TCP include gli indirizzi IP (si chiama pseudo-intestazione), quindi il NAT costringe a rifare anche quello — un livello che tocca i conti del livello sopra, cosa che a rigore non dovrebbe succedere.
Dall'esterno non si entra
Prova il pulsante «qualcuno bussa da fuori»: il pacchetto arriva al tuo indirizzo pubblico, il router cerca la riga corrispondente, non la trova e lo scarta. Non è cattiveria: non saprebbe a chi consegnarlo. Due conseguenze — per ospitare un server in casa serve il port forwarding (una riga scritta a mano, che esiste prima che arrivi il pacchetto), e il NAT si comporta di fatto come un firewall passivo. Non è stato progettato per proteggere: protegge per effetto collaterale.
Da dove viene l'indirizzo pubblico
Domanda giusta, perché il NAT non crea nessun indirizzo: ne condivide uno che esiste già. Il router, sul suo lato esterno, è a sua volta un cliente della rete dell'operatore, e riceve il proprio indirizzo pubblico esattamente come il tuo PC riceve quello privato — vedi Il Gioco del DHCP. Il pubblico arriva da fuori, uno per linea; il NAT si limita a farlo bastare per tutta la casa.
Quindi quel numero non si calcola: non c'è nessuna formula che da 192.168.1.10 produca l'indirizzo pubblico. È semplicemente il valore che il router ha sulla sua seconda scheda di rete, quella rivolta all'operatore — il riquadro giallo in cima alla pagina — e il NAT si limita a copiarlo dentro la busta. Preme il pulsante «l'operatore ne assegna un altro» e lo vedi: cambia, e non cambia nient'altro nella logica.
Gli indirizzi pubblici usati qui (203.0.113.7, 198.51.100.23, 192.0.2.146) vengono dai tre blocchi che la RFC 5737 riserva alla documentazione, esattamente come la RFC 1918 riserva i privati alle reti locali. Servono a scrivere esempi senza citare l'indirizzo di qualcuno che esiste davvero: su Internet non rispondono, e non risponderanno mai.
Un tampone, non una soluzione
Il NAT è nato per la scarsità di indirizzi IPv4: 32 bit fanno al massimo 2³² ≈ 4,3 miliardi di indirizzi, meno dei dispositivi collegati oggi. È il problema che IPv6 risolve alla radice. E dove nemmeno il NAT basta, molti operatori ne aggiungono un secondo livello sulla propria rete — il CGNAT, che usa il blocco 100.64.0.0/10: in quel caso nemmeno l'indirizzo «pubblico» del tuo router è davvero pubblico, e il pacchetto viene tradotto due volte.
Si può vedere per davvero
La tabella qui sopra esiste anche a casa tua. Il posto vero è il pannello del router: cerca una pagina «Connessioni attive», «Sessioni» o «Connection list». Dal PC ne vedi la tua metà, con netstat -ano su Windows o ss -tan su Linux: ogni riga lì ha la sua riga gemella nella tabella del router.
Questa è la Fase 2, quella in cui il pacchetto lascia la rete di casa. Prima viene la domanda «stessa rete o no?», che si risolve con un conto in Il messaggio in numeri e si progetta con IP & Subnet Calc; dopo comincia il viaggio fra i router, raccontato in Come i router si dicono le strade.
Ripetizioni e tutoring con un docente di ruolo
Matematica, fisica e informatica. Un metodo, non solo esercizi: si parte da come funziona.