Come funziona NAT / PortForwarding / TCP / IP?


11

Di recente ho letto un articolo intitolato Come funziona NAT . Alcune cose rimangono ancora poco chiare per me. Sarei grato se qualcuno potesse spiegare.

Di seguito è la parte dell'articolo su DynamicNAT che è più confusa:

Un computer nel dominio stub tenta di connettersi a un computer esterno alla rete, ad esempio un server Web.

Il router riceve il pacchetto dal computer sul dominio stub. Il router salva l'indirizzo IP non instradabile del computer in una tabella di traduzione degli indirizzi. Il router sostituisce l'indirizzo IP non instradabile del computer di invio con il primo indirizzo IP disponibile al di fuori dell'intervallo di indirizzi IP univoci. La tabella di traduzione ora ha una mappatura dell'indirizzo IP non instradabile del computer abbinato a quello degli indirizzi IP univoci.

Quando un pacchetto ritorna dal computer di destinazione, il router controlla l'indirizzo di destinazione sul pacchetto. Quindi cerca nella tabella di traduzione degli indirizzi per vedere a quale computer sul dominio stub appartiene il pacchetto.

1) Come fa NAT a sapere che il pacchetto "ritorna" sul computer di destinazione?

2) Cosa succede se altri computer nella LAN sono collegati allo stesso server? Come fa il NAT a sapere quale pacchetto dovrebbe "tornare" dove?

3) La modifica dell'intestazione del pacchetto consente di eseguire un attacco Internet, in cui "IP di origine" viene sostituito con l'IP della vittima e il server di risposta inonderà la vittima con pacchetti indesiderati?

Immagino che dovrebbero essere coinvolti più aggressori ...

4) StaticNAT è equivalente al PortForwarding di tutte le porte?

Risposte:


10

Esiste un malinteso generale tra NAT (Network address translation) e PAT (Port Address Translation), che è quello che usiamo principalmente nei nostri router domestici.

NAT
Supponiamo di avere una rete con la seguente topologia:

Private_Network <-------> Router <-------> Internet

L'interfaccia del router collegato a Private_Network ha un indirizzo IP privato , ovvero uno che non è univoco in The_Internet . D'altra parte, nel caso di NAT , il router ha più interfacce collegate a Internet . Ogni interfaccia ha un indirizzo IP univoco in The_Internet . Ora supponiamo che Host_A e Host_B siano nella rete privata e che entrambi vogliano accedere a Website_X in The_Internet contemporaneamente. Gli IP e le porte di Host_AIl pacchetto sarà:

IP di origine: IP privato di Host_A
Porta di origine: una porta su Host_A
IP di destinazione: Sito_X pubblico / unico IP
Destinazione Porta: una porta in cui il server di Website_X è in ascolto

e allo stesso modo per un pacchetto proveniente da Host_B .
Se l'IP di origine rimane invariato, Website_X risponderà a un indirizzo IP che è privato, cioè non univoco, e quindi il pacchetto non sarà mai in grado di trovare la via del ritorno. Per risolvere questo problema, il router verifica se non viene utilizzato uno dei suoi indirizzi IP univoci collegati a Internet . In tal caso, esegue la seguente mappatura:

Host_A 's private IP ======= Router's_unique_IP_K

e ora il pacchetto che è partito da Host_A andando a Website_X e ora sta lasciando l'interfaccia del router connesso a The_Internet avrà il modulo:

IP di origine: Router's_unique_IP_K
Porta di origine: una porta su Host_A
IP di destinazione: IP pubblico / unico Porta di destinazione IP di Website_X
: una porta su cui il server di Website_X è in ascolto

Quindi puoi capire che esiste un'associazione one-to-one da IP privati ​​a IP pubblici. Pertanto, quando un pacchetto arriva da Website_X al router , questa associazione viene verificata e l'indirizzo IP di destinazione viene riportato a quello privato e consegnato con successo all'host giusto.
Come puoi vedere, questo metodo è abbastanza semplice, ma presenta un grosso svantaggio: ogni host privato deve avere un indirizzo IP univoco riservato, che è costoso, quindi scegliamo di avere meno indirizzi IP univoci rispetto agli host nella rete privata. Pertanto, se tutti gli host privati ​​tentano di accedere a The_Internet contemporaneamente, solo un sottoinsieme di essi, uguale al numero di indirizzi IP pubblici disponibili che il routerha, avrà accesso e il resto verrà negato.
Per contrastare ciò abbiamo creato PAT .

PAT
PAT è ciò che utilizza la stragrande maggioranza dei nostri router domestici. La limitazione di base è che il router ha un unico indirizzo IP univoco con cui si connette a The_Internet , ma vogliamo comunque consentire a più host dalla rete privata di accedere a The_Internet contemporaneamente.
Il modo in cui lo facciamo è "simile" al modo in cui NAT lo fa con una differenza fondamentale: invece del router che detiene un pool di indirizzi IP, contiene un pool di numeri di porta. Più precisamente, un pacchetto che arriva al router da Host_A in Private_Network destinato a Website_X inThe_Internet avrà il seguente formato:

IP di origine: IP privato di Host_A
Porta di origine: una porta su Host_A
IP di destinazione: Sito_X pubblico / unico IP
Destinazione Porta: una porta in cui il server di Website_X è in ascolto

Ora il router eseguirà due attività:

  1. Cambia l'IP di origine in IP pubblico univoco del router AND
  2. Cambia la porta di origine in una porta da un pool che il router gestisce e non è già utilizzato, ad esempio Port_Z

e ora il pacchetto che è partito da Host_A andando a Website_X e ora sta lasciando l'interfaccia del router connesso a The_Internet avrà il modulo:

IP di origine: Router's_unique_IP_K
Porta di origine: Port_Z
IP di destinazione: Website_X 's pubblico / IP univoco
Porta Destinazione: port A dove Website_X ' del server s sta ascoltando

e il router manterrà il seguente mapping:

L' IP privato di Host_A E una porta su Host_A ======= Porta_Z

Perché funziona?
Ora quando un pacchetto ritorna, il router controlla semplicemente il numero di porta di destinazione e cambia l'indirizzo IP di destinazione e il numero di porta di destinazione in base alla mappatura pre-menzionata e il pacchetto viene consegnato correttamente.

Cosa succede se eseguo più applicazioni sullo stesso host?
Applicazioni diverse avranno porte diverse, per definizione, quindi verranno mappate su una porta diversa dal router .

Cosa succede se più host tentano di accedere a The_Internet contemporaneamente e utilizzano tutti la stessa applicazione?
Diversi host avranno indirizzi IP privati ​​diversi, per definizione, quindi verranno mappati su una porta diversa dal router .

PAT si sta pericolosamente bilanciando in uno spazio grigio di livello incrociato. I numeri di porta fanno parte del protocollo di trasporto mentre i router possono operare fino al protocollo Internet. Quindi tecnicamente parlando è qualcosa che non è consentito dai protocolli. Pertanto ci sono, almeno teoricamente, potenziali pericoli: il pool di porte è limitato. Pertanto, se la mia rete privata è composta da 1000 host e ognuno esegue port_pool / 10 applicazioni, la tabella di mappatura sul router esaurirà le voci disponibili e l'accesso alle applicazioni verrà negato.

Questa risposta ha superato di gran lunga la lunghezza prevista, ma spero sia stata utile.


2
Un paio di note, in primo luogo si utilizza il termine "NAT" per riferirsi a ciò che gli RFC chiamano "NAT di base" e "PAT" per riferirsi a ciò che gli RFC chiamano "NAPT". Le RFC usano generalmente "NAT" come termine generico che copre sia "NAT di base" che "NAPT". In secondo luogo, anche "NAT di base" deve modificare l'intestazione TCP / UDP perché l'intestazione TCP / UDP contiene un checksum che copre gli indirizzi IP.
Peter Green,

@PeterGreen ma l'essenza della risposta è accurata?
lpydawa,

6

Il router sa dove appartengono i pacchetti perché The router saves ... an address translation table.ricorda quali traduzioni di indirizzi interno-esterno ha effettuato. Pertanto, un indirizzo interno equivale a un indirizzo esterno e la destinazione fuori da Internet è irrilevante. Questo, ovviamente, ignora il firewall presente praticamente in ogni router NAT, che tiene traccia delle connessioni complete:

(inside) src:ip+port,dst:ip+port <-> (outside) src:ip+port,dst:ip+port

NAT può modificare qualsiasi combinazione di ip e / o porta.

# 3 è un argomento completamente diverso: lo spoofing

# 4 "NAT statico", o "1 a 1", è una mappa solo per indirizzo. Quindi, port (e persino protocollo: tcp, udp, gre, ecc.) È irrilevante.


2) Cosa succede se altri computer nella LAN sono collegati allo stesso server? Come fa il NAT a sapere quale pacchetto dovrebbe "tornare" dove?
user2449761

1 e 2 sono la stessa risposta: perché tiene traccia delle connessioni / traduzioni. Due host interni non verranno associati allo stesso indirizzo esterno; quindi qualsiasi pacchetto che arriva a un indirizzo esterno mappato, ha automaticamente solo una destinazione interna. Se hai solo un indirizzo (pubblico) esterno, non è "NAT", ma PAT (traduzione porta)
Ricky Beam,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.