Network address translation

Uit Wikipedia, de vrije encyclopedie
Dit is een oude versie van deze pagina, bewerkt door 81.82.226.19 (overleg) op 25 mrt 2009 om 15:35.
Deze versie kan sterk verschillen van de huidige versie van deze pagina.
Naar navigatie springen Naar zoeken springen

Network address translation (NAT, ook wel Network masquerading of IP-masquerading) is het vertalen van IP-adressen en vaak ook TCP/UDP-poortnummers uit de ene gescheiden reeks in de andere. Een veel gebruikt doel is het toelaten van meerdere gebruikers van een thuisnetwerk tot het internet via één IP-adres.

Noodzaak

De oorzaak voo SYNTRA IS GAY!!! r het veelvuldig gebruik van NAT is het tekort aan IPv4-adressen, de populariteit van het internet en de opkomst van steeds meer machines die het TCP/IP model gebruiken. NAT stelt netwerkbeheerders en eigenaars van een huis- of klein bedrijfsnetwerk in staat om via het privaat netwerk op het internet te kunnen surfen met een beperkt aantal IP-adressen. NAT is niet ontworpen om een lange termijn oplossing te zijn, dat is namelijk de opvolger van IPv4: IPv6. Vele IPv6 experts geloven dan ook dat IPv6 de noodzaak naar NAT zal doen verdwijnen. Het zal echter nog even duren vooraleer IPv6 een grote gebruikersbasis heeft en alle hardware klaar is voor het nieuwe protocol. Bovendien zijn er nog een aantal andere redenen om van NAT gebruik te maken. NAT voorziet in een simpele firewall functionaliteit en maakt het beheer van een netwerk makkelijker omdat men met een eigen set van IP-adressen kan werken.

Indeling

Functionaliteit

Network Address Port Translation

Alle computers op het privaat netwerk, inclusief de router, hebben een uniek privaat IP adres en een private poort. De router beschikt over minimaal één publiek IP-adres. Optioneel kunnen dit er meerdere zijn, zodat het mogelijk is dat er verschillende computers tegelijk bronnen op het internet/publieke netwerk raadplegen. Echter zijn er vaak meer computers op het privaat netwerk dan er publieke IP-adressen zijn voorzien aan de router. Om dus nog meer connecties mogelijk te maken is het vereist dat men gebruik maakt van Network Address Port Translation, of kortweg NAPT. NAPT biedt een uitbreiding op Adress-Translation door meerdere verbindingen te voorzien aan een publiek adres. Wanneer alle publieke ip-adressen opgebruikt zijn zal de NAPT driver aan Port-mapping doen. De poorten in het TCP en UDP protocol zijn allebei 16 bits lang, waardoor er twee keer 65,535 verbindingen mogelijk zijn (poort 0 is gereserveerd bij TCP en UDP).

Dynamic mapping

Dynamic mapping is hierboven beschreven en wordt dus gedefiniëerd dat een computer op private netwerk een verbinding opzet. Wanneer dit gebeurt, zal de NAT router een 5-voudige entry maken in zijn tabel: (protocol (TCP/UDP), bron-adres, bronpoort, bestemmingsadres, bestemmingspoort). Het aantal verbindingen wordt beperkt door 16bits poorten van de TCP/UDP protocollen en de hardware beperkingen van de router. Hierdoor zullen er regelmatig verbindingen verwijderd worden uit de NAT tabel. Dit wordt vaak door de netwerkbeheerder gespecificeerd.

Static mapping

Dynamic mapping voldoet zolang de verbinding wordt opgesteld door een computer van het private netwerk. Wanneer een computer vanuit het publieke netwerk een verbinding probeert te openen zal de NAT driver kijken in zijn tabel. Maar aangezien er geen verbinding opengesteld is, zal de aanvraag van de publieke computer geweigerd worden. Wanneer het echter noodzakelijk is dat een publieke computer een verbinding kan maken zal men aan static mapping doen. Dit houdt in dat een netwerkbeheerder een poort zal openstellen voor inkomende verbindingen zonder dat deze zich al in de NAT tabel hoeven te bevinden. Vanwege het grote aantal mogelijke combinaties is het nut hier echter van beperkt. In tegenstelling tot dynamic mapping blijft een verbinding bestaan totdat de netwerkbeheerder ze verwijdert. Bij zowel static als dynamic mapping is het nodig dat de NAT driver de TCP of UDP checksums controleert en opnieuw aanpast.

Basic NAT

Wanneer een publieke computer verbinding wilt maken met een computer op het private netwerk hebben we nog een alternatief voor NAPT, namelijk het direct koppelen van een privaat IP aan een publiek IP: Basic NAT (BNAT) genaamd of soms kortweg Address Translation. Er is dus meer sprake van een open verbinding tussen het privaat netwerk en het internet voor deze computer. BNAT is eigenlijk alleen maar nuttig (tenzij de gebruiker niet zonder de extra voordelen van NAT kan) wanneer de gebruiker over meerdere publieke IP-adressen beschikt. Indien er meer gebruikers zijn op het netwerk dan IP-adressen, is het niet mogelijk dat alle gebruikers een verbinding met het externe netwerk kunnen maken. Het is dan ook aan te raden om NAPT te verkiezen boven BNAT aangezien deze over meer unieke combinaties beschikt doordat er ook gebruik gemaakt wordt van de UPD/TCP poorten. In tegenstelling is BNAT nuttig voor protocollen die niet steeds gebruik maken van dezelfde TCP/UDP poorten of er zelfs helemaal geen gebruik van maken. Wanneer een computer van het private netwerk, waaraan een Address-Translation verbonden is, verbinding wil maken met een computer van het publieke netwerk, dan zal er geen gebruik gemaakt worden van NAPT. De inhoud van een BNAT tabel bestaat uit 2 adressen: privaat adres, publiek adres

Dynamic en static mapping zijn strikter dan BNAT omdat er bij de beide mapping methodes voldaan moeten worden aan 5 onderdelen uit de NAT tabel terwijl dit er bij BNAT maar 2 zijn.

Aan deze methoden is echter wel een beperking verbonden: het netwerk mag maar één NAT-router hebben die het eindpunt vormt voor het netwerk, meer specifiek: er mag slechts één enkele NAT tabel aanwezig zijn. Dus als er gebruik gemaakt wordt van meerdere routers dan moet er een methode voorzien worden waardoor deze hun NAT-tabellen kunnen synchroniseren. Is dit niet het geval dan zou, wanneer één van de routers niet meer bereikbaar is, de adressering verloren gaan. Als gevolg zouden de externe gebruikers niet meer kunnen communiceren met de interne gebruikers die voordien een verbinding had opgesteld met de router die zojuist niet meer bereikbaar is.

Richting

Bij Source-NAT wordt het bronadres aangepast (d.i. het IPv4-adres en/of de TCP/UDP poort). De gebruiker verandert hier m.a.w. waar het pakket vandaan komt. Tenminste, zo lijkt het voor de andere netwerken. Source NAT wordt dus gebruikt voor buitengaande pakketten.

In het geval van Destination-NAT wordt het bestemmingsadres aangepast. Dit type wordt gebruikt voor binnenkomende pakketten. Destination NAT wordt gedaan zodra het pakket het netwerk binnenkomt; voor de routing dus.

Een voorbeeld

De functionaliteit van een NAT router wordt hier beschreven aan de hand van een kort voorbeeld. We hebben een beperkt aantal computers die verbonden zijn met een NAT-router, die op zijn beurt weer verbonden is met het internet. Deze lokale computers en router beschikken over een lokaal IP-adres dat niet zichtbaar is voor de buitenwereld. Dit is in het voorbeeld van een thuisnetwerk vaak een klasse C adres zoals bv. 192.168.1.10 enz... Wanneer één van deze computers verbinding probeert te maken zal de NAT-router het lokaal adres vertalen naar het publieke adres. Het TCP/UDP nummer wordt hier dan ook vaak gewijzigd maar dit hoeft niet expliciet. We spreken hier over address-translation, er is nog geen port-translation ter sprake gekomen.

Voor NAT Na NAT
Protocol: TCP Protocol: TCP
bronadres: 192.168.1.10 bronadres: 87.54.38.19
bronpoort: 3312 bronpoort: 5000
bestemmingsadres: 54.38.42.1 bestemmingsadres: 54.38.42.1
bestemmingspoort: 21 bestemmingspoort: 21


Als er nog een verbinding wordt opgesteld (van een andere broncomputer of naar een andere doelcomputer) dan zal er een nieuwe regel worden toegevoegd aan de tabel van de NAT-router. Indien er nog een publiek adres beschikbaar is, zal dit worden gebruikt. Zoniet dan wordt er gebruik gemaakt van Port-translation. In dit voorbeeld hebben we slechts één publiek IP-adres en moet er dus gebruik gemaakt worden van Port-translation

Voor NAT Na NAT
Protocol: TCP Protocol: TCP
bronadres: 192.168.1.11 bronadres: 87.54.38.19
bronpoort: 2789 bronpoort: 5001
bestemmingsadres: 131.38.42.1 bestemmingsadres: 131.38.42.1
bestemmingspoort: 80 bestemmingspoort: 80

Voordelen

Administratieve voordelen

NAT heeft een aantal voordelen buiten het omzetten van IP-adressen. Het geeft de mogelijkheid om een groot netwerk op te delen in meerdere, kleinere netwerken. Door het netwerk op te delen kan men veranderingen doorvoeren aan het netwerk zonder daarmee de rest van het netwerk in gevaar te brengen. NAT vereenvoudigt het management van het netwerk, omdat het opgedeeld kan worden in logische en functionele eenheden.

Vele NAT-klare routers bieden de mogelijkheid tot extra opties zoals:

  • filteren van netwerkverkeer
  • loggen van netwerkverkeer

Firewall

NAT voorziet in een basis firewall-functionaliteit, er kunnen alleen maar pakketten binnenkomen als een gebruiker van een netwerk dit eerst aangevraagd heeft, er zijn dus in principe alleen maar antwoorden mogelijk. Een uitzondering is natuurlijk IP-reservation waarbij een bepaald IP wordt opengezet voor alle binnenkomende pakketten. De firewall-functionaliteit heeft zijn beperkingen, zo is het bijvoorbeeld niet mogelijk om de buitengaande pakketten te controleren of pakketten die van het eigen netwerk afkomstig zijn. Bovendien biedt NAT bescherming tegen low-level aanvallen zoals een SYN flood of "Ping-of-Death".

Nadelen

  • Het beperkt de end-to-end connectiviteit die zo centraal staat in de gehele internet filosofie. Er zijn dan ook een aantal protocollen waarmee NAT niet goed samenwerkt.
  • Het heeft de acceptatie en noodzaak van IPv6 vertraagd, wat een betere oplossing is voor de huidige problemen.
  • Verhoogde kans op misadressering, overlapping van de publieke en private adressen is mogelijk waardoor de router in sommige gevallen de adressen niet meer kan toewijzen aan een bepaald netwerk.
  • Incompatibiliteit met een aantal protocollen kan ervoor zorgen dat deze niet meer correct functioneren.
  • Afscherming van het private netwerk van het publieke netwerk; dit kan uiteraard ook als een voordeel beschouwd worden.
  • De firewall-functionaliteit kan misbruikt worden: als er een gebruiker in het private deel van de NAT-router een aanval doet op een externe gebruiker zal het ook moeilijker zijn om te achterhalen welke gebruiker dit is omdat het IP-adres verborgen wordt door de router.
  • Intensief voor de computatieve capaciteiten van de router aangezien er checksums aangepast moeten worden per datapakket.
  • NAT heeft echter ook een aantal beveiligingsproblemen, omdat TCP-headers niet mogen gecodeerd worden zodat de NAT router zijn functionaliteit kan behouden.

Problemen met protocollen

NAT vertaalt dus de IP-adressen en UDP/TCP poortnummers van een privaat netwerk naar deze van het publiek netwerk. Een probleem ontstaat wanneer informatie uit deze velden ook wordt opgenomen in de data van een ander protocol, vaak boven de netwerklaag. Meestal moet er ook rekening worden gehouden met de controlesom van een protocol. Doordat het IP-adres en/of de TCP/UDP poortnummers worden aangepast is het noodzakelijk dat de controlesom opnieuw berekend wordt. Dit komt voor bij het TCP en UDP protocol. Al deze berekeningen zorgen ervoor dat NAT computatief intensief is.

NAT is protocol onafhankelijk ontworpen en biedt dus ook geen oplossing voor dit probleem. Om dit probleem toch te kunnen verwerpen wordt er gebruik gemaakt van application layer gateways ( ALG ). De payload van zo'n protocol mag dan ook niet gecodeerd worden tenzij de ALG beschikt over de decoderingsleutel.

ICS

Vernoemenswaardig is Internet Connection Sharing, een protocol dat netwerkvertaling doet en daarmee vergelijkbaar is met NAT. ICS wordt typisch gebruikt op een Windows XP workstation of op een Windows Server 2003 server. Vanwege de gedeelde functionaliteit is het niet mogelijk dat ICS en NAT samen op hetzelfde netwerk bestaan. ICS is simpeler in installatie maar ook beperkter in mogelijkheden en wordt daarom meer in thuisnetwerken gebruikt om een kleine groepering computers internettoegang te verschaffen.

Zie ook