IPv6-over-IPv4 tunnel med OpenVPN

Hvordan benytte IPv6 gjennom OpenVPN-tunnel over IPv4 i grove trekk.

Jeg er så heldig at nettleverandøren min hjemme, Canal Digital/Telenor, benytter IPv6, noe jeg mener alle burde gjøre nå siden det ble bestemt som en internetstandard i 2017.

Jeg benytter selvsagt da IPv6 hjemme når jeg har mulighet til det, og har faste offentlige IPv6-adresser på alle enheter som burde ha det, og benytter DHCPv6 på resten, som på WiFi. Alt bak brannmur, selvsagt.

På mobil så bruker jeg Telia, da gjennom jobb. Telia støtter ikke IPv6 på mobilnettet sitt, så der er man fortsatt fastlåst på IPv4. Ikke at det nødvendigvis har en enormt stor betydning, men det skader ikke å være litt fremtidsrettet på IP-nettet.

Mange av de store entitetene på nettet, som Google, Facebook, Microsoft, m.f., bruker allerede IPv6. Ikke bare IPv6, men dual stack, så de støtter både IPv4 og IPv6. De fleste moderne nettlesere og operativsystemer vil nå også preferere IPv6 over IPv4, om mulig.

Hva fordelene med IPv6 er?

Vel, i de fleste tilfeller hvor man har en eller flere tjenester som må nås fra internett, kan det være litt mer styr med IPv4 enn IPv6 for tiden, rett og slett fordi det ikke eksisterer flere offentlige IPv4-adresser fritt tilgjengelig lenger. Alle er oppbrukt. Løsningen for noen år tilbake når dette ble tilfelle, var å begynne i stor utsrekning å benytte NAT (Network Address Translation).

Enkelt forklart betyr det at man kan benytte èn offentlig IP for flere forskjellige servere og tjenester for innkommende trafikk, samt at man også kan «gjemme» flere tusen brukere med interne IP-adresser bak èn offentlig IPv4-adresse for utgående trafikk.

NB. Jeg tenker å lage et eget innlegg angående interne og offentlige IP-adresser, inkludert klassebaserte IP-nett. Det kan være forvirrende å forholde seg til de forskjellige betegnelsene når man ikke kjenner til det så godt.

For å sette dette litt i perspektiv, er det totale antallet offentlige IPv4-adresser tilgjengelig på internett i verden 3 706 452 992 adresser.
Samtidig er antallet offentlige adresser i et /64 IPv6-nett, som er det man får for seg selv som en privatkunde, 18 446 744 073 709 551 616 adresser.

Om man har en offentlig IPv4-adresse, f.eks 198.51.100.10, på utsiden av en brannmur og man har to servere på baksiden av den hvor den ene kjører webserver på port 80 og har en intern IPv4-adresse 10.0.0.100, og den andre kjører SSH-server på port 22 med intern IP 10.0.0.200, kan man benytte NAT for å rute trafikk. Da blir trafikk som treffer den offentlige IPv4-adressen 198.51.100.10 på port 80 rutet mot 10.0.0.100 på port 80, og trafikk som treffer den offentlige IPv4-adressen på port 22 blir rutet til den interne adressen 10.0.0.200 på port 22. I tillegg må trafikken selvsagt åpnes for i brannmuren.

Routeren eller brannmuren hvor disse nettene er terminert, har en tabell hvor den tar vare på informasjon om hvor trafikken kommer fra og hvor den skal, slik at når den mottar returtrafikk fra f.eks 10.0.0.100, skriver den om pakken igjen og sender den tilbake til hvor forespørselen kom ifra opprinnelig, da med sin egen offentlige IPv4-adresse som avsenderadresse.

Når man har begrenset med offentlige IPv4-adresser og mange servere, blir dette ganske mye å holde styr på, avhengig av kompleksiteten og størrelsen i nettet.

Dette unngår man fullstendig med IPv6. Der har alt en egen offentlig IPv6-adresse, så i forhold til eksempelet over, kunne serverene hatt IPv6-adressene 2001:0DB8:10::100 og 2001:0DB8:10::200, som er offentlige, så ingen NAT. Alt man da trenger å gjøre er å tillate trafikk i brannmuren på port 80 mot 2001:0DB8:10::100 og tillate port 22 mot 2001:0DB8:10::200.

Når dette er forklart i enkle grep, er poenget mitt at det er fordelaktig at flest mulig kommer på nett med IPv6. Ikke bare fordi man slipper NAT selv, men man klarer nemlig ikke å nå en IPv6-adresse uten at man benytter IPv6 selv.

Derfor synes jeg det er litt kjedelig at jeg ikke får benyttet IPv6 på mobilnettet. Iallefall ikke hos Telia for øyeblikket. Jeg benytter IPv6 både hjemme og på jobb, så har begynt å bli ganske vandt med å ha det tilgjengelig.

Hvordan jeg ordnet IPv6 på mobil overalt

En løsning jeg fikk stablet på beina for å få tilgang til IPv6-nettet i verden på mobilnett når jeg er på farten, er å tunnelere IPv6-trafikk over IPv4 gjennom en OpenVPN-tunnel til en OpenVPN-server hjemme hos meg selv.

I diagrammet under vises en modell av nettverket mitt hjemme, uten at IP-adressene stemmer overens med virkeligheten, åpenbart. Det som skjer her, er at når jeg kobler opp med OpenVPN fra min mobiltelefon mot min offentlige IPv4-adresse hjemme, som er terminert på utsiden av min brannmur, på OpenVPN-porten vil den NATe den trafikken inn mot OpenVPN-porten på min DMZ-server som kjører OpenVPN-tjenesten. Denne er helt logisk separert fra mitt vanlige hjemmenett gjennom brannmur.

Videre vil mobiltelefonen autentisere seg med bl.a sertifikat opp mot serveren, og koble til den og opprette en VPN-tunnel. All nettverkstrafikk ut fra min mobiltelefon går da gjennom den tunnelen, via min OpenVPN-server, videre gjennom min brannmur hjemme og ut på internett.

Det som også skjer er at når tunnelen er opprettet, er at OpenVPN-serveren tildeler mobiltelefonen en IPv4-adresse og en IPv6-adresse inni tunnelen.

IP-adressene mobiltelefonen får er ifra nettverkene definert i OpenVPN-serveren; 10.8.0.0/24 for IPv4 og 2001:0DB8:COFE:300::/64 for IPv6.

IPv6-adressen er offentlig og vil være den faktiske adressen som vises på forskjellige steder når jeg navigerer på internett. IPv4-adressen som vil vises på internett vil være den offentlige IPv4-adressen som står på utsiden av brannmuren min, siden alle interne nett benytter NAT (eller PAT) for utgående trafikk, slik at det ser ut som alle enhetene på innsiden av nettverket kommer fra samme IPv4-adresse når de navigerer på internett.

OpenVPN-serveren vet at den skal sende all trafikk den ikke kjenner til direkte ut til brannmuren, både på IPv4 og IPv6, så sender brannmuren det videre ut på internett. Det er dette som er hensikten med en «default gateway.»

For at dette skal fungere må også brannmuren vite hvor nettet 2001:0DB8:COFE:300::/64 hører hjemme siden den ikke har noe kjennskap til det nettet, for å sende returtrafikk fra internett tilbake. Alt man trenger å gjøre er å be brannmuren om å sende trafikken for det nettet til IPv6-adressen til DMZ-serveren, så er alt i orden. Det samme gjør man for IPv4, så har man fungerende internett gjennom tunnelen.

Jeg skal ikke gå inn i konfigureringen av selve Linux-serveren og OpenVPN her, men det tenker jeg å lage et eget innlegg på.

Innlegget ville blitt veldig langt om jeg skulle gått inn i alle detaljer, men dette dekker det i grove trekk. Gjennom at OpenVPN-tunnelen går over IPv4 mellom mobiltelefonen og OpenVPN-serveren, sendes IPv6-trafikk inne i den tunnelen, og blir da en IPv6-over-IPv4-tunnel som gjør at man har IPv6-støtte overalt hvor man går.

Offentlige IP-adresser som er brukt som eksempler her, både for IPv6 og IPv4, er reservert for dokumentasjon og eksempler, og er ikke rutbare IP-adresser på internett, i henhold til RFC3849 og RFC5737.

Forfatter: Lars

Jeg kommer fra Sunnmøre og jobber som IT-konsulent i Trondheim og bruker en del av tiden min til relaterte ting på fritiden. Ellers blir det noen turer i marka med telt og fiskestang når anledningen byr seg og jeg har tid. Driver også med litt simulatorspill, primært innen fly.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *