Wireguard en temp IPv6 adressen met OpenWRT, hoe dan?

TL;DR; Ik krijg IPv6 niet lekker aan de praat met een OpenWRT router die een Wireguard server draait voor een laptop en telefoon.

Hoe zijn wij hier dan beland?
Hoera, het is vakantie, dus we trekken de lanen op, de paden in. Eindelijk staat die #$$* tent dan een beetje redelijk en is het zondag. Verder heeft dat weinig betekenis, maar vrouwlief wil dan graag haar favoriete programma inzake boeren en daaraan gekoppelde hoe…danook verschillende vrouwen kijken. Dit kan via NPO start, waar we als hard-werkende burgers toch allemaal voor betalen, niet waar? Welke buitenlander zit er nu te wachten op Yvonne en/of haar Lada, maar goed, nadat de WiFi in een handomdraai is geactiveerd … oh ja. Je bent natuurlijk niet meer in NL, en dus mag je niet naar dat programma kijken. Probleem…

Omdat deze situatie allerminst bevordelijk is voor een goede start van de vakantie, en ik nog een paar uur had om de boel “te fiksen” (waarvan ik overigens nog steeds niet begrijp waarom dit mijn schuld is) snel mijn Squid proxy op mijn servertje thuis opgepookt, een gat in de vuurmuur geschoten, en hiermee zo pakweg een half uurtje voor het eind van de “deadline”, een geirriteerd begin van de vakantie voorkomen. Crisis afgewend. Toch?

Welja, maar wat mij natuurlijk niet lekker zat, is dat ik nu een open proxy had draaien, dus daar de volgende dag maar even een gebruikersnaam/wachtwoord op gegooid. Eerst via Basic, maar omdat de communicatie met de proxy niet via TLS verloopt (dat lijkt een unicum te zijn) dat maar lichtelijk opgewaardeerd naar Digest, wat beter is, maar zeker niet “OK”. Met deze proxy kunnen Firefox en macOS/iOS prima overweg, wat een heleboel “helpt”, maar bleek al vrij snel dat “kritieke apps” zoals instagram het niet doen. Die kunnen waarschijnlijk niet inloggen ofzo. Net als met de Threema messenger app, die wel de proxy instelling ziet, maar inloggen niet ondersteund. (Voor Threema heb ik dan ook direct een bug ingeschoten, maar nooit meer wat van gehoord, toch jammer, betaal je dan voor…)

Hoedanook, proxy was leuk, en werkte voldoende om de eerste behoefte te bevredigen, maar iets sterkers zou behoorlijk beter zijn.

Wireguard op OpenWRT
Doordenkend over hoe ik de proxy setup kon verbeteren, en vooral voor alles kon laten werken (dingen als mail, rsync, etc.) leek mij dat een VPN oplossing de volgende stap was. Gelukkig stond de WiFi toe om op welke poort dan ook te verbinden, dus hoefde ik geen trucen uit te halen via poort 80 of 443. Dat was eigenlijk bij de proxy al het geval, maar hoedanook een fijne test-omgeving. Na een kerkje hier en een leuk dorpje daar, besloot ik dan ook om de Wireguard tunnel die ik al thuis gebruikte om 3 verschillende internet aansluitingen aan elkaar te koppelen, uit te breiden met een “peer” voor mijn laptop en telefoon.

In mijn simplistische visie (die lang en goed werkt) heb ik de internet aansluiting van mijzelf, ouders en schoonouders aan elkaar geknoopt. Eigenlijk, ik heb de internet routers die gebruikt worden (en dus geen fritzdozen zijn) op een XS4ALL of Freedom verbinding zo ingericht met OpenWRT dat er een tunnel is opgebouwd die een IPv4 prive netwerk doorgeeft, waardoor een transparant virtueel netwerk (hè hè, VPN) ontstaat en ik zo de modems en WiFI APs die allen OpenWRT draaien kan onderhouden via de VPN tunnel (met een script), en ook metrieken per minuut kan opsturen naar mijn servertje thuis, zodat ik op een regenachtige zaterdagmiddag mij heerlijk in velerlei grafieken kan verdiepen via Graphite/Grafana. (Je leert heel veel bijvoorbeeld over wat ping-tijden met een KPN4ALL migratie doen.)

Dus… ik dacht doe even een “peer” voor mijn laptop, dan gebruik ik de wireguard app om een VPN te definieren, en jahoor, dat werkte, voor IPv4. Dat wil zeggen, een /29 toegewezen, waaruit de laptop 1 IP gebruikt, die statisch ingesteld op de laptop, en daarmee kan ik de routering prima in orde krijgen: laptop heeft toegang tot het interne netwerk (alsof het thuis op de niet-gasten-wifi zit, en begint zichzelf te backuppen) en als ik de default gateway over de Wireguard tunnel stuur dan komt al mijn verkeer van de tent via de wifi gewoon vanaf mijn thuis-adres… zolang het maar IPv4 is. Kortom, dat deel gehaald, maar een beetje … ouderwets.

IPv6 en Wireguard
Ik wilde meer. Terwijl de rest van het gezin het al lang best vond, dacht ik: “maar nu moet het helemaal kunnen werken.” En dus prutste ik verder. IPv6 dat was toch niets meer dan een ander adres, toch? Nou niet helemaal natuurlijk. Maar op de manier waarop ik een IPv4 prive adres wist door te lussen, kon ik ook een IPv6 subnet doorlussen. Met een statisch adres, <prefix>:<vpn-prefix>::<nummer> kreeg ik ook IPv6 werkend. Helemaal blij, totdat ik me realiseerde dat ik nu vrijwel alle features van IPv6 kwijt was. Men kon me nu zeer eenvoudig tracken. Ik gebruikte immers altijd hetzelfde IPv4 en IPv6 adres. De hele boel met tijdelijke adressen enzo werkte niet meer.

Dat leek me toch niet de bedoeling, dus na een hoop gegoogel vond ik http://www.makikiweb.com/ipv6/wireguard_on_openwrt.html en klooide hiermee. Maar ik krijg het maar niet voor elkaar.

Hoe doe je dit?
Wat ik wil, is een IPv6 prefix delegeren over een Wireguard tunnel. De instructies van makikiweb werken niet, want het DHCP scherm van OpenWRT 21.02.03 hebben “server” mode in grijs voor de wireguard interface. Kortom dat werkt niet. Maak ik er een nieuwe interface bovenop (zoals zij zeggen), dan kan ik wel RA/server selecteren, maar werkt het niet, de client ziet geen announcements, zo lijkt het althans. Wireguard is een beetje magie op dit punt, zo kun je in het DNS veld bijvoorbeeld servers en zoekdomeinen invullen.

Nu heb ik thuis twee WiFi netwerken, een voor gasten en een voor prive, maar eigenlijk zou ik alleen het gastennetwerk willen houden en gewoon vanaf mijn laptop altijd de Wireguard VPN aan willen hebben staan om in het prive netwerk terecht te komen. Natuurlijk wil ik dan wel IPv6 een beetje fatsoenlijk kunnen gebruiken.

Het liefst heb ik ook mijn telefoon altijd verbonden met mijn Wireguard VPN. Dat werkt prima voor IPv4, maar ik wil ook IPv6 kunnen doen. Dit moet uiteraard niet in het prive-netwerk terecht komen, dus hier heb ik een aparte Wireguard setup voor die enkel en alleen in het gastennetwerk uitkomt. Dat is bijvoorbeeld vanaf hier in ons tentje nogsteeds beter (het is ook vreemd genoeg sneller), maar bovenal natuurlijk fijn dat er niemand “meekijkt” bijvoorbeeld op DNS niveau.

De uiteindelijke vraag
Heel lang verhaal, dan heel kort: heeft er iemand ervaring met IPv6 en Wireguard, en zoja een idee hoe ik IPv6 temp addresses kan krijgen op de client via de Wireguard tunnel? Of wat dan ook het beste is dat je kan krijgen? Alvast bedankt!

ja ik denk dat ik heb wat jij wil, maar zonder OpenWRT…

Config op HomeRouter

[Interface]
ListenPort = HomePort
PrivateKey = GHJKHGKJGKJGJKGJHGJHGJKHGKJ
Address = WireGuardIPv4/24, WireguardIPv6/64

En per remote phone/table/PC

[Peer]
PublicKey = asdfasdffasddfasddfasdfasdfasdffasdf
AllowedIP's = WireGuardIP4ofPhone, WireguardIPv6ofPhone

Op elke remote:

[Interface]
Address=WireguardIPv4ofPhone, WireguardIPv6ofPhone
PrivateKey=AFAFSSAFDSAFDSADGDSSGSG
DNS=MyHomeDNS (=pihole)

[Peer]
PublicKey=jhlhlhljkj;kj;j;kj;lkjkjkjkjkljlkjkljlklkh
AllowedIP's = 0.0.0.0/0, ::/0
PersistenKeepAlive=120
EndPoint=HyHomeRouter:HomePort

(Voor Endpoint heb ik alleen IPv4 omdat mijn Telco provider mij alleen een CG-NAT IPv4 adres geeft, een IPv6 heeft daar geen zin).
En ik kan een IPv6 only naam in mijn netwerk bereiken.
Jet heb wel vaste IP adressen per toestel.

BTW: Met onderstaan scriptje kun je de endpoint config omzetten in een qr code die door de endpoint wireguard op telefoon/tablet gescanned kan worden: (op een linux bak kun je het ook op een console window laten draaien de QR code is scanbaar…

mk-qr

#!/bin/bash

CONF="$1"
if [ "$CONF" == "" ] || [ ! -f "$CONF" ]
then
        echo "Missing config file\nUsage: $0 config-file"
        exit 1
fi

qrencode -t utf8 < $CONF

Ok, top, maar hoe doe je de router advertisements dan? Mijn config doet vergelijkbaar aan wat jij nu doet, maar krijg dus alleen WireguardIPv6ofPhone in gebruik.

Router advertisements?.. waarvoor dan?.
Wireguard levert een Point to Point op. (vgl ppp, pppoe, pppoa etc.) daar passen geen RA’s bij.

Dus het assigned IP adres is HET adres dat over de tunnel gaat (en is dus een subset, assign uit je eigen reeks…)
Je hebt een /48 prefix, dus je kan er makkelijk een van 64K subnetten toewijzen aan Wireguard…
En je kan de Sub adressen erbinnen ook een voor een toekennen:
Telefoon 1 = PREFIX:1234::1 …
Telefoon 2 = PREFIX:1234::2 …
(dat kan ook meer handmatig random natuurlijk)… Wireguard heeft geen “random” ranges (helaas een beperking).
Op een android Hotspot wordt uitsluitend het verkeer van de telefoon zelf getunneld, alle aangesloten toestellen worden buiten de tunnel omgeleid, ook al is de tunnel verplicht. Eventueel aangehangen PC’s, telefoons etc. moeten hun eigen VPN broek ophouden.

:frowning: tot dusver heb ik het dus allemaal al, denk dat ik begrijp wat makikiweb anders doet, die heeft twee routers, dus deelt gewoon adressen op de prefix uit. Ik wil enkel een client opzetten. Denk dat de conclusie is dat dit niet gaat.

Ik heb een soortgelijke configuratie met mijn pfSense.

Als je je router een client maakt denk ik inderdaad dat dat niet gaat. Tenzij je al je IPv6-traffic tunnelt door dat ene IPv6-adres van je router, en dus effectief NAT / masquerading gaat toepassen.

Inderdaad, wat jij beschrijft heb ik nu exact zo gedaan.

Client heeft nu een IPv4 xxx.xxx.xxx.ID en een IPv6 2a10:3781:xxx:xxx::ID, maar ik wilde dus graag dat de client een IPv6 temporary adres zou gaan creeren, op de server kant routeer ik immers de /64.

Ik denk waar de verwarring zit, is dat Wireguard geen gedoe met dhcp e.d. doet. Wat het wèl kan is geweldig, en misschien moet ik maar gewoon accepteren dat ik nu een “vast” IPv6 adres gebruik, trackers weten me toch wel te fingerprinten. Het werkt in ieder geval prima nu.

Met routers denk ik eigenlijk dat ik het wel aan de praat kan krijgen, maar dan heb ik het niet nodig. Gelukkig :slight_smile:

Heb wel nog last van dat ik geen IPv6 adres op de Wireguard interface kan aanbrengen op vrijwel identieke routers met identieke configuratie, anders dan die van mijzelf. Ik probeer dat nog uit te vissen, zodat ik ook IPv6 kan gaan tunnelen, tussen de aparte netwerken. Nu moet alles via IPv4 lopen om versleuteld te zijn.

Als het goed is kan Wireguard ook over IPv6 net zoals het met IPv4 kan.
Alleen moet de andere kan van de tunnel (buitenkant) dan ook IPv6 hebben.
En IPv6 door een IPv4 tunnel of IPv4 door een IPv6 tunnel moet ook kunnen.

Ik heb alleen een Telefoon provider (maar daar ben ik niet uniek in denk ik) die alleen IPv4 ondersteund.

Ik heb het topic even aangepast om beter overeen te komen met wat ik wil. Op dit moment zijn er geen vragen aan mijn kant over het kunnen routeren van IPv6 verkeer. Mijn telefoon kan nu via de Wireguard VPN tunnel IPv4+IPv6 doen (wat meer is dan zonder inderdaad). Wireguard kiest zelf of het de tunnel opzet via IPv4 of IPv6, in het geval van mijn telefoon dus 4 op het mobiele netwerk, via wifi soms 6.

NordVPN heeft het volgende over “privacy” bij VPN tunnels geproduceerd:

How can WireGuard’s privacy problem be fixed?

VPN services have come up with a few different solutions to WireGuard’s privacy problem.

NordVPN developed a double-NAT system for their WireGuard implementation, which they call NordLynx . The system,

…creates two local network interfaces for each user. The first interface assigns a local IP address to all users connected to a server. Unlike in the original WireGuard protocol, each user gets the same IP address.

Once a VPN tunnel is established, the second network interface with a dynamic NAT system kicks in. The system assigns a unique IP address for each tunnel. This way, internet packets can travel between the user and their desired destination without getting mixed up.

The double NAT system allows us to establish a secure VPN connection without storing any identifiable data on a server. Dynamic local IP addresses remain assigned only while the session is active. Meanwhile, user authentication is done with the help of a secure external database.

uit:

Proton doet dat in feite ook.

“Proton VPN’s implementation of WireGuard has also been modified to use a double-NAT system, ensuring that it protects your privacy.”

Ik zal er wel niks van snappen, maar dit klinkt echt als een hele grote hoop str^Wonzin.

… of de interface is restarted. Maar met OpenVPN is je connected IP adres niet zichtbaar ofzo? Vroeger toen ik nog de IP stack onderwezen kreeg, was het adres een standaard onderdeel van een pakket. Ze zouden ook gewoon de wireguard peer kunnen resetten als de laatste handshake > timeout. Lijkt me een klassiek voorbeeld van marketing gebaseerd op “angst”. Daarnaast (2e marketing strategie), om niet te missen om “mee te kunnen doen”, hebben ze iets bedacht zodat WireGuard, dat simpelweg zeer aantrekkelijk is, “acceptabel” te maken. Dat is waarschijnlijk het verkoop praatje om een routering/shaping/QoS oplossing te kunnen toepassen op het wireguard verkeer, omdat (als ik het goed heb) het verkeer zonder dit niet vanaf een afzonderlijke interface of traceerbaar is in routingregels. Door er een NAT-laag op te leggen krijgen ze direct de controle om een client te kunnen monitoren, en waar nodig af/bij te snijden.

In feite is het gebruik van een VPN service per definitie een verschuiving van je privacy naar een (commerciele) derde partij. Compleet zinloos dus wanneer je in een land leeft/internet provider hebt waar je privacy beter gewaarborgd is dan op de VPN partij.

Ja, daar zijn we het sowieso over eens.

Ehm dit is heel erg naar de US situatie beschreven waar ISP’s proberen de reclame van Google/Facebook etc. door eigen reclame te vervangen door zelf hun eigen gebruikers to profileren en te vermarkten… In ieder geval beloven de VPN partijjen tegen betaling je niet te profileren, en dat is in het US juridische systeem wel wat waard.
Onder die omstandigheden helpt een VPN dienst wel enigszins tegen invasieve ISP.
Wireguard heeft in zoverre een issue dat er een profiel van een gebruiker moet vastliggen… door die tunnel heen, zou een gebruiker evt nog elders te volgen zijn.

Toepasselijk nieuws vandaag in Duitsland:

Die durven… anti privacy proefballon in Duitsland…

Heet het niet de “Patriot-Act”: privacy wetten beschermen in de VS alleen VS-burgers, niet mensen in hun buitenland. Daar verkijken wij ons nog wel eens op.
Als de VS-overheid iets wil weten over een buitenlander, dan is elk VS-bedrijf verplicht die info volledig op te lepelen.

Wat dat betreft is de AVG iets eerlijker, die maakt geen onderscheid tussen buiten-EU-ers en EU-ingezetenen. Tegenover elk mens noet een organisatie hetzelfde gedrag vertonen.

Of zit ik er naast?