Network Address Translation en xarxes informàtiques, la traducció d'adreces de xarxa (network address translation, NAT) és el procés pel qual es modifiquen la informació sobre adreces a la capçalera del paquet IPv4 mentre està en trànsit per un dispositiu d'encaminament
El tipus de NAT més senzill dona una traducció d'una a una d'adreces IP. La es refereix a aquest tipus de NAT com a NAT bàsic. Sovint també se'n diu NAT d'un a un. En aquest tipus de NAT només cal modificar les adreces IP, el checksum de la capçalera del paquet i qualssevol checksums de nivell més alt que incloguin l'adreça IP. La resta del paquet no cal tocar-lo (almenys per a la funcionalitat bàsica de TCP/UDP, alguns protocols de nivell més alt poden necessitar més traducció). Els NATs bàsics es poden utilitzar quan hi ha un requeriment per a interconnectar dues xarxes IP amb adreçaments incompatibles.
Tanmateix, és força corrent d'amagar tot un espai d'adreçament IP sencer, que normalment consisteix en adreces IP privades, al darrere d'una única adreça IP (o en alguns casos un grup de poques adreces IP) d'un altre espai d'adreçament (normalment l'espai públic). Per evitar l'ambigüitat en la gestió dels paquets de tornada, un NAT d'un-a-molts ha de modificar informació de més alt nivell com els ports TCP/UDP a les comunicacions sortint, i ha de mantenir una taula de traducció perquè els paquets de tornada puguin traduir-se correctament. La utilitza el terme NAPT (network address and port translation, traducció d'adreça de xarxa i de port) per a aquest tipus de NAT. D'altres vegades també s'anomena PAT (port address translation), IP masquerading, NAT Overload i many-to-one NAT. Com que aquest és el tipus de NAT més corrent, també se sol anomenar simplement NAT.
Com s'ha dit, aquest mètode permet la comunicació a través del router només quan la conversa s'origina dins de la xarxa "dissimulada", perquè això inicialitza les taules de traducció. Per exemple, un navegador web dins de la xarxa dissimulada pot navegar per un web que estigui a fora, però un navegador de fora no pot navegar per un web que estigui a la xarxa dissimulada. Això no obstant, la majoria dels dispositius NAT actuals permeten a l'administrador de xarxa que pre-configuri la taula amb algunes traduccions permanents. Aquesta funcionalitat es coneix normalment com a "NAT estàtic" o port forwarding i permet que el trànsit originat a la xarxa "exterior" arribi a ordinadors concrets dins de la xarxa dissimulada.
Des de mitjans dels anys 1990, el NAT ha estat una eina molt popular per alleujar els problemes provocats per l'esgotament de l'espai d'adreces IPv4.The TCP/IP Guide. IP NAT S'ha convertit en una funció estàndard i indispensable en tots els routers per a connexions domèstiques i d'oficina petita. La majoria dels sistemes que utilitzen NAT ho fan per permetre que múltiples ordinadors d'una xarxa privada accedeixin a la Internet amb una sola adreça IP pública.
La traducció d'adreces de xarxa té inconvenients seriosos de cara a la qualitat de la connectivitat a Internet, i requereix una cura especial als detalls de la seva implementació. En concret, tots els tipus de NAT trenquen el model esperat de connectivitat punt a punt a Internet i NAPT fa que sigui difícil que sistemes situats al darrere del NAT acceptin comunicacions entrants. Per alleujar aquest problema s'han ideat diferents mètodes per travessar NATs.
NATs d'un a molts La majoria dels NATs fan una correspondència de múltiples ordinadors d'una xarxa privada cap a una única adreça IP pública. En una configuració típica, una xarxa local utilitza una de les subxarxes designades com a "privades" a la . Un router d'aquesta xarxa té una adreça privada dins d'aquest espai d'adreces. El router també està connectat a Internet amb una adreça "pública" assignada pel proveïdor d'accés a Internet. Quan el trànsit passa des de la xarxa local cap a la Internet, l'adreça origen de cada paquet es tradueix al vol de l'adreça privada cap a l'adreça pública. El router conserva la informació bàsica sobre cada connexió activa (en concret, el port i l'adreça destí). Quan torna una resposta al router, utilitza les dades de seguiment que havia emmagatzemat durant la fase d'establiment per determinar a quina adreça privada de la xarxa interna ha d'encaminar la resposta.
Tots els paquets IP tenen una adreça IP origen i una de destí. Típicament, els paquets que passen de la xarxa privada cap a la pública veuran modificada la seva adreça origen, mentre que els paquets que tornen de la xarxa pública cap a la privada veuran modificada l'adreça destí. També són possibles configuracions més complexes.
Per evitar ambigüitats sobre com traduir els paquets de tornada, calen modificacions addicionals als paquets. La major part del trànsit d'Internet són paquets TCP i User Datagram Protocol, i per a aquests protocols es modifiquen els números de port perquè la combinació d'adreça IP i port del paquet de tornada es pugui correspondre unívocament amb l'adreça i port privats que toqui. Els protocols no basats en TCP ni UDP requereixen altres tècniques de traducció. Els paquets ICMP, normalment estan relacionats amb alguna connexió preexistent i han d'utilitzar les mateixes taules d'IP i port que la connexió a la qual es refereixen.
Mètodes de traducció de ports Hi ha diverses maneres d'implementar la traducció de les adreces i ports de xarxa. En alguns protocols d'aplicació que utilitzen informació sobre l'adreça IP, l'aplicació que s'executa en un node de la xarxa emmascarada ha de determinar l'adreça externa del seu NAT, és a dir, l'adreça que detectaran els altres extrems de la seva comunicació. A més, sovint ha d'examinar i categoritzar el tipus de correspondència que s'està fent servir. Normalment, això es fa perquè es vol establir un camí directe de comunicació (bé per estalviar-se el cost de fer passar les dades per un tercer servidor, bé per millorar-ne el rendiment) entre dos clients, ambdós al darrere de NATs separats. Amb aquest fi, es va desenvolupar el protocol STUN (Simple traversal of UDP over NATs, o travessia senzilla d'UDP per NATs), que està especificat a l', de març de 2003. Classifica les implementacions de NAT com a NAT de con sencer (full cone), NAT de con restringit (per adreça) (address restricted cone NAT), NAT de con restringit (per port) (port restricted cone NAT) o NAT simètric (symmetric NAT), i proposa una metodologia per detectar el tipus de dispositiu. Això no obstant, aquests procediments han deixat de ser considerats com a estàndard, ja que s'ha demostrat que fallaven i no eren adequats per avaluar molts dispositius. S'han estandarditzat nous mètodes a l' (d'octubre de 2008) i ara l'acrònim STUN representa el títol nou de l'especificació: Session Traversal Utilities for NAT, és a dir, "Utilitats per a la travessa de sessions amb NAT".
NAT de con sencer, conegut també com a NAT d'un-contra-un
Un cop es fa una correspondència d'una adreça interna (iAddr:iPort) a una d'externa (eAddr:ePort), qualssevol paquets provinents d'iAddr:iPort s'enviaran per eAddr:ePort. Qualsevol ordinador extern pot enviar paquets a iAddr:iPort adreçant-los a eAddr:ePort. NAT de con sencer NAT de con restringit (per adreça)
Un cop es fa una correspondència d'una adreça interna (iAddr:iPort) a una d'externa (eAddr:ePort), qualssevol paquets provinents d'iAddr:iPort s'enviaran per eAddr:ePort. Un ordinador extern (hAddr:qlsv) pot enviar paquets cap a iAddr:iPort adreçant-los a eAddr:ePort només si iAddr:iPort ha enviat anteriorment un paquet cap a hAddr:qlsv. "Qlsv" vol dir que pot ser qualsevol número de port. NAT de con restringit NAT de con restringit (per port)
Com un NAT de con restringit per adreça, però la restricció afecta també els números de port.
Un cop es fa una correspondència d'una adreça interna (iAddr:iPort) a una d'externa (eAddr:ePort), qualssevol paquets provinents d'iAddr:iPort s'enviaran per eAddr:ePort. Un ordinador extern (hAddr:hPort)pot enviar paquets cap a iAddr:iPort adreçant-los a eAddr:ePort només si iAddr:iPort ha enviat anteriorment un paquet cap a hAddr:hPort. NAT de con restringit (per port) NAT simètric
Cada sol·licitud de la mateixa adreça IP i port interns cap a una adreça IP i port destí concrets es correspon amb una única adreça i port origen externs. Si el mateix ordinador intern envia un paquet, encara que sigui amb la mateixa adreça i port origen, però cap a un destí diferent, s'utilitza una correspondència diferent. Només un ordinador que rebi un paquet d'un ordinador intern pot enviar un paquet de tornada. NAT simètric
Aquesta terminologia ha provocat moltes confusions, perquè s'ha demostrat que no és ben bé adequada per descriure els comportaments dels NATs reals. Moltes implementacions de NAT combinen aquests tipus i, per tant, és millor de parlar de comportaments concrets de NATs individuals en comptes d'utilitzar la terminologia de con/simetria. En concret, la majoria dels traductors de NAT combinen el NAT simètric per a connexions sortints amb correspondència estàtica de ports, on els paquets que arriben a l'adreça i port externs es redirigeixen cap a una adreça i port interns concrets. Alguns productes poden redirigir els paquets cap a diferents ordinadors interns, per exemple, per dividir la càrrega entre uns quants servidors. Tanmateix, això provoca problemes amb comunicacions més complicades que tenen molts paquets interconnectats i, per tant, es fa servir poc.
Tipus de NAT i travessa de NAT El problema de la travessa de NAT apareix quan dos elements situats al darrere de NATs diferents intenten comunicar-se entre ells. Una manera de resoldre aquest problema és utilitzar port forwarding, i l'altra manera és utilitzar alguna de les tècniques de travessa de NATs. La tècnica més popular per travessar NATs es coneix com a TCP hole punching' (foradar el TCP), i requereix que el NAT segueixi el disseny de conservació de port per a TCP, com s'explica a continuació.
Moltes implementacions de NAT segueixen el disseny de conservació de port, sobretot per a TCP; això vol dir que utilitzen els mateixos valors per als ports interns i externs. La conservació de port en NAT per a les connexions TCP de sortida és especialment per la travessa de NATs, perquè els programes solen associar connectors (sockets) TCP diferents a ports efímers per a connexions TCP diferents, fent així que sigui impossible predir el port de NAT en TCP.
D'altra banda, per UDP, els NATs no cal que tinguin conservació de port perquè les aplicacions solen reutilitzar el mateix connector (socket) UDP per enviar paquets a ordinadors diferents, fent que la predicció de port sigui trivial, ja que és el mateix port origen per a cada paquet.
A més, la conservació de port en NAT per TCP permet que els protocols P2P siguin menys complexos i tinguin menys latència perquè no cal utilitzar un tercer element per a descobrir el port de NAT, perquè l'aplicació ja el coneix.
Això no obstant, si dos ordinadors interns intenten comunicar-se amb el mateix ordinador extern utilitzant el mateix número de port, el número de port extern que utilitzi el segon ordinador es triarà a l'atzar. Un NAT d'aquests es percebrà de vegades com a NAT de con restringit (per adreça) i d'altres com a NAT simètric.
Estudis recents han demostrat que aproximadament un 70% dels clients de les xarxes P2P utilitzen algun tipus de NAT.
Implementació Establiment de comunicació bidireccional Tots els paquets TCP i UDP contenen alhora una adreça IP i un número de port origen, i també una adreça IP i número de port destí. La parella adreça IP/port forma el que s'anomena socket. En concret, l'adreça i el port origen formen el socket origen.