Capitolo 1 - Introduzione alla traduzione degli indirizzi di rete

La necessità di traduzione degli indirizzi di rete

Ip Network Address Translation (NAT) è stato originariamente sviluppato per risolvere il problema di un numero limitato di indirizzi Internet IPv4. 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 modificare i provider, i backbone aziendali possono essere riorganizzati o i provider possono unire o dividere. Ogni volta che la topologia esterna cambia, le assegnazioni di indirizzi per gli host all'interno del dominio locale devono anche cambiare in modo da riflettere queste modifiche esterne. Le modifiche di questo tipo possono essere nascoste dagli utenti all'interno del dominio centralizzando le modifiche a un singolo router di conversione degli indirizzi. NAT consente l'accesso per gli host locali a Internet pubblico e li protegge dall'accesso diretto dall'esterno. Le organizzazioni con una configurazione di rete principalmente per l'uso interno, con una necessità di accesso esterno occasionale sono buoni candidati per questo schema.

Conversione della porta nat e di rete di base

Un router abilitato per NAT viene installato 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 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 "possiede" uno o più indirizzi IP registrati a livello globale diversi dal proprio indirizzo IP. Questi indirizzi globali sono disponibili per assegnare agli host nella propria rete privata o in modo statico o dinamico. NAPT, o Network Address Port Translation, è una variante di NAT di base, in cui la traduzione degli indirizzi di rete viene estesa per includere un identificatore "transport". La maggior parte è in genere il numero di porta per i pacchetti TCP e UDP e l'ID query per i pacchetti ICMP.

Le connessioni attraverso il limite NAT vengono in genere avviate dagli host nella rete privata che invia pacchetti in uscita a un host esterno. Questi host vengono in genere assegnati indirizzi IP dinamici (temporanei) a questo scopo. Tuttavia, è anche possibile avere connessioni avviate in direzione opposta se la rete privata ha 'server' ad esempio http o server FTP che accettano richieste client dalla rete esterna. NAT assegna in genere questi host locali a un indirizzo IP statico (permanente): porta.

Funzionamento della traduzione degli indirizzi di rete

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

A typical network setup with a NAT-enabled router

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

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

Per illustrare un'implementazione tipica di Network Address Translation, è consigliabile considerare una configurazione di rete nella figura 2.

A typical implementation of 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 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 della rete privata avvia una connessione TCP con un server Web su Internet.

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

A high-level view of the Network Address Translation process

Figura 3 - Visualizzazione generale del processo di traduzione 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 su Internet e raggiunge infine 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 TCP, il pacchetto appare originato dal 202.151.24.14, numero di porta 2015. La figura 4 mostra il processo NAT nel percorso restituito.

    NAT process on the return path

    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 a un pacchetto, si applicano le regole di traduzione associato: l'indirizzo di destinazione viene modificato nell'indirizzo IP del mittente (client) originale: 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 su Internet pubblico.

Funzionalità NAT netX Duo

Quando viene creata l'istanza NAT usando nx_nat_create chiamata, viene creata la tabella di traduzione NAT.

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 NETX Duo NAT gestisce una tabella di traduzione 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") è impostata con il puntatore dynamic_cache_memory. Questa area deve essere uno spazio buffer allineato a 4 byte. Le dimensioni della tabella (o il numero di voci) vengono determinate suddividendo le dimensioni della cache dynamic_cache_size in base alle dimensioni di una voce di tabella NAT. La tabella deve essere sufficiente per il numero minimo di voci specificate da NX_NAT_MIN_ENTRY_COUNT definite in nx_nat.h. Il valore predefinito è 3.

Il timeout per tutte le voci dinamiche della 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 viene descritto in dettaglio nel capitolo 4 - Descrizione dei servizi

Durante il runtime, se la tabella di traduzione è completa e non è possibile aggiungere più voci, NetX Duo NAT notificherà all'applicazione NAT un callback completo della cache se ne è registrato uno con l'istanza NAT. Questa operazione viene eseguita usando il servizio di 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 altre informazioni su questo servizio, vedere Capitolo 4 - Descrizione dei servizi .

Elaborazione dei pacchetti NAT in NetX Duo

NetX Duo NAT è destinato all'uso in un router IPv4. Per 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 NAT di NetX Duo. Il server NAT indica quindi se "utilizzerà" (tentativo di inoltrare) il pacchetto a un host in una delle relative reti. Se non utilizzerà il pacchetto, il pacchetto viene "restituito" a NetX Duo per elaborare il pacchetto in modo normale.

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 traduzione 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 modifica le intestazioni del pacchetto con questo nuovo indirizzo IP:port prima di inviarlo nella rete esterna.

Per i pacchetti in ingresso, il server NAT cerca una voce precedente nella tabella di traduzione 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 traduzione TCP, UDP e ICMP per la creazione di indirizzi locali univoci: 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 versioni successive. L'applicazione NAT richiede la creazione di un'unica 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 relative operazioni NAT.

RFC supportato da NetX Duo NAT

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

  • RFC 2663: terminologia e considerazioni sull Translator'indirizzo di rete IP (NAT)
  • RFC 3022: Indirizzo IP netowrk tradizionale Translator (NAT tradizionale)
  • RFC 4787: Requisiti comportamentali NAT (Network Address Translation) per UNICAst UDP