Hva er Network Address Translation?

Kan du finne ut hvilken IP-adresse maskinen din bruker når du bruker Internet hjemmefra? Om du har en Windows-maskin kan du hente frem et konsollvindu (skriv Win-R og CMD), skrive ipconfig og trykke enter. Da får du listet opp informasjon om alle nettverksadaptrene på maskinen, inkludert det som du bruker for å kommunisere med Internet. Finn ut hvilken IP-adresse som brukes.

Figur 1: IP-adressen lokalt på Ethernet-adapteret



Bruk så web-leseren på maskinen for å finne ut hvilken IP-adresse andre ser når du kommuniserer. Hent web-siden http://fongen.no/myip.php og noter den IP-adressen som fremkommer. Sammenlign disse to verdiene, og med stor sannsynlighet er de ulike.

Figur 2: IP-adressen som web-tjeneren “ser”



Denne observasjonen viser at den IP-adressen som maskinen din er konfigurert med, ikke er den som vises ut på nettverket. Om du sjekker denne adressen med andre som bruker det samme lokalnettet (skole, jobb, hjemme), vil du trolig observere at alle bruker den samme IP-adressen ut mot selve Internet, selv om de har sin egen adresse på maskinen sin.

Heretter vil vi omtale maskinen som endepunkt, fordi det ikke bare er datamaskiner som er koplet til nettet. Et endepunkt skiller seg fra en ruter ved at den ikke videresender andres IP-pakker.

Årsaken til at endepunktene opererer med to ulike adresser på denne måten, har å gjøre med knappheten på IP-adresser. IP-adressen har 32 biter, og det kan derfor ikke være flere adresser på Internet enn litt mer enn 4 milliarder. Antall endepunkter som bruker Internet er mye større enn dette tallet, og de som styrer Internet måtte finne en måte å dele på Internet-adresser for at alle skulle «få plass». Denne prosessen går ut på at alle på et lokalnett deler den samme IP-adressen mot Internet, og at den «interne» IP-adressen, altså den som er konfigurert på selve endepunktet, ikke er unik, men finnes også på endepunkter i andre lokalnett.

Erstatter IP-adresser i ruteren

Figur 3: Her vises hvordan IP-pakkens avsender- og mottakeradresser endres idet den passerer gjennom en NAT-enhet. Kilde: Wikipedia

Figur 3 viser et forenklet bilde av hvordan hjemmeruteren din bedriver noe som kalles Network Address Translation, forkortet NAT.

  • En IP-pakke som sendes fra endepunktet (“Host”) til Internet får sin avsender IP-adresse erstattet med ruterens eksterne IP-adresse, dvs. adressen på det adapteret som er koplet til Internet, i dette tilfellet 150.150.0.1.
  • En IP-pakke som ankommer fra Internet vil ha mottagers IP-adresse lik den på ruteren (150.150.0.1), og den vil bli erstattet med endepunktets IP-adresse, i dette tilfellet 10.0.0.1. Så vil pakken bli sendt til dette endepunktet på lokalnettet.

Dette arrangementet vil være “usynlig” både for endepunktet og web-tjeneren (“Server”), som kommuniserer som om de hadde en virkelig IP-rute seg i mellom. Endepunktet “ser” web-tjeneren med dens virkelig IP-adresse, og web-tjeneren “ser” ruteren (150.150.0.1) som sin klient.

Erstatter portnumre i ruteren

Siden endepunktet til venstre på Figur 3 ikke er alene i dette lokalnettet, men deler internet-forbindelsen med mange andre, er det et nærliggende spørsmål om hvordan ruteren erstatter mottakeradresser på innkommende IP-pakker: Hvilken av de lokale endepunktene skal motta pakken?

Løsningen på dette problemet finner vi i TCP-protokollen. Mange slags nettverksprogrammer benytter seg av TCP-protokollen for å transportere data mellom to prosesser på en kontrollert og pålitelig måte. Prosessene som er endepunkter i en TCP-forbindelse kjennetegnes ved to portnumre, og mellom to endepunkter har alle TCP-forbindelser unike par av portnumre.

En TCP-forbindelse kjennetegnes ved IP-adressene til endepunktene og de portnumrene som brukes av prosessene i hver ende. Et endepunkt som sender TCP-trafikk påført avsender port X vil motta TCP-trafikk påført mottaker port X, dvs. at TCP-protokollen forutsetter at samme portnummer benyttes for å sende og motta trafikk.

Ved å studere både avsender IP-adresser og TCP-mottakerportnummer i kan NAT-enheten videresende innkommende IP-pakker til riktig endepunkt på lokalnettet. NAT-enheten vedlikeholder en tabell for dette formålet, som har disse kolonnene:

Innside IPUtside IPInnside portInnside ny portUtside port
10.6.6.6182.6.4.222227777443
10.6.6.6228.2.4.63333888880
10.6.6.6328.2.4.63333999980
Tabell 1: NAT-tabellen i samsvar med Figur 4

Tabellkolonnene skal forstås på denne måten:

  1. Innside IP er den lokale IP-adressen til endepunktet bak NAT-enheten
  2. Utside IP er Internet-adressen til motsatt endepunkt (altså ikke NAT-enhetens Internet-adresse)
  3. Innside port er nummeret på TCP-porten som benyttes av det lokale endepunktet
  4. Innside ny port betegner et portnummer som erstatter Innside port i TCP-trafikk som sendes til Internet
  5. Utside port er nummeret på TCP-porten som brukes av motsatt endepunkt

Når NAT-enheten mottar en IP-pakke med innhold fra TCP-protokollen vil den lete i denne tabellen etter verdier i kolonnene 2, 4 og 5 som svarer til IP-pakkens avsenderadresse og TCP-portnumre. Så vil IP-pakkens mottakeradresse erstattes med verdien i kolonne 1, og nummeret for TCP-mottakerport vil erstattes med verdien i kolonne 3.

Figur 4 viser hvordan NAT-tabellen vist ovenfor kan bidra til å skille trafikk til tre endepunkter på lokalnettet. Endepunktene B og C benytter samme TCP avsenderport 3333 til samme endepunkt (28.2.4.6), derfor trenger vi kolonne 4 til å erstatte avsenderporten med et unikt tall, i dette tilfellet 8888 og 9999.

Dynamic PAT - Inbound Response Flow
Figur 4: Kilde: https://www.practicalnetworking.net/series/nat/dynamic-pat/

TCP-protokollen har enda en egenskap som forenkler vedlikeholdet av NAT-tabellen, nemlig at all trafikk forusetter en oppkopling, og siden en nedkopling av forbindelsen. En melding fra et lokalt endepunkt om å kople opp en forbindelse vil observeres av NAT-enheten som henter ut nødvendige opplysninger til kolonne 1, 2 3 og 5, og oppretter så en ny rad. Tilsvarende vil en melding om å kople ned forbindelsen bidra til at denne raden slettes igjen.

NAT ved bruk av UDP-protokoll

Som nevnt i forrige avsnitt har TCP-protokollen de nødvendige egenskaper for at NAT-enheten kan opprette og slette rader i NAT-tabellen. Dessuten foregår all trafikk mellom endepunktene mellom det samme paret av portnumre.

For nettverksprogrammer som bruker UDP-protokoll gjelder ikke dette. Her skjer det ingen opp- eller nedkopling av noen forbindelse, men IP-pakkene med UDP-trafikk sendes uten videre. Ofte vil UDP-kommunikasjons benytte det samme paret av portnumre for trafikk begge veier, men det er ikke et krav. Dette kompliserer vedlikeholdet av NAT-tabellen betraktelig, og NAT-enheten må ty til noen “hacks” for å gjøre så godt den kan:

  1. En UDP-pakke som sendes fra et lokalt endepunkt og som ikke har en rad i NAT-tabellen for behandling, vil medføre at det opprettes en slik rad, knyttet til en tidsfrist. Dersom det ikke sendes eller mottas noe UDP-trafikk som passer til denne raden innenfor denne tidsfristen vil raden slettes.
  2. NAT-enheten kan være programmert med kunnskap om nettverksprogrammer som benytter UDP-porter på en uregelmessig måte (f.eks. at programmet sender og mottar på ulike portnumre). I slike tilfeller vil det genererer flere rader i NAT-tabellen for å ivareta dette forholdet.

Som det fremgår av disse mekanismene vil det ikke finnes noen garanti for at et UDP-basert nettverksprogram vil fungere gjennom en NAT-enhet basert på disse mekanismene alene. Derimot kan gjenværende problemer løses med bruk av port forwarding.

Port forwarding gjennom NAT-enheten

Det er kun når en TCP-forbindelse koples opp fra et endepunkt i lokalnettet at NAT-enheten kan sette opp NAT-tabellen riktig, det er nemlig kun da at dette endepunktet kan identifiseres med sin lokale IP-adresse. Noe lignende gjelder også UDP-trafikk, at det er kun når den første IP-pakken med UDP-innhold kommer fra et lokalt endepunkt at NAT-tabellen kan settes opp slik at den siden kan videresende IP-pakker til riktig endepunkt i det lokale nettet (på “innsiden” av NAT-enheten).

Dette er til hinder for at et endepunkt i det lokale nettet kan virke som en tjener for endepunkter i Internet. Dersom en slik konfigurasjon er ønskelig, f.eks. at du ønsker å sette opp en web-tjener på et endepunkt i hjemmenettverket ditt, kan du sette opp NAT-enheten med faste regler for å vidersende IP-pakker basert på TCP- eller UDP-mottakerporten. For en web-tjener er dette normalt port 80, og en regel for port forwarding av web-trafikk trenger å vite den lokale IP-adressen til dette endepunktet.

Port forwarding vil gjøre at NAT-enheten erstatter IP-pakkens mottageradresse på innkommende IP-pakker, og avsenderadressen for utgående IP-pakker.

Port forwarding kan også bidra til at ukurante UDP-baserte programmer kan kjøres over NAT-enheten. Husk derimot at port forwarding er en sikkerhetsrisiko, fordi dette lokale endepunktet kan, om det blir overtatt av en kjeltring, bli et springbrett for å angripe andre endepunkter på det lokale nettet.

Hvilke adresser kan benyttes i det lokale nettet?

De IP-adressene som benyttes på det lokale nettet kan ikke også brukes i Internet, fordi de ikke vil kunne nås fra endepunkter i det lokale nettet. Det er derfor satt av Private Address Space, tre forskjellige adresseserier som ikke skal brukes på endepunkter i Internet, kun i lokale nettverk tilkoplet gjennom en NAT-tjeneste. Disse adresseområdene er:

10.0.0.0/8
172.16.0.0/12
192.168.0.0/16

Når lokale nett bak en NAT-enhet skal konfigureres skal endepunktene ha adresser innenfor disse områdene.

Leave a Reply

Your email address will not be published. Required fields are marked *

fourteen + 1 =