Capitolo 1 - Introduzione a Network Address Translation

La necessità di Network Address Translation

NAT (IP Network Address Translation) è stato originariamente sviluppato per risolvere il problema di un numero limitato di indirizzi IPv4 Internet. La necessità di NAT si verifica quando più dispositivi devono accedere a Internet, ma solo un indirizzo Internet IPv4 viene assegnato dal provider di servizi Internet (ISP).

Esistono anche altri vantaggi dell'uso di NAT. La topologia di rete all'esterno del dominio locale può cambiare in molti modi. I clienti possono cambiare provider, backbone aziendali possono essere riorganizzati o i provider possono unire o dividere. Ogni volta che cambia la topologia esterna, anche le assegnazioni di indirizzi per gli host all'interno del dominio locale devono cambiare per riflettere queste modifiche esterne. Le modifiche di questo tipo possono essere nascoste agli utenti all'interno del dominio centralizzando le modifiche apportate a un singolo router di conversione degli indirizzi. NAT consente l'accesso per gli host locali alla rete Internet pubblica e li protegge dall'accesso diretto dall'esterno. Le organizzazioni con una configurazione di rete prevalentemente per l'uso interno, con una necessità di accesso esterno occasionale sono buoni candidati per questo schema.

Conversione della porta di indirizzi di rete e NAT di base

Viene installato un router abilitato per NAT tra la rete pubblica e la rete privata. Il ruolo del router abilitato per NAT consiste nel tradurre tra gli indirizzi IPv4 privati interni e l'indirizzo IPv4 pubblico assegnato, quindi tutti i dispositivi nella rete privata sono in grado di condividere lo stesso indirizzo IPv4 pubblico.

Nell'implementazione di base di NAT, il router NAT è proprietario di uno o più indirizzi IP registrati a livello globale diversi dal proprio indirizzo IP. Questi indirizzi globali sono disponibili per l'assegnazione agli host nella rete privata in modo statico o dinamico. NAPT o Network Address Port Translation è una variante di NAT di base, in cui la conversione degli indirizzi di rete viene estesa per includere un identificatore di trasporto. In genere si tratta del numero di porta per i pacchetti TCP e UDP e dell'ID query per i pacchetti ICMP.

Le connessioni attraverso il limite NAT vengono in genere avviate dagli host nella rete privata che inviano pacchetti in uscita a un host esterno. Questi host vengono in genere assegnati indirizzi IP dinamici (temporanei) a questo scopo. Tuttavia, è anche possibile che le connessioni vengano avviate nella direzione opposta se la rete privata dispone di "server", ad esempio server HTTP o FTP che accetteranno le richieste client dalla rete esterna. NAT in genere assegnerà a questi host locali un indirizzo IP statico (permanente): porta.

Funzionamento di Network Address Translation

Una configurazione di rete tipica con un router abilitato per NAT è illustrata nella figura 1.

Configurazione di rete tipica con un router abilitato per NAT

Figura 1 - Configurazione di rete tipica con un router abilitato per NAT

Un router abilitato per NAT ha in genere due interfacce di rete. Un'interfaccia è connessa alla rete Internet pubblica; l'altro è connesso alla rete privata. Un router tipico in questa configurazione è responsabile del routing di datagrammi IP tra la rete privata e la rete pubblica in base all'indirizzo IP di destinazione. Un router abilitato per NAT esegue la conversione degli indirizzi prima di instradare un datagramma IPv4 tra il pubblico e l'interfaccia privata. Viene stabilita una conversione per ogni sessione TCP o UDP, in base all'indirizzo di origine interno, al numero di porta di origine e all'indirizzo di destinazione esterno e al numero di porta di destinazione. Per l'echo request e il datagram di risposta ICMP, viene usato l'ID della query ICMP anziché il numero di porta.

Per illustrare un'implementazione tipica di Network Address Translation, si consideri una configurazione di rete nella figura 2.

Implementazione tipica di Network Address Translation

Figura 2 - Implementazione tipica di Network Address Translation

In questo scenario, il router NAT connette la rete privata a sinistra e la rete pubblica a destra. Si supponga che sul lato della rete pubblica l'indirizzo IP dell'interfaccia del router NAT sia 202.151.25.14; nell'interfaccia di rete privata, il router NAT usa l'indirizzo IP 192.168.1.254. Un nodo nella rete privata avvia una connessione TCP con un server Web su Internet.

La figura 3 mostra una visualizzazione generale del processo di traduzione degli indirizzi di rete.

Visualizzazione generale del processo di traduzione degli indirizzi di rete

Figura 3 - Panoramica generale del processo di traduzione degli indirizzi di rete

  1. Il client trasmette un messaggio TCP SYN al server Web. L'indirizzo del mittente è 192.168.1.15, numero di porta 6732; l'indirizzo di destinazione è 128.15.54.3, numero di porta 80.

  2. Il pacchetto dal client viene ricevuto nell'interfaccia di rete privata dal router NAT. La regola del traffico in uscita si applica al pacchetto: l'indirizzo del mittente (client) viene convertito nell'indirizzo IP pubblico del router NAT 202.15.25.14 e il numero di porta di origine del mittente (client) viene convertito nel numero di porta TCP 2015 nell'interfaccia pubblica.

  3. Il pacchetto viene quindi trasmesso tramite Internet e infine raggiunge l'host di destinazione 128.15.54.3. Si noti che sul lato ricevente, in base all'indirizzo di origine del livello IP e al numero di porta del livello TCP, il pacchetto sembra avere avuto origine dalla versione 202.151.24.14, numero di porta 2015. La figura 4 mostra il processo NAT nel percorso restituito.

    Processo NAT nel percorso restituito

    Figura 4 - Processo NAT nel percorso restituito

  4. In questo scenario, l'host Internet 128.15.54.3 invia un pacchetto di risposta con l'indirizzo Internet del router NAT come destinazione.

  5. Il pacchetto raggiunge il router NAT. Poiché si tratta di un pacchetto associato, si applicano le regole di conversione associate: l'indirizzo di destinazione viene nuovamente modificato nell'indirizzo IP del mittente originale (client): 192.168.1.15, numero di porta di destinazione 6732.

  6. Il pacchetto viene quindi inoltrato al client tramite l'interfaccia connessa alla rete interna.

In questo modo l'indirizzo di rete Internet e il numero di porta del mittente non sono esposti ad altri host sulla rete Internet pubblica.

Funzionalità NAT di NetX Duo

Quando l'istanza NAT viene creata usando nx_nat_create chiamata, viene creata la tabella nat translation.

UINT nx_nat_create(NX_NAT_DEVICE *nat_ptr, NX_IP *ip_ptr,
    UINT global_interface_index,
    VOID *dynamic_cache_memory,
    UINT dynamic_cache_size);

Per tenere traccia delle traduzioni degli indirizzi di rete per tutte le connessioni attive tra reti locali ed esterne, il router abilitato per NAT NetX Duo gestisce una tabella di conversione con informazioni su ogni connessione host privata che include l'indirizzo IP di origine e di destinazione e il numero di porta.

La posizione di questa tabella di traduzione ("cache") viene impostata con il puntatore dynamic_cache_memory. Questa area deve essere uno spazio buffer allineato a 4 byte. Le dimensioni della tabella (o numero di voci) sono determinate dividendo le dimensioni della cache dynamic_cache_size in base alle dimensioni di una voce di tabella NAT. La tabella deve essere sufficientemente grande per il numero minimo di voci specificate da NX_NAT_MIN_ENTRY_COUNT definito in nx_nat.h. Il valore predefinito è 3.

Il timeout per tutte le voci dinamiche nella tabella di conversione NAT netX Duo viene inizializzato in NX_NAT_ENTRY_RESPONSE_TIMEOUT definito in nx_nat.h. Il valore predefinito è 4 minuti (o 240 tick di sistema per un processore a 100 mHz) come consigliato da RFC 2663. Ogni volta che NetX Duo NAT riceve o invia un pacchetto corrispondente a una voce dinamica nella tabella, reimposta il timeout della voce in NX_NAT_ENTRY_RESPONSE_TIMEOUT. Durante la ricerca nella tabella, NetX Duo NAT controlla anche la tabella per le voci scadute ed eliminarle.

Per creare voci in ingresso come statiche nella tabella, ad esempio per i server nella rete locale, NetX Duo NAT fornisce il servizio nx_nat_inbound_entry_create . Se una voce di tabella definisce la connessione host locale come statica, non scade mai.

UINT nx_nat_inbound_entry_create(NX_NAT_DEVICE *nat_ptr,
    NX_NAT_TRANSLATION_ENTRY *entry_ptr,
    ULONG local_ip_address, USHORT external_port,
    USHORT local_port, UCHAR protocol);

Questo servizio è descritto in modo più dettagliato nel capitolo 4 - Descrizione dei servizi

Durante il runtime, se la tabella di traduzione è piena e non è possibile aggiungere altre voci, NetX Duo NAT invia una notifica all'applicazione NAT con un callback completo della cache se ne viene registrato uno con l'istanza NAT. Questa operazione viene eseguita usando il servizio nx_nat_cache_notify_set :

UINT nx_nat_cache_notify_set(NX_NAT_DEVICE *nat_ptr,
    VOID (*cache_full_notify_cb)(NX_NAT_DEVICE *nat_ptr));

Per altri dettagli su questo servizio, vedere capitolo 4 - Descrizione dei servizi .

Elaborazione di pacchetti NAT in NetX Duo

NetX Duo NAT è destinato all'uso in un router IPv4. Per consentire il funzionamento di NAT, NetX Duo deve essere configurato per l'inoltro di pacchetti al server NAT. Per informazioni su come eseguire questa operazione, vedere il capitolo 2 sull'installazione di NETX Duo NAT. Il server NAT indica quindi se "utilizzerà" (tentativo di inoltrare) il pacchetto a un host in una delle reti. Se non utilizzerà il pacchetto, il pacchetto viene "restituito" a NetX Duo per elaborare il pacchetto come di consueto.

Quando il server NAT riceve un pacchetto da inoltrare da NetX Duo, determina se il pacchetto è in ingresso o in uscita.

Per i pacchetti in uscita, il server NAT controlla l'indirizzo di origine e la porta dell'intestazione IP del pacchetto. Se la tabella di conversione non contiene una voce per un pacchetto inviato in precedenza da questo host per la stessa destinazione, NAT creerà una nuova voce che conterrà un indirizzo IP di origine globale univoco:porta per la connessione e modificherà le intestazioni dei pacchetti con questo nuovo indirizzo IP:porta prima di inviarlo alla rete esterna.

Per i pacchetti in ingresso, il server NAT cerca una voce precedente nella tabella di conversione con un indirizzo IP esterno: porta corrispondente all'indirizzo IP di destinazione del pacchetto: porta. Se non viene trovata alcuna corrispondenza, il pacchetto verrà eliminato a meno che l'indirizzo di destinazione: la porta sia l'indirizzo esterno per il server nella rete locale. Se trova una corrispondenza, sostituirà l'indirizzo IP di destinazione esterno dell'intestazione del pacchetto: porta con l'indirizzo IP privato: porta e invierà il pacchetto nella rete locale all'host privato previsto.

NetX Duo NAT usa una gamma di porte di conversione TCP, UDP e ICMP per creare un indirizzo locale univoco: connessioni di porta per gli host locali che si connettono con host esterni. Le opzioni configurabili dall'utente seguenti, definite in nx_nat.h, definiscono l'intervallo per ogni protocollo:

NX_NAT_START_TCP_PORT

NX_NAT_END_TCP_PORT

NX_NAT_START_UDP_PORT

NX_NAT_END_UDP_PORT

NX_NAT_START_ICMP_QUERY_ID

NX_NAT_END_ICMP_QUERY_ID

Requisiti e vincoli NAT

NetX Duo NAT richiede NetX Duo 5.8 o versione successiva. L'applicazione NAT richiede la creazione di una singola istanza IP e un'interfaccia alla rete fisica interna ed esterna.

Vincoli:

  • NetX Duo NAT supporta TCP, UDP e ICMP. IGMP non è supportato.
  • NetX Duo NAT non supporta l'indirizzamento IPv6.
  • NetX Duo NAT non include servizi DNS o DHCP, anche se NetX Duo NAT può integrare tali servizi con le operazioni NAT.

RFC supportate da NETX Duo NAT

L'implementazione nat di NetX Duo si basa sulle informazioni presentate nelle schede di interfaccia di rete seguenti:

  • RFC 2663: Terminologia e considerazioni su NAT (IP Network Address Translator)
  • RFC 3022: Tradizionale IP Netowrk Address Translator (NAT tradizionale)
  • RFC 4787: Requisiti comportamentali NAT (Network Address Translation) per UNICAst UDP