Skip to main content

Ik gebruik Wireguard om een VPN-verbinding op te zetten van mijn iPhone (als client) naar mijn computer thuis (als server). Mijn thuisaansluiting heeft een routeerbaar IPv6 internetadres. Dit werkt prima als mijn iPhone buitenshuis (in een hotel, b.v.) via een lokaal netwerk een IPv6-verbinding heeft met het internet.

Maar ja, IPv6 is niet overal aanwezig, dus dan wil ik dat over het KPN 5G mobiele netwerk doen. Maar dat lukt helaas niet…

De logs op de iPhone geven elke 5 seconden aan dat de "handshake" binnen die tijd niet gelukt is en dat er opnieuw een poging wordt gedaan. Op mijn computer thuis (de Wireguard server) zie ik dat de handshake poging van de iPhone eenmalig wordt ontvangen en dat er een correcte respons wordt gegeven. Tcpdump laat het volgende zien:

IP6 2a02:a420:xxxx:5461:f58c:6bfb:fd1a:bc1c.62337 >      2a10:3781:yyyy:1:1498:dbe2:a2d6:3166.51820: UDP, length 148

IP6 2a10:3781:yyyy:1:1498:dbe2:a2d6:3166.51820 >  2a02:a420:xxxx:5461:f58c:6bfb:fd1a:bc1c.62337: UDP, length 92

(Ik heb de adressen uit privacy-overwegingen enigszins gemaskeerd.) Dat zijn respectievelijk het 148-bit handshakeverzoek afkomstig van de iPhone en het 92-bit antwoord daarop verzonden naar de iPhone. Alleen dat antwoord komt dus niet aan op de iPhone. Dit probleem treedt alleen op via het mobiele netwerk van KPN.

Ik heb al diverse APN-instellingen op de iPhone geprobeerd: internet (default) en advancedinternet hebben hetzelfde probleem, portalmmm.nl werkt niet met IPv6. Zijn er nog andere APN-instellingen?

Ik heb hulp nodig om dit op te lossen.

APN advancedinternet ondersteund net als APN portalmmm.nl geen IPv6. Dus dat je zegt dat het met apn advancedinternet ook niet werkt klopt niet helemaal als het om ipv6 gaat. 

 

Ik heb een aantal vragen  

Ondersteund je Wireguard server een IPv6 en IPv4 of alleen IPv6?

Ik neem aan dat je router/modem port-forwarding doe voor IPv4 en IPv6 naar je Wireguard server?

Weet je echt zeker dat het hotel wifi netwerk IPv6 ondersteunde en dat het niet via IPv4 ging? 

Hou rekening mee dat er genoeg wifi netwerken zijn die nog geen IPv6 ondersteunen. Mocht je Wireguard server alleen IPV6 ondersteunen dan kun je geen vpn opzetten, indien je mobiel alleen een IPv4 adres heeft gekregen.

Heb je al eens naar de mtu size op je Wireguard server en op je iPhone bekeken?


APN advancedinternet ondersteund net als APN portalmmm.nl geen IPv6. Dus dat je zegt dat het met apn advancedinternet ook niet werkt klopt niet helemaal als het om ipv6 gaat. 

Klopt, dat werkte inderdaad niet.

Ik heb een aantal vragen  

Ondersteund je Wireguard server een IPv6 en IPv4 of alleen IPv6?

Beide, over IPv4 werkt het wel, maar mijn IPv4-adres raak ik kwijt en dan moet het alleen over IPv6 gaan.

 

Ik neem aan dat je router/modem port-forwarding doe voor IPv4 en IPv6 naar je Wireguard server?

Ja

Weet je echt zeker dat het hotel wifi netwerk IPv6 ondersteunde en dat het niet via IPv4 ging? 

Ja, het ging echt over IPv6.

Hou rekening mee dat er genoeg wifi netwerken zijn die nog geen IPv6 ondersteunen. Mocht je Wireguard server alleen IPV6 ondersteunen dan kun je geen vpn opzetten, indien je mobiel alleen een IPv4 adres heeft gekregen.

In het verleden heb ik al eens een VPS gebruikt als relay: vanaf iPhone met IPv4 naar de VPS, en dan vanaf de VPS met IPv6 naar mijn thuisaansluiting. Dat werkt, maar is veel gedoe met het onderhouden van de VPS - ik hoopte dat met de overstap van KPN mobiel maar IPv6 deze omweg niet meer nodig zou zijn.

De default MTU van 1420 werkt OK, ik heb ook lagere waarden al geprobeerd, zoals 1280 - maakte geen verschil.

Er is iets vreemds aan de hand: als het KPN mobiele netwerk UDP-verkeer blokkeert dan zou het handshake-verzoek mijn thuisserver toch ook niet moeten bereiken, maar dat doet het wel...🙁

 

 


Ah, ineens werkt Wireguard VPN wel met IPv6 over het mobiele 5G netwerk van KPN!😋 

Ik ben stug elke dag blijven proberen zonder ook maar iets aan mijn instellingen te hebben veranderd… Ik kan alleen maar concluderen dat KPN nog steeds het IPv6 mobiele netwerk aan het finetunen is.


Ik vond deze thread eigenlijk het meest on-topic, want ik loop nu ook tegen dit probleem aan. Ik heb drie KPN abonnementen in huis (OK, een daarvan is Simyo), allen met een iPhone. Ik kan met geen van deze mobiele verbindingen gebruikmaken van Wireguard naar mijn thuis netwerk of kantoor. Niet als hotspot en niet als mobiele client.

Er komt simpelweg niets binnen het de bestemming in een tcpdump, wat erop lijkt te duiden dat UDP niet toegestaan is op het “normale” APN (internet). Een ICMP komt wel binnen. Als ik naar een IPv4 hostname verbinding maakt zie ik in mijn Wireguard client dat hij omgezet wordt naar een DNS64 adres, dus CGNAT. Ik heb mijn server ook een native IPv6, daarop komen ICMP pings netjes binnen maar ook daar werkt WireGuard (dus UDP) niet. Als ik het APN op advancredinternet zet werkt alles wel.

Ik verbaas me er alleen over dat ik zo weinig hierover kan vinden online. Er moeten dan toch vele klanten zijn die geen VPN diensten kunnen draaien? Of zou de impact beperkt zijn omdat de meeste VPN suppliers ook een TCP fallback hebben? WireGuard dus niet. En daardoor gebruik je een stuk minder accu dan bv een DTLS tunnel of andere technieken, zoals bij Twingate.


@Zpeed 

Ik heb een rasperry pi als Wireguard server draaien en maak gebruik van apn internet. De Wireguard server draait bij mij achter mijn router/firewall door udp port 51820 te forwarden naar het privé IPv4 adres van de rasperry pi. Mijn mobiel heeft een IPv6 adres en een Wireguard client geïnstalleerd. Verder maak ik gebruik van een dns naam om de server te resolven. Ik heb thuis ook kpn als isp. Mijn toestel is een Samsung toestel. 

Kun je iets meer vertellen hoe jouw installatie eruit ziet? Bijvoorbeeld: Maak je ook gebruik van een dns naam om naar je server te gaan?

Wanneer ik de wireguard vpn heb opstaan via mijn toestel naar mijn huis netwerk en doe een ipv6 test dan zie ik mijn publieke IPv4 adres van mijn router/firewall en ik zie het native IPv6 adres van de Wireguard server. Al mijn internet verkeer van mijn mobiel loopt door de vpn. Met beide IPv4 en IPv6 adressen kan ik het internet bereiken. De vpn werkt met apn internet (IPv6) en met apn advancedinternet. 


Hoi, ik gebruik een iPhone, maar voor de rest eigenlijk precies hetzelfde.

Thuis een Ziggo aansluiting met native ipv6, die benader is via een hostname (die hostname geeft zowel A als AAAA terug). Voor ipv4 is het een simpele port forward, udp 51820. De docker container draait op een DMZ met het interface ipv6 direct op die docker (ipvlan netwerk in docker, direct op de router). Ik kan de host pingen op ipv6 van buitenaf. Ik heb overigens met een “dual” hostname geprobeerd maar ook met een ipv6-only hostname.

Het lijkt eigenlijk wel een bug in de WireGuard client voor IOS ofzo, want deze combinaties heb ik nu geprobeerd.

 

iPhone op Vodafone, ipv4 naar huis: werkt

iPhone op KPN, ipv6 (internet apn) naar huis: werkt niet, er komt op de interface niets noppes binnen naar de WireGuard externe interface.

iPhone op Simyo, ipv6 (internet apn) naar huis: zelfde als boven, werkt niet.

iPhone op KPN, ipv4 (advancedinternet apn) naar huis: werkt prima.

en nu de rare: hotspot via ipv6 (internet apn) met een Mac en WireGuard op die Mac: werkt, native op ipv6. Ook udp ping (nc -u -6) zie ik op de interface verschijnen.

 

Mijn voorlopige conclusie is dus dat het wel werkt op het mobiele netwerk, maar dat er iets mis is met WireGuard op IOS icm ipv6 en / of dns64. Ik ga verder zoeken...


 

en nu de rare: hotspot via ipv6 (internet apn) met een Mac en WireGuard op die Mac: werkt, native op ipv6. Ook udp ping (nc -u -6) zie ik op de interface verschijnen.

Het verschil tussen mobiel en hotspot lijkt best groot. Op mijn hotspot (gewoon Mac verbinding met hotspot op een iPhone) krijgt ik een ipv4 (doet de iPhone natten) EN een ipv6 adres. Wireguard draait daar gewoon op een of andere manier op ipv4, dus niet echt een supergoede test. nc op 6 met udp komt wel gewoon aan, dus dit lijkt meer een WireGuard issue dan een kpn mobiel issue.

Ik kijk er later wel naar, heb er al veel te veel tijd ingestoken nu. Voorlopig werkt advancedinternet gewoon goed op ipv4. 


Sorry voor het spammen van dit topic, maar ik ben er al uit. Voor het archief dus…

Ik gebruik een split tunnel. Daarbij gaan interne ranges en mijn publieke ipv4 door de tunnel. Het lijkt erop, op IOS lig dat door de DNS64 die KPN toepast het publieke IP eerst omgeschreven wordt naar een DNS64 naam en daardoor dus niet in de tunnel uitkomt. Zo simpel was het. Als ik gewoon naar een IP surf werkt het prima.

Dus maw: ik route 192.168.1.0/24 en mijn <publiek_ip> door de WireGuard tunnel. Als ik dan maar mijn diensten ga (let’s say home-assistant) dan resolve je die normaal naar <publiek_ip>, die door de tunnel gaat. Komt’ie op Traefik uit en daar staat een whitelist voor de VPN NAT range. Maar als ik op KPN zit, dan wordt die DNS vraag direct opgepakt en omgeschreven naar een DNS64 naar, dus <gw::ipv4 in hex> zeg maar, en die gaat gewoon over Internet en zie ik dus nooit op mijn tunnel….

Haha, dat was echt super lastig uit te zoeken, wat een opluchting. Nu nog een oplossing bedenken, een full tunnel heb ik weinig zin in.


Mooi dat je eruit bent! 😀

Ter informatie.

Ik heb trouwens ook nog even lopen spelen en bij mij werkt native IPv6 van mobiel naar server goed. Hiervoor in mijn dns records AAAA bij gezet en firewall rules aangepast. Zodat alles via ipv6 loopt.

Nu heb ik eigenlijk een dualstack oplossing voor mijzelf gecreëerd. 😀

Via apn internet (ipv6) naar ipv6 adres van Wireguard server. Ok

Via apn advancedinternet (ipv4) naar ipv4 adres van router/firewall port-forwarding naar privé IPv4 adres van Wireguard servers. Ok

Trouwens leuk dat je met docker werkt. 😀


Maar voor de duidelijkheid: jij stuurt gewoon alles je tunnel in, ofwel een full tunnel, correct?

ik probeer een on-demand split tunnel te gebruiken voor mijn interne applicaties. En dat is dus een issue met dns64 lijkt het. 🙂 Tenzij dat bij jou wel gewoon werkt natuurlijk. 


Ja. Al het verkeer gaat via de tunnel. Mijn lokaal en internet verkeer. Geen split.


@Zpeed 

In plaats van apn advancedinternet zou je ook apn portalmmm.nl kunnen gebruiken. Apn portalmmm.nl zit achter een NAT van kpn zonder IPv6. Dan heb je ook geen problemen met NAT64 of DNS64. Je iPhone krijgt dan een privé IPv4 adres. Met apn advancedinternet zit je mobiel direct aan het internet. 


Is daar documentatie van? Ik lees namelijk verschillende berichten over wat die APNs allemaal doen, bv portalmmm doet media compressie, wat ik niet wil.

Thing is. Als ik een portscan doe op mijn iPhone op wifi (waar ik het het IP gewoon kan zien), dan zie ik 2 tcp poorten openstaan, waar je verder weinig mee kunt. Redelijk “clean” dus. Als ik diezelfde scan doe op het ipv4 wat ik op advancedinternet krijg dan zijn die poorten niet open. Dus helemaal open staat het niet volgens mij, maar ik kan er niets over vinden online. Verder met een iPhone lastig uit te zoeken hoe het precies zit, kan bv niet direct het interface IP vinden van de 5g interface, ook niet in het servicemenu.

Een oplossing zou kunnen zijn om het helemaal dual-stack te maken, dus door de tunnel en dan alle publieke endpoints dual-stack in de DNS. Dan zou het moeten werken zoals ik bedacht had. Maar dan moet ik eerst zelf een WireGuard Docker image bouwen, die ik nu gebruik heeft geen volledige ip6tables in de modules.


Zover ik weet is dat apn portalmmm.nl en apn internet hetzelfde zijn, maar dat met apn internet je een IPv6 adres kunt krijgen en met apn portalmmm.nl niet. Wanneer ik mijn Android toestel met apn internet apn-protocol op IPv4 zet dan krijg ik net als apn portalmmm.nl een privé ipv4 adres. Welke achter een NAT zit. Ik heb het idee dat de NAT voor apn internet en portalmmm.nl hetzelfde is.

Voor apn advancedinternet weet ik dat deze direct aan het internet zit. Dus volledig transparant aan het internet zit.

Dit weet ik niet helemaal zeker, maar het kan zijn dat je toestel ook iets doet met NAT64 vertaling. Ondanks DNS64.

 


Ik ben ondertussen weer verder aan het proberen geweest en ik gebruik nu gewoon het standaard APN, dus DNS64/NAT64. Ik gebruik nog steeds mijn WireGuard tunnel, maar heb mijn diensten die ik onderweg “nodig” heb nu gewoon op native ipv6 staan. Publiek, net als voorheen op ipv4.

Beetje gedoe met Docker en Traefik, maar alles nu netjes met h2/h3 en op ipv6. :)

De rest, wat ik minder vaak nodig heb, achter de tunnel, ipv4-only. Als ik WireGuard in “full mode” aanzet werkt alles prima, ook op het internet APN.

Het was uiteindelijk geen transmissie of firewall issue, maar gewoon een DNS64 issue. Alles wat ik opzoek wordt omgezet naar een CGNAT ipv6, waarop dit niet opgepakt wordt door de tunnel. Daar is geen eenvoudige oplossing voor te vinden, andere resolver werkt niet (want geen dns64 / nat64), alles op ipv6 moet ik mijn WireGuard container ombouwen voor ipv6 support.

Het is goed zo voorlopig 🙂 Thanks voor de hulp en deze thread.