Ik heb al enige ervaring met IPv6.
Sinds 2009 heb ik via
Hurricane Electric twee IPv6 prefixes
(/64 en /48).
Deze prefixes verlopen via een tunnel naar
Hurricane Electric, en stamt nog uit de tijd
dat providers geen IPv6 prefixes utgaven.
Ook heden ten dage geen senicure;
ondanks dat er geen IPv4 subnetten meer
aangevraagd kunnen worden zijn er nog maar enkele internet providers die
IPv6 aanbieden aan hun klanten.
Mijn huidige internet provider biedt IPv6 aan, ik maak hier echter geen gebruik van.
Mijn IPv6 prefix bij Hurricane is ‘echt’ van mij, en is provider onafhankelijk.
Als ik morgen naar een andere aanbieder ga, hou ik toch mijn ‘eigen’ IPv6 prefixes.
Dat scheelt minimaal een heleboel werk in mijn DNS, routeringen, firewall, ed.
Tot zo ver. Ook al enige jaren in gebruik is mijn VPN, opgezet voor mijn mobiele apparaten (Telefoon, tablet, laptop), gebruik makende van OpenVPN.
Vooral als je wel eens gebruik maakt van onbekende (wifi) netwerken is het raadzaam
om een VPN te gebruiken.
Al het verkeer wordt dan versleuteld verzonden via de VPN server verzonden.
Dat was in eerste instantie niet de opzet van mijn VPN,
maar zo kon ik op afstand de apparaten in mijn thuisnetwerk benaderen.
Omdat ik al IPv6 had draaien was ik benieuwd of OpenVPN ook IPv6 ondersteunt.
Zo zou ik op locaties waar geen IPv6 beschikbaar was, toch via mijn tunnel gebruik maken
van IPv6. Mijn internetverbinding loopt via glasvezel (60 Mb/s symmetrisch),
dus bandbreedte is niet direct een probleem.
Helaas was het toen nog niet mogelijk om met OpenVPN op een normale manier IPv6
te gebruiken. Alleen via trucs en omwegen was dit mogelijk.
Even mee gestoeid, en toen weer teruggedraaid.
Ik zag er het nut niet van in om via omwegen IPv6 te kunnen gebruiken
via mijn VPN tunnel.
Een paar weken terug nog eens gekeken naar OpenVPN, en wat blijkt?
OpenVPN ondersteunt IPv6 nu wel. OpenVPN is via IPv6 bereikbaar als je een tunnel wilt
opzetten (als je op lokatie IPv6 beschikbaar hebt), en je kunt nu ook op eenvoudige wijze
IPv6 verkeer tunnelen. Een kleine aanpassing in de server config, en het was gepiept.
Het is zelfs eenvoudiger dan met IPv4. Subnetje aanmaken, OpenVPN service herstarten,
en het draait. Je hoeft zelfs geen routes te pushen want IPv6 regelt dat allemaal zelf.
Daar waar je met IPv4 moet aangeven welke subnetten via welke router bereikbaar
moet zijn, en moet aangeven of alleen lokale subnetten bereikbaar moet zijn,
of alle verkeer via de tunnel verloopt, regelt IPv6 dit allemaal zelf.
Grappig. Zet ik een VPN tunnel op, loopt het IPv4 verkeer direct via de internet provider
waar ik te gast ben, blijkt er een AAAA record te zijn voor betreffend adres,
verloopt het internet verkeer automatisch via de VPN tunnel.
Een hele tijd draait dit al zonder problemen. Tot vandaag.
Ik kon via mijn tunnel bepaalde services niet meer bereiken.
Mijn hosts waren online, en als ik IPv4 afdwong werkte het.
Het leek of de services gewoon niet meer draaiden op IPv6.
Met Nmap een poortscan gedaan op het lokale IPv4 adres.
Alle services waren online.
Met Nmap een poortscan gedaan op het IPv6 adres.
Een paar services waren nog bereikbaar, de rest was offline. Huh!?
De configuratie van een service bekeken, aangepast, herstart.
Niks, noppes, nada. De poort nog eens getest. Geen reactie.
Wat nu!? De logging van het systeem eens nader gaan bekijken,
en opeens viel mij op dat ik niet met mijn vertrouwde IPv6 bereik verbinding probeerde te
maken met mijn host, maar met een vreemd, onbekend IPv6 adres.
Zou het!? Zou op deze lokatie waar ik de VPN cliënt gebruik IPv6 voorhanden zijn?
De interface configuratie bekeken, en inderdaad.
Omdat er met IPv6 geen lokale IP adressen meer worden gebruikt,
zoals met IPv4 gebruikelijk is, en elk IPv6 blok standaard over internet gerouteerd
wordt, worden de pakketjes voor mijn LAN dus gewoon via de standaard internetverbinding gestuurd. Omdat ik een firewall aan heb staan, ook voor IPv6,
waren bepaalde services, die van buitenaf niet bereikbaar hoeven te zijn,
niet bereikbaar. Daarvoor dient nu net die (versleutelde) VPN tunnel.
Omdat IPv6 de routing zelf regelt had ik geen vaste routes ingesteld,
maar dat blijkt dus wel nodig. In de VPN server configuratie heb ik dit nu aangepast.
Elke cliënt die verbinding maakt met de VPN server, krijgt een vaste route toegevoegd
naar mijn eigen IPv6 subnet, zodat dit altijd via de tunnel verloopt.
Getest, en voila. De services die via internet door de firewall worden tegengehouden,
zijn gewoon bereikbaar via de versleutelde VPN tunnel.
Dan het volgende.
Ik heb een lokaal DNS domein opgezet,
omdat het onthouden van IPv6 adressen niet bepaald handig is.
Als ik de route niet goed heb staan, en het verkeer loopt via internet,
dan wordt dit verkeer door de firewall tegengehouden.
Daar heb je met IPv4 geen last van, omdat lokale IP adressen niet gerouteerd worden.
Het is overigens mogelijk om een lokaal IPv6 subnet te gebruiken,
maar wordt niet aangeraden.
Het voordeel van IPv6 is dat als je twee bestaande netwerken aan elkaar gaat koppelen,
je niet het risico loopt dat je twee keer hetzelfde IP net tegenkomt,
zoals bij IPv4 wel vaker het geval is.
Maar omdat ik nu een IP blok heb dat zowel lokaal als via internet wordt gebruikt,
heb ik in principe geen lokaal DNS domein meer nodig?
Ik heb meerdere domeinnamen geregistreerd, ik zou dus zo’n domeinnaam
kunnen gebruiken om elk apparaat in huis te voorzien van een DNS naam,
net zoals ik met een lokaal domein doe.
Of ik daar mee aan de slag ga, of dat ik een lokaal domein blijf gebruiken
moet ik nog over nadenken.
Nog even een waarschuwing:
Als je (net als ik) je VPN gebruikt om via een vreemd netwerk internet op te gaan,
kijk dan goed uit!
De functie redirect-gateway (routeer al het verkeer via de VPN)
mag dan wel goed functioneren met IPv4,
in IPv6 werkt dit standaard niet!
IPv6 verkeer heeft de voorkeur om niet via de VPN tunnel te verlopen.
Je denkt dan dat je veilig bent, maar dat is het niet!
Je kunt het beste de volgende regel in je configuratie zetten (ook al heb je (nog) geen IPv6): push “route-ipv6 2000::/3”
Dit zorgt dat al het (mogelijke) IPv6 verkeer naar je tunnel wordt gestuurd.