CGN – Carrier Grade NAT con RouterOS

La politica di assegnazione degli indirizzi IPv4 è stata basata inizialmente sul principio del “first came first served“; dal 2012, a seguito del repentino esaurimento degli indirizzi IPv4 e contemporaneo aumento dei dispositivi connessi, non sono stati più assegnati nuovi indirizzi IPv4 ad ISP già registrati ai RIR (Regional Internet Registry), riservando le subnet residue a nuovi ISP con assegnazione univoca di subnet /22 fino al completo esaurimento degli spazi, avvenuto a novembre 2019.

All’approssimarsi dell’esaurimento degli indirizzi IPv4 in ambito internazionale si è scelto di allargare le capacità di indirizzamento passando all’IPv6, indirizzo costituito da 128 bit suddiviso in 8 gruppi di 4 numeri esadecimali.
La transizione verso l’IPv6 non è tuttavia così rapida, sia poiché l’indirizzamento IPv4 non è direttamente compatibile con quello IPv6, sia per la mancanza di vincoli e scadenze che hanno contribuito a far considerare di bassa priorità tutti gli interventi finalizzati all’attivazione dell’IPv6.

Le problematiche di esaurimento degli indirizzi IPv4 e la transizione all’IPv6 sono da tempo oggetto di approfondimento, anche nell’ambito dell’Osservatorio per la sicurezza delle reti e delle comunicazioni, istituito presso il Ministero dello sviluppo economico.

Quali sono quindi le possibili soluzioni per affrontare il problema dell’esaurimento degli indirizzi IPv4 in Italia, visto anche l’attuale quadro normativo che obbliga gli operatori a dover rispettare le stringenti disposizioni del decreto legislativo n. 109/2008 (cd decreto Frattini), art. 96 del Codice delle comunicazioni (Dlgs. n. 259/2003) in tema di prestazioni obbligatorie e le disposizioni dettate dal Garante della privacy in tema di tempi e modalità di conservazione dei dati di traffico telematico (art. 132 del Dlgs. n. 196/2003)?

Una possibile soluzione esiste ed è il Carrier Grade NAT – CGN o anche NAT444.

Da dove arriva Carrier Grade NAT

Il Carrier Grade NAT ( CGN ) è un approccio alla progettazione delle reti IPv4 in cui i nodi finali, in particolare le reti residenziali, sono configurati con indirizzi di rete privata che vengono tradotti in indirizzi IPv4 pubblici, permettendo la condivisione di subnet di indirizzi pubblici tra molti clienti.

Regolamentato tramite RFC6598, sfrutta l’utilizzo di particolari strumenti di NAT, che non implementano il classico rapporto uno a molti,  ma quello di uno ad un insieme molto ridotto, misurato in termini di massimo “rapporto di condivisione” (numero massimo di utenti che possono contemporaneamente condividere lo stesso indirizzo IPv4); lo standard impone un limite numerico e temporale al rapporto di condivisione, diversificandolo inoltre tra reti fisse e reti mobili. Le condizioni suggerite per l’utilizzazione del Carrier Grade Nat sono le seguenti:

  • NAT con allocazione di blocchi di porte;
  • diverso rapporto di condivisione per fisso e mobile: 1:8-1:16 per il fisso, 1:32-64 per il mobile;
  • obbligo per gli ISP di tenere traccia della porta sorgente;
  • registrazione del momento (data ed ora locale) in cui l’indirizzo viene allocato e del momento in cui viene de-allocato

Lo scenario d’uso di CGN è stato etichettato come NAT444 , perché in questa architettura i collegamenti dei clienti per i servizi Internet passano attraverso tre diversi ambiti di indirizzamento IPv4: la rete privata del cliente, la rete privata dell’ISP e l’indirizzo pubblico di Internet.

Lo spazio di indirizzamento privato riservato agli ISP per fare CGNAT è la subnet 100.64.0.0/10. Un ulteriore standard, RFC 7422, per evitare l’obbligo di tener traccia ai fini dei log delle mappature effettuate sulle porte, suggerisce di utilizzare una mappatura delle porte deterministica. Ad ogni indirizzo ip privato sarà quindi assegnato un range di porte “statico” su un determinato indirizzo ip pubblico.

Visto il numero di porte TCP/UDP disponibili, pari a 65.535, occorre sottrarre le prime 1024 porte (che sono ad uso riservato) per ottenere il numero di porte effettivamente utilizzabili per il CGNAT, 64511.

Questo numero è poi da dividere per il “rapporto di condivisione”, ossia per quanti utenti si vuole abbinare lo steso ip pubblico. Ad esempio, nel caso di rapporto 1:16 e 1:64 si ottengono i risultati seguenti:

  • 1:16 = 4K porte ad utente
  • 1:64 = 1K porte ad utente

In questa configurazione quindi il singolo cliente condividerà l’indirizzo IPv4 Pubblico con altre N utenze, su Port Range differenti, andando ad ottimizzare e rendere univoca anche in termini di tracciabilità la navigazione del cliente.

Implemetazione di Carrier Grade NAT su RouterOS

L’implementare di CGNAT su apparati Mikrotik ed in generale su sistemi operativi RouterOS è fattibile mediante la configurazione di particolari regole di firewall – https://wiki.mikrotik.com/wiki/Manual:IP/Firewall/NAT. Esistono due diversi metodi per l’implementazione:

Metodo 1

La soluzione più semplice è quella di implementare 3 diverse regole di NAT per ogni cliente, una relativa al traffico TCP, una al traffico UDP e l’ultima per altri protocolli.

Per ogni cliente, e relativo indirizzo IPv4 privato, saranno da scegliere un indirizzo IPv4 pubblico sul quale mapparlo ed il range di porte da dedicare. La soluzione è flessibile e di facile configurazione ma richiede la predisposizione di un numero di regole di firewall pari al triplo dei clienti che si vuole gestire sotto NAT.

Mediante automatismi e script è possibile agevolare il compito di creazione di tutte le NAT, ma resta comunque elevato il numero di regole che il router dovrà gestire, soprattutto alla crescita del parco clienti.

Metodo 2

La seconda soluzione implementativa prevede l’utilizzo dell’opzione “netmap” che permette di nattare e traslare una subnet su un’altra. Supponendo di predisporre uno sharing ratio di 1:64 e di dedicare una subnet /24 di indirizzi IPv4 Pubblici per le nat, lo schema di mappatura sarà il seguente:

Con le ipotesi di sharing ratio ed estensione della subnet pubblica su indicate si potranno servire sino a 16.256 clienti con indirizzamento privato. Considerando inoltre il possibile utilizzo come indirizzi IPv4 pubblici anche dell’IP .0 e .255 il numero di clienti totali può arrivare a 64 x 256 = 16.384.

In questo caso il numero di regole necessarie per l’implementazione del sistema è solo di 64 x 2 +1 = 129.


In questa seconda configurazione le richieste che dall’esterno rientrano aventi come destinazione uno degli ip pubblici della subnet /24 dedicata al CGNAT non avranno una route corrispondente che inoltra il traffico verso l’interno e nemmeno in locale (a meno di non andare a configurare gli ip sulla loopback locale).

Occorre dunque predisporre la configurazione di una route di blackhole per l’intera classe, così da evitare un loop in termini di routine tra Gateway e router NAT.