protocol que facilita la connexió d'un espai d'adreces IP a un altre From Wikipedia, the free encyclopedia
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
«NAT» redirigeix aquí. Vegeu-ne altres significats a «NAT (desambiguació)». |
El tipus de NAT més senzill dona una traducció d'una a una d'adreces IP. La RFC 2663 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 RFC 2663 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.[1] 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.
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 RFC 1918. 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.
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'RFC 3489, 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'RFC 5389 (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".
Aquesta terminologia ha provocat moltes confusions, perquè s'ha demostrat que no és ben bé adequada per descriure els comportaments dels NATs reals.[2] 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.
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.[3]
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.[4]
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.
Per a serveis accessibles públicament com els servidors de web i correu, el número de port és important. Per exemple, el port 80 serveix per connectar-se als servidors web, i el port 25, al procés SMTP d'un servidor de correu. L'adreça IP d'un servidor públic també és important, ja que és única a nivell global, com podria ser-ho una adreça postal o un número de telèfon. Tant l'adreça IP com el port s'han de conèixer correctament per tots els ordinadors que s'hi vulguin comunicar.
Les adreces IP privades, descrites a la RFC 1918 només són significatives dins de les xarxes privades (possiblement domèstiques) on s'estan fent servir, igual que els ports. Els ports són els punt únics de comunicació dins d'un ordinador; per tant, una connexió que travessi un dispositiu de NAT ha de mantenir informació sobre la correspondència del número de port i l'adreça IP.
PAT resol conflictes que apareixerien amb dos ordinadors diferents que utilitzessin el mateix número de port origen per establir connexions diferents alhora.
Un dispositiu de NAT és semblant a un sistema telefònic d'una oficina que tingui un sol número de telèfon públic i extensions múltiples. Les trucades sortints des de l'oficina sembla que vinguin totes del mateix número de telèfon. Això no obstant, una trucada entrant que no especifiqui l'extensió no es pot transferir automàticament a una persona de l'oficina. En aquest escenari, l'oficina és una xarxa local privada, el número de telèfon principal és l'adreça IP pública, i les extensions individuals són els números de port diferents.[5]
Amb NAT, tota la comunicació que s'envia a ordinadors externs conté de fet l'adreça IP i el port externs del dispositiu NAT en comptes de les adreces IP i ports dels ordinadors.
NAT només traduirà adreces IP i ports dels seus ordinadors interns, amagant el punt final autèntic d'un ordinador intern d'una xarxa privada.
El funcionament del NAT és típicament transparent, tant per als ordinadors interns com els externs.
Típicament, l'ordinador intern coneix l'adreça IP real i el port TCP o UDP de l'ordinador extern. Típicament, el dispositiu NAT pot funcionar com a router per defecte de l'ordinador intern. Això no obstant, l'ordinador extern només coneix l'adreça IP pública del dispositiu NAT i el port concret que utilitza per a la comunicació amb l'ordinador intern.
El "NAT pur", funcionant només per IP, pot ser o no que processi correctament els protocols que s'ocupen només de la informació IP, com ara ICMP, segons si el contingut del paquet l'interpreta un ordinador de la part interior o exterior de la traducció. Si la separació entre nivells de la pila TCP/IP es vulnera, fins i tot amb protocols tan bàsics com TCP i UDP, els protocols fallaran llevat que NAT actuï més enllà del nivell de xarxa.
Els paquets IP tenen una suma de verificació a cada capçalera de paquet, que proporciona detecció d'errors només per la capçalera. Els datagrames IP es poden fragmentar i cal que un NAT reagrupi aquests fragments per poder tornar a calcular les sumes de nivell més alt, i seguir correctament quins paquets pertanyen a cada connexió.
Els protocols principals del nivell de transport, TCP i UDP, tenen una suma de verificació que cobreix totes les dades que porten, així com la capçalera TCP/UDP, més una "pseudo-capçalera" que conté les adreces IP origen i destí del paquet que porta la capçalera TCP/UDP. Perquè un NAT origen passi correctament TCP o UDP, cal que recalculi la suma de verificació de la capçalera TCP/UDP amb les adreces IP traduïdes, no les originals, i posi aquesta suma a la capçalera TCP/UDP del primer paquet del conjunt de paquets fragmentats. Si hi ha un NAT receptor, aquest ha de tornar a calcular la suma de verificació de cada paquet que passa cap a l'ordinador destí, i també ha de reconèixer i tornar a calcular la capçalera TCP/UDP utilitzant les adreces traduïdes i la pseudo-capçalera. Aquest problema no està resolt del tot. Una solució és que el NAT receptor reagrupi el segment sencer, i llavors torni a calcular el checksum amb tots els paquets.
L'ordinador origen pot dur a terme un descobriment de la unitat màxima de transmissió (MTU) al llarg del camí, per determinar quina mida de paquet es pot transmetre sense fragmentar, i llavors posar a 1 el bit DF (don't fragment) a la capçalera del paquet.
DNAT és una tècnica per modificar de forma transparent l'adreça IP destí d'un paquet en trànsit, i fer la funció inversa per a qualsevol resposta que rebi. Qualsevol router situat entre dos punts finals pot dur a terme aquesta transformació del paquet.
DNAT s'utilitza normalment per a publicar un servei ubicat en una xarxa privada en una adreça IP accessible públicament. Aquest ús de DNAT també s'anomena port forwarding, o DMZ quan s'utilitza per a tot un servidor, que queda obert a la xarxa, de forma anàloga a una zona desmilitaritzada no defensada.
El significat del terme SNAT varia segons el fabricant. Molts fabricants tenen la seva pròpia definició de SNAT. Normalment, s'entén com a source NAT, és a dir, NAT d'origen, en oposició a NAT destí (DNAT). Microsoft ho tradueix com a Secure NAT (NAT segur), referint-se a l'ISA Server. Per equips Cisco Systems, SNAT significa stateful NAT (NAT amb informació d'estat).
El NAT dinàmic, igual que l'estàtic, no és freqüent en xarxes petites però es pot trobar en grans empreses amb xarxes complexes. La diferència amb el NAT estàtic és que el NAT estàtic dona una traducció unívoca entre una adreça IP interna i una de pública, mentre que el NAT dinàmic no fa que la correspondència entre l'adreça externa i la interna sigui estàtica; sol utilitzar un grup d'adreces IP públiques.
Alguns protocols de la capa d'aplicació (com ara FTP i SIP) envien explícitament adreces de xarxa dins de les dades d'aplicació. L'FTP en mode actiu, per exemple, utilitza connexions separades per al trànsit de control (les comandes) i per a les dades (el contingut del fitxer). Quan es demana la transferència d'un fitxer, l'ordinador que fa la petició identifica la connexió de dades corresponent per les seves adreces de xarxa i transport. Si l'ordinador que fa la petició està al darrere d'un firewall NAT senzill, la traducció de l'adreça IP i/o número de port invalida la informació que rep el servidor. El protocol SIP controla moltes trucades de veu per IP, i té el mateix problema. SIP i SDP poden utilitzar ports múltiples per establir una connexió i transmetre la veu per RTP. Les adreces IP i els números de port estan codificats dins de les dades i s'han de conèixer abans de travessar els NAT. Sense tècniques especials, com ara STUN, el comportament del NAT no es pot predir, i és probable que la comunicació falli.
Per corregir aquests problemes, cal instal·lar un programari o maquinari que faci la funció de passarel·la de nivell d'aplicació (application layer gateway, o ALG). Un mòdul de programari ALG que s'executi dins d'un dispositiu NAT que faci de firewall interpretarà el contingut dels paquets (no sols la capçalera de xarxa) i corregirà les dades que hagin quedat invalidades per la traducció d'adreces. Evidentment, el programari ALG ha d'entendre el protocol d'alt nivell que han de corregir, i per això cada protocol que té aquest problema necessita un ALG separat. Per exemple, en molts sistemes Linux, hi ha mòduls del nucli que s'anomenen connection trackers que serveixen per implementar ALGs. Això no obstant, ALG no funciona si el canal de control està encriptat (p. ex. FTPS).
Una altra solució possible per aquest problema és la utilització de tècniques per travessar NATs amb protocols com STUN o ICE, o utilitzar solucions privatives en un controlador de frontera de sessions. La travessa de NATs és possible tant amb aplicacions basades en TCP com UDP, però la tècnica basada en UDP és més senzilla, s'entén millor, i és més compatible amb NATs antics. En tot cas, el protocol d'alt nivell s'ha d'haver dissenyat tenint en compte la travessa de NAT, i no funcionarà de forma fiable amb NATs simètrics, o d'altres NATs antics que no es comportin de forma predictible.
D'altres possibilitats són Universal Plug and Play (UPnP) o NAT-PMP (NAT Port Mapping Protocol), però aquests necessiten la cooperació del dispositiu NAT.
La majoria dels protocols tradicionals client-servidor (FTP n'és l'excepció més important), tanmateix, no envien informació de contacte de nivell 3 i per tant no necessiten cap tractament especial al NAT. De fet, avui en dia, evitar complicacions amb el NAT és pràcticament un requisit a l'hora de dissenyar nous protocols d'alt nivell (p. ex. l'ús d'SFTP en comptes d'FTP).
Els NATs també poden provocar problemes quan s'aplica encriptació IPsec i en casos on múltiples dispositius com ara telèfons SIP estan situats darrere d'un NAT. Els telèfons que encripten la seva senyalització amb IPsec encapsulen la informació de port dins d'un paquet encriptat, i això vol dir que els dispositius NAT no poden saber el port i per tant no el poden traduir. En aquests casos, el dispositiu fa un NAT senzill. Això vol dir que tot el trànsit de tornada cap al NAT arribarà a un sol client, fent que el servei falli per als altres. Hi ha dues solucions per aquest problema: una és utilitzar TLS, que funciona a nivell 4 del model OSI i per tant no emmascara el número de port; una altra és encapsular l'IPsec en UDP. Aquesta última solució és la que utilitza TISPAN per travessar NATs de manera segura.
La vulnerabilitat del protocol DNS que va anunciar Dan Kaminsky el juliol de 2008 està afectada de manera indirecta per la traducció de ports que fan els NAT. Per evitar l'enverinament DNS, és important de no traduir els ports origen UDP a les peticions de DNS que fa un servidor DNS que estigui al darrere d'un firewall que implementi NAT. La solució temporal recomanada per a la vulnerabilitat del DNS és fer que tots els servidors DNS que fan cache utilitzin ports UDP origen aleatoris. Si la funció NAT torna a fer que no aquests ports origen no siguin aleatoris, el servidor DNS tornarà a ser vulnerable.
A més dels avantatges que proporciona NAT:
L'avantatge principal dels NAT d'adreça IP és que ha estat una solució pràctica a l'imminent esgotament de l'espai d'adreçament IPv4. Fins i tot xarxes grans es poden connectar a Internet amb una sola adreça IP. La solució més comuna és donar a les màquines que requereixen connectivitat punt a punt una adreça IP pública, mentre que les màquines que no donen servei a usuaris externs queden darrere d'un NAT amb poques adreces IP que permetin accés a Internet. Però això comporta alguns problemes, que es descriuen a continuació.
Per a alguns[6] això mateix és un inconvenient, perquè retarda la necessitat de la implementació d'IPv6:
« |
"[...] és possible que el seu [del NAT] ús generalitzat retardi significativament la necessitat de desplegar IPv6. [...] Segurament es pot dir que les xarxes serien millors sense NAT [...]" |
» |
Els ordinadors situats darrere de routers amb NAT no tenen connectivitat directa punt a punt, i no poden participar en alguns protocols d'Internet. Els serveis que requereixen que l'inici de les connexions TCP sigui des de la xarxa externa, o protocols sense estat com els que utilitzen UDP, poden deixar de funcionar. Si el router NAT no té una configuració específica per tal de suportar aquests protocols, els paquets entrants no poden arribar al seu destí. Alguns protocols poden funcionar si només hi ha una instància de NAT entre els ordinadors que hi participen (l'FTP en mode passiu, per exemple), de vegades amb l'ajuda d'una passarel·la de nivell d'aplicació (vegeu més endavant), però fallen quan tots dos sistemes estan separats d'Internet per un NAT. L'ús de NAT també complica els protocols de túnel com ara IPsec perquè NAT modifica valors de les capçaleres que interfereixen amb les comprovacions d'integritat que fan IPsec i d'altres protocols de tunelització.
La connectivitat extrem a extrem és un principi fonamental d'Internet. Els documents d'arquitectura d'Internet actuals reconeixen que NAT és una violació d'aquest principi, però que NAT té un paper vàlid amb un disseny acurat.[7] Hi ha molta més preocupació amb l'ús de NAT en IPv6, i molts arquitectes d'IPv6 creuen que IPv6 es va inventar precisament per evitar la necessitat de NAT.[8]
Com que les taules de traducció dels routers NAT tenen una vida curta, els dispositius de la xarxa interna erden la connectivitat IP típicament al cap de poca estona si no és que implementen mecanismes de manteniment de sessió, accedint freqüentment als ordinadors externs. Això afecta la durada de la bateria en dispositius portàtil i ha frenat el desenvolupament d'aquest tipus de dispositius.
Alguns ISPs, sobretot a l'Índia, Rússia, parts d'Àsia i d'altres regions "en desenvolupament" donen als seus clients només adreces IP "locals", degut al nombre limitat d'adreces IP externes que tenen disponibles. Llavors, aquests clients han d'accedir per força a tots els serveis externs a la xarxa de l'ISP mitjançant un NAT. Per tant, els clients d'aquests ISPs no poden tenir connectivitat extrem-a-extrem, violant els principis bàsics d'Internet. Aquesta situació anirà sent cada cop més freqüent a tot el món, mentre no es faci la transició a IPv6.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.