# Wireguard et IPv6

**URL:** <https://www.debian-fr.org/t/wireguard-et-ipv6/86795>\
**Category:** Support Debian\
**Tags:** ipv6\
**Created:** [Juillet 14, 2022, 9:48 UTC](https://www.debian-fr.org/t/wireguard-et-ipv6/86795 "2022-07-14T09:48:02Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![jul](https://www.debian-fr.org/user_avatar/www.debian-fr.org/jul/32/4088_2.png) [@jul](https://www.debian-fr.org/u/jul)\
**Post date:** [Juillet 14, 2022, 9:48 UTC](https://www.debian-fr.org/t/wireguard-et-ipv6/86795/1 "2022-07-14T09:48:02Z")

</div>

Bonjour,

Cela faisait bien longtemps que je n’étais pas passé par ce forum qui m’a rendu bien des services il y a quelques années maintenant. Je tente donc ma chance 🙂

Je ne parviens pas à configurer wireguard en IPv6.

Je m’explique :  
Depuis quelques mois, mon FAI (SFR pour ne pas le nommer), a upgradé ma box pour prendre en charge IPv6. Mais, du coup, je n’ai plus de de «&nbsp;vrai&nbsp;» IPv4, je suis en IPv4-CGNAT. En gros, je ne peux plus faire de nat avec de l’ip4. J’ai dû basculer tous mes services (nextcloud, etc… en ipv6 only).

La seule chose qui me manque c’est de pouvoir me connecter à mon VPN domestique en IPv6. En IPv4, j’y parvenai sans soucis, ce qui me permettait, par exemple, d’obtenir mon IP française pour regarder la TV depuis l’étranger.

Je souhaiterai pouvoir faire l’équivalent en IPv6 : se connecter à mon VPN perso pour obtenir «&nbsp;mon IP domestique&nbsp;» (celle accordée par mon FAI) de n’importe où (en 4G notamment).  
Savez-vous comment faire ?  
Pensez-vous à une méthode alternative ?

Voilà  
En espérant avoir été clair.  
Merci  
Jul

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Juillet 14, 2022, 10:48 UTC](https://www.debian-fr.org/t/wireguard-et-ipv6/86795/2 "2022-07-14T10:48:47Z")

</div>

Je ne connais pas wireguard mais j’ai l’habitude d’IPv6 donc si je peux aider…

> [@jul](#):
>
> Je ne parviens pas à configurer wireguard en IPv6.

Quel est le problème exactement ? Etablir le VPN en IPv6 ou configurer la connectivité à travers le VPN ?

> [@jul](#):
>
> Je souhaiterai pouvoir faire l’équivalent en IPv6 : se connecter à mon VPN perso pour obtenir « mon IP domestique » (celle accordée par mon FAI)

Qu’appelles-tu «&nbsp;ton IP domestique&nbsp;» ? Tu n’as plus d’adresse IPv4 publique dédiée, donc s’agit-il d’une adresse IPv4 privée ou d’une adresse IPv6 globale de ton réseau ?

> [@jul](#):
>
> de n’importe où (en 4G notamment).

Il faut que le client ait une connectivité IPv6 globale n’importe où, et ça, ce n’est pas encore gagné.

---

<div class="post-metadata">

**Author:** ![jul](https://www.debian-fr.org/user_avatar/www.debian-fr.org/jul/32/4088_2.png) [@jul](https://www.debian-fr.org/u/jul)\
**Post date:** [Juillet 14, 2022, 11:55 UTC](https://www.debian-fr.org/t/wireguard-et-ipv6/86795/3 "2022-07-14T11:55:19Z")

</div>

> [@PascalHambourg](#):
>
> Je ne connais pas wireguard mais j’ai l’habitude d’IPv6 donc si je peux aider…

Merci c’est gentil, l’ipv6 c’est confus pour moi. Je vais essayer de préciser…  
En fait mon réseau local fonctionne encore avec de l’ipv4. Tous mes «&nbsp;clients&nbsp;» ont donc une ip4 privée (192.168.X.X), une ip4 publique commune (celle de ma box que je ne peux pas «&nbsp;nater&nbsp;») et une ip6 publique (2a02:8428:80b7:ca01::/64) attribuée par ma box.

Je te donne la conf wireguard en ip4 qui fonctionnait quand j’étais en ip4 :  
côté «&nbsp;serveur&nbsp;» :

```auto
Address = 192.168.123.1/24 
ListenPort = 60000
PrivateKey = xxxxxxxxxxxxxxxxxxxxxxxx 
   
[Peer]
# teljul
PublicKey = xxxxxxxxxxxxxxxxxxxxxxx
AllowedIPs = 192.168.123.2/32 
PersistentkeepAlive = 60 

[Peer]
# tab
PublicKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
AllowedIPs = 192.168.123.3/32
PersistentkeepAlive = 60

```

Coté client :

```auto
# phone_jul
Address = 192.168.123.2/24
PrivateKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ListenPort = 60000
DNS = 192.168.123.1
       
[Peer]
# server
PublicKey = uMGPJN2aHwjxgJnwGG4EW8rVYvrBbpSCbW6sxIUv3GE=
Endpoint = 109.12.24.55:60000
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

```

Règles iptables :

```iptables
iptables -A FORWARD -i wg0 -j ACCEPT
iptables -A FORWARD -o wg0 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

```

Avec cette conf, de n’importe où en 4g, je parvenais à obtenir l’ip4 publique de ma box soit 109.12.24.55.

> [@PascalHambourg](#):
>
> Quel est le problème exactement ? Etablir le VPN en IPv6 ou configurer la connectivité à travers le VPN ?

Configurer la connectivité à travers le vpn.  
J’ai essayé diverses choses, un peu au petit bonheur la chance je dois dire :

- changer juste le «&nbsp;endpoint&nbsp;» en mettant l’ip6 du serveur
- Utiliser des adresses ip6 du type «&nbsp;2a02:8428:80b7:ca02::/64&nbsp;» à la place des «&nbsp;192.168.123.X&nbsp;»  
Bref, mes maigres compétences sont dépassées.

> [@PascalHambourg](#):
>
> Qu’appelles-tu « ton IP domestique » ? Tu n’as plus d’adresse IPv4 publique dédiée, donc s’agit-il d’une adresse IPv4 privée ou d’une adresse IPv6 globale de ton réseau ?

une ip6 du type «&nbsp;2a02:8428:80b7:ca01::/64&nbsp;» (ip6 publiques attribuées par ma box)

> [@PascalHambourg](#):
>
> Il faut que le client ait une connectivité IPv6 globale n’importe où, et ça, ce n’est pas encore gagné.

Exact, mais avec mon smartphone ça devrait passer.

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Juillet 14, 2022, 1:18 UTC](https://www.debian-fr.org/t/wireguard-et-ipv6/86795/4 "2022-07-14T13:18:02Z")

</div>

> [@jul](#):
>
> Configurer la connectivité à travers le vpn

Donc le VPN monte bien en IPv6 ? (pour autant que le concept de «&nbsp;monter&nbsp;» soit pertinent avec wireguard)

> [@jul](#):
>
> changer juste le « endpoint » en mettant l’ip6 du serveur

Tu as bien mis l’adresse IPv6 globale _persistante_ (non temporaire) en 2a02:8428:80b7:ca01::/64 de l’interface ethernet ?  
Si cette adresse est bien joignable de l’extérieur (la box pourrait avoir un pare-feu à état pour l’IPv6 dans lequel il faut définir les adresses/ports accessibles de l’extérieur), cela devrait suffire à monter le VPN.

> [@jul](#):
>
> Utiliser des adresses ip6 du type « 2a02:8428:80b7:ca02::/64 » à la place des « 192.168.123.X »

Pourquoi ? Tu as besoin d’accéder à des services IPv6 à travers le VPN ?  
Si tu veux attribuer une adresse du préfixe IPv6 de la box à un client VPN alors que ce préfixe et censé être utilisé sur le LAN de la box, le serveur doit faire du proxy-ND (équivalent du proxy ARP pour IPv4) pour cette adresse avec `ip neigh`.

---

<div class="post-metadata">

**Author:** ![jul](https://www.debian-fr.org/user_avatar/www.debian-fr.org/jul/32/4088_2.png) [@jul](https://www.debian-fr.org/u/jul)\
**Post date:** [Juillet 14, 2022, 2:44 UTC](https://www.debian-fr.org/t/wireguard-et-ipv6/86795/5 "2022-07-14T14:44:48Z")

</div>

Bon tout fonctionne comme je veux avec cette conf :  
serveur :

```auto
Address = 192.168.123.1/24, fdac:ce55::1/64
ListenPort = 60000
PrivateKey = xxx 
    
[Peer]
# teljul
PublicKey = xxx
AllowedIPs = 192.168.123.2/32, fdac:ce55::2/128
PersistentkeepAlive = 60 

[Peer]
# tab
PublicKey = xxx
AllowedIPs = 192.168.123.3/32, fdac:ce55::3/128
PersistentkeepAlive = 60

```

client :

```auto
# phone_jul
Address = 192.168.123.2/24, fdac:ce55::2/64
PrivateKey = xxx
ListenPort = 60000
DNS = 192.168.123.1, fdac:ce55::1
       
[Peer]
# server
PublicKey = xxx
Endpoint = [ipv6_publique_du_serveur]:60000
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25

```

règles ip6tables ajoutées (j’avais «&nbsp;oublié&nbsp;» la dernière…)

```ip6tables
ip6tables -A FORWARD -i wg0 -j ACCEPT
ip6tables -A FORWARD -o wg0 -j ACCEPT
ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

```

J’utilise visiblement des ULAs. D’après ce que j’ai compris, ce sont grossièrement les équivalents des adresse ip4 privées… Est-ce judicieux et cohérent ? bien incapable de le dire…

> [@PascalHambourg](#):
>
> Si tu veux attribuer une adresse du préfixe IPv6 de la box à un client VPN alors que ce préfixe et censé être utilisé sur le LAN de la box, le serveur doit faire du proxy-ND (équivalent du proxy ARP pour IPv4) pour cette adresse avec `ip neigh` .

J’obtiens bien une adresse du type «&nbsp;2a02:8428:80b7:ca01::/64&nbsp;» depuis mon smartphone et en 4g.

Par contre, j’ai bêtement copié/collé ces ULA depuis un site… On peut mettre ce qu’on veut tant que ça commence par fdxx ?

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Juillet 14, 2022, 3:42 UTC](https://www.debian-fr.org/t/wireguard-et-ipv6/86795/6 "2022-07-14T15:42:02Z")

</div>

> [@jul](#):
>
> J’utilise visiblement des ULAs. D’après ce que j’ai compris, ce sont grossièrement les équivalents des adresse ip4 privées

Oui, les adresses ULA sont utilisables par tout le monde et ne sont pas routées sur l’internet public. Avec la différence qu’un préfixe IPv6 ULA est censé être unique avec une très faible probabilité de collision, contrairement aux préfixes IPv4 privés.

> [@jul](#):
>
> Est-ce judicieux et cohérent ?

Si tu choisis de ne pas attribuer des adresses du préfixe IPv6 du LAN (avec du (proxy ND) aux clients VPN, il faut bien utiliser un autre préfixe. Mais c’est bien malheureux de devoir faire du NAT en IPv6…

> [@jul](#):
>
> J’obtiens bien une adresse du type « 2a02:8428:80b7:ca01::/64 » depuis mon smartphone et en 4g.

Tu parles de l’adresse IPv6 attribuée par la connexion 4G ? Elle ne peut pas être dans le même /64 que le LAN de ta box. Moi je parlais de l’adresse IPv6 attribuée par wireguard, qui peut être dans le préfixe du LAN à condition de faire du proxy ND (et pas besoin de NAT IPv6 dans ce cas).

> [@jul](#):
>
> Par contre, j’ai bêtement copié/collé ces ULA depuis un site… On peut mettre ce qu’on veut tant que ça commence par fdxx ?

Non, le «&nbsp;U&nbsp;» est pour «&nbsp;unique&nbsp;» et on est censé générer le préfixe ULA avec un algorithme particulier qui minimise la probabilité de collision. Il existe des générateurs en ligne.

---

<div class="post-metadata">

**Author:** ![jul](https://www.debian-fr.org/user_avatar/www.debian-fr.org/jul/32/4088_2.png) [@jul](https://www.debian-fr.org/u/jul)\
**Post date:** [Juillet 14, 2022, 5:41 UTC](https://www.debian-fr.org/t/wireguard-et-ipv6/86795/7 "2022-07-14T17:41:24Z")

</div>

> [@PascalHambourg](#):
>
> Mais c’est bien malheureux de devoir faire du NAT en IPv6…

Il me semble en effet que l’un des intérêts de l’ipv6 est de ne pas être obligé de faire du nat. Mais je ne vois pas comment faire autrement…  
Mais pourquoi est-ce «&nbsp;malheureux&nbsp;» ? En terme performance ?

> [@PascalHambourg](#):
>
> je parlais de l’adresse IPv6 attribuée par wireguard, qui peut être dans le préfixe du LAN à condition de faire du proxy ND (et pas besoin de NAT IPv6 dans ce cas

Je pense avoir compris que c’est la solution alternative que tu proposes. Je ne connais pas le proxy ND, je vais me documenter.  
Tu parles bien d’une adresse «&nbsp;2a02:8428:80b7:ca01::/64&nbsp;» ? Les ip publiques des clients de mon lan commencent toutes par ce préfixe.

> [@PascalHambourg](#):
>
> Tu parles de l’adresse IPv6 attribuée par la connexion 4G ? Elle ne peut pas être dans le même /64 que le LAN de ta box.

Oui, en 4g (hors du lan) avec la conf donnée plus haut. Pourtant avec test sur ce site :  
Sans wireguard activé : 2a02:8440:2416:c721:7ef0:f1e:b9e1:8bb9  
Avec wireguard activé: 2a02:8428:80b7:ca01:e65f:1ff:fe8e:5716

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Juillet 14, 2022, 7:06 UTC](https://www.debian-fr.org/t/wireguard-et-ipv6/86795/8 "2022-07-14T19:06:17Z")

</div>

> [@jul](#):
>
> Mais pourquoi est-ce « malheureux » ? En terme performance ?

Non, mais le NAT casse la connectivité de bout en bout et n’est pas compatible avec tous les protocoles.

> [@jul](#):
>
> Je ne connais pas le proxy ND, je vais me documenter.

Le protocole Neighbor Discovery (NDP) joue pour IPv6 un rôle similaire à celui du protocole ARP pour IPv4. Lorsqu’une machine veut envoyer un paquet IPv6 à une autre machine ayant une adresse IPv6 dans le même LAN, elle doit d’abord découvrir son adresse MAC grâce à NDP ; pour cela, elle envoie une requête NS et la machine cible renvoie une réponse NA. Mais si l’adresse IPv6 cible appartient à une machine qui n’est pas sur le LAN (comme dans le cas d’un VPN routé) alors la machine intermédiaire servant de routeur qui est connectée au LAN doit répondre à sa place afin de recevoir le paquet IPv6 qu’elle pourra retransmettre. C’est la fonction de proxy NDP. On peut configurer le routeur intermédiaire comme proxy NDP pour une adresse IPv6 donnée avec la commande ip neigh (cf man ip-neighbour).

```
ip neigh add proxy <adresse.ipv6> dev <interface_lan>

```

Une autre solution consiste à créer une route pour cette adresse sur la box, mais d’une part je doute que la box le permette et d’autre part ça ne marchera que pour les communications avec l’extérieur et pas avec les machines du LAN.

> [@jul](#):
>
> Oui, en 4g (hors du lan) avec la conf donnée plus haut. Pourtant avec test sur ce site

Pourquoi «&nbsp;pourtant&nbsp;» ? Sans le VPN, c’est bien l’adresse de la connexion 4G qui n’est pas dans le préfixe du LAN.

---

<div class="post-metadata">

**Author:** ![jul](https://www.debian-fr.org/user_avatar/www.debian-fr.org/jul/32/4088_2.png) [@jul](https://www.debian-fr.org/u/jul)\
**Post date:** [Juillet 15, 2022, 6:51 UTC](https://www.debian-fr.org/t/wireguard-et-ipv6/86795/9 "2022-07-15T06:51:40Z")

</div>

> [@PascalHambourg](#):
>
> Pourquoi « pourtant » ? Sans le VPN, c’est bien l’adresse de la connexion 4G qui n’est pas dans le préfixe du LAN.

J’ai dû mal comprendre quand tu disais :

> [@PascalHambourg](#):
>
> Elle ne peut pas être dans le même /64 que le LAN de ta box

En tout cas, merci pour cet échange. Tes explications sont, comme toujours, redoutables.  
Je vais me contenter de ça pour le moment et attendre quelques heures perdues pour me pencher sur ce proxy ND…

---

<div class="post-metadata">

**Author:** ![Dream](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/58f4c7/32.png) [@Dream](https://www.debian-fr.org/u/Dream)\
**Post date:** [Janvier 14, 2023, 7:40 UTC](https://www.debian-fr.org/t/wireguard-et-ipv6/86795/10 "2023-01-14T19:40:40Z")

</div>

Hello, je pense que je suis dans le même cas de figure que toi mais je part de beaucoup plus loin j’ai l’impression… je n’ai qu’un seul fichier de config (celui du client) je ne trouve pas celui du serveur ? doit-il être créer s’il ne l’est pas ?

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Janvier 14, 2023, 9:04 UTC](https://www.debian-fr.org/t/wireguard-et-ipv6/86795/11 "2023-01-14T21:04:55Z")

</div>

Je pense qu’il vaudrait mieux créer une nouvelle discussion décrivant ton cas de figure et ton problème ou ton besoin, éventuellement avec un lien vers cette discussion si tu penses qu’il y a des points communs.
