NAT, spazi privati e port forwarding
Il NAT che tutti chiamano semplicemente "NAT" è in realtà NAPT (Network Address and Port Translation): non traduce solo l'indirizzo, ma anche la porta di origine. È quel dettaglio a permettere a decine di dispositivi di condividere un unico indirizzo pubblico.
Gli spazi riservati
10.0.0.0/8— 16,7 milioni di indirizzi, tipico delle reti aziendali172.16.0.0/12— un milione di indirizzi, usato spesso in virtualizzazione e container192.168.0.0/16— 65 mila indirizzi, lo standard di fatto delle reti domestiche100.64.0.0/10— spazio condiviso per il CGNAT (RFC 6598): non è privato in senso stretto, è riservato agli operatori169.254.0.0/16— autoconfigurazione: se vedi un indirizzo così, il DHCP non ha risposto
Sono definiti dalla RFC 1918. I router Internet li scartano per definizione: un pacchetto con indirizzo sorgente privato non deve uscire dalla rete locale, e i provider filtrano in questo senso (BCP 38).
Come funziona la traduzione
Quando un dispositivo interno apre una connessione, il router sostituisce indirizzo e porta di origine con il proprio indirizzo pubblico e una porta scelta da lui, e annota la corrispondenza in una tabella di stato. Al ritorno del pacchetto legge la porta di destinazione, ritrova la riga e riconsegna al dispositivo giusto.
Perché il traffico in ingresso è il problema
La tabella si crea solo quando è un dispositivo interno ad avviare la connessione. Un pacchetto che arriva dall'esterno senza una riga corrispondente non ha una destinazione: il router lo scarta. È un effetto collaterale del NAT che di fatto funziona da barriera, ma non è un firewall e non va confuso con uno.
Per esporre un servizio interno servono regole esplicite:
- Port forwarding — si stabilisce che le richieste in arrivo su una certa porta pubblica vadano a un indirizzo interno preciso. Richiede un IP interno stabile, quindi conviene riservarlo nel DHCP
- UPnP / NAT-PMP / PCP — le applicazioni chiedono da sole l'apertura di una porta. Comodo, ma qualsiasi programma della rete può farlo: sulle reti che ospitano servizi delicati conviene disattivarlo
- DMZ — inoltra tutto il traffico non altrimenti assegnato a un unico host. Da evitare se non si sa esattamente cosa comporta
I tipi di NAT e perché contano
Non tutti i NAT si comportano allo stesso modo con il traffico non richiesto. La distinzione (RFC 4787) incide su videochiamate, giochi in rete e collegamenti diretti fra dispositivi:
- Full cone — una volta aperta la porta, chiunque può usarla per raggiungere l'host interno
- Restricted cone — solo l'indirizzo con cui si è già comunicato
- Port restricted — solo quella coppia indirizzo e porta
- Symmetric — a ogni destinazione diversa corrisponde una porta esterna diversa: è il caso peggiore per i collegamenti diretti, e obbliga a passare da un server intermedio (TURN)
È il motivo per cui una videochiamata a volte funziona in modo diretto e a volte transita da un server, con più ritardo.
Il limite dei numeri
Le porte disponibili sono circa 64.000 per indirizzo pubblico. Basta e avanza per una casa, ma non quando un operatore fa condividere lo stesso indirizzo a decine di clienti: è la situazione del CGNAT, dove il problema non è più solo esporre un servizio, ma anche l'esaurimento delle porte disponibili.
In IPv6 il NAT non serve, perché ogni dispositivo ha un indirizzo pubblico proprio. La protezione dal traffico non richiesto torna a essere compito del firewall, che è il posto giusto in cui stare.
Comandi utili
ip route get 8.8.8.8— quale interfaccia e quale gateway vengono usati per uscireconntrack -L(Linux) — le connessioni tradotte in questo momentocurl -s mioip.org/ip— l'indirizzo pubblico con cui esci davvero, utile per confrontarlo con quello attesonetstat -rn·route print— tabella di instradamento locale
Vuoi vedere il tuo indirizzo IP in questo momento?
Mostra il mio IP