Wireguard ipv6 GUA
Configurer WireGuard avec une IPv6 unicast globale.
Un simple tunnel VPN à double pile avec prise en charge IPv6 globale.
WireGuard devient populaire auprès des utilisateurs de Linux en tant que VPN car il est intégré au noyau Linux, ce qui offre de meilleures performances
Cependant, de nombreux tutoriels et scripts qui configurent WireGuard le font avec NATing de l'adresse IPv6 et donnent à l'utilisateur une adresse IPv6 locale de lien. Cela amène le système d'exploitation à préférer IPv4 à IPv6.
⚠️ Wireguard IPV6 sur Raspberry Pi OS (bookworm) derrière une freebox et OpenWRT
Ajout d'un sous-réseau avec /80.
Possiblité d'utiliser des sous-réseaux plus petits avec un sous-réseau approprié.
Original Block - 2000:xxx:xxx:x11:328e::/80 For the VPN Endpoint - 2000:xxx:xxx:x11:328e::123/128 For the VPN Clients - 2000:xxx:xxx:x11:328e:ffff::/96 VPN Endpoint port - 51820 pihole network interface - eth0 Gateway 2000:xxx:xxx:x11::1
Nous donnons également une seule adresse IPv6 pour chaque client, mais vous pouvez également attribuer un sous-réseau par client.
Pour une configuration IPv6 vraiment appropriée, vous pouvez attribuer à chaque client un sous-réseau /64 et configurer SLAAC.
Ajouter les IPv6 sur eth0
Avec NetworkManager
sudo nmtui
CONFIGURATION IPv6
Ajouter les adresses:
2000:xxx:xxx:x11:328e::123/128 2000:xxx:xxx:x11:328e:ffff::/96
Redémarrer le service:
sudo service NetworkManager restart
Activer l'IP forwarding
Assurez-vous d'ajouter les éléments suivants à /etc/sysctl.d/99-pivpn.conf
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.ens5.accept_ra = 2
puis, pour appliquer les modifications: sudo sysctl --system
Configuration de l'interface wg0
- Dans les règles IPv4, nous effectuons un NAT pour l'adresse IPv4.
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE;
- Dans les règles IPv6, nous ajoutons une règle pour transférer le trafic vers l'interface Internet.
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;ip6tables -A FORWARD -i eth0 -o wg0 -j ACCEPT; ip6tables -A FORWARD -i wg0 -j ACCEPT; PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE;ip6tables -D FORWARD -i eth0 -o wg0 -j ACCEPT; ip6tables -D FORWARD -i wg0 -j ACCEPT;
- Version nftables avant l'ipv6
PostUp = nft add table ip wireguard;nft add chain ip wireguard wireguard_chain {type nat hook postrouting priority srcnat\; policy accept\;};nft add rule ip wireguard wireguard_chain counter packets 0 bytes 0 masquerade;nft add table ip6 wireguard;nft add chain ip6 wireguard wireguard_chain {type nat hook postrouting priority srcnat\; policy accept\;};nft add rule ip6 wireguard wireguard_chain counter packets 0 bytes 0 masquerade; PostDown = nft delete table ip wireguard; nft delete table ip6 wireguard
- Version nftables avec l'ipv6
PostUp = nft add table ip wireguard;nft add chain ip wireguard wireguard_chain {type nat hook postrouting priority srcnat\; policy accept\;};nft add rule ip wireguard wireguard_chain counter packets 0 bytes 0 masquerade; nft add table ip6 wireguard;nft add chain ip6 wireguard wireguard_chain {type nat hook postrouting priority srcnat\; policy accept\;};nft add rule ip6 wireguard wireguard_chain counter packets 0 bytes 0 masquerade;nft add chain ip6 wireguard FORWARD { type filter hook forward priority filter\; };nft add rule ip6 wireguard FORWARD iifname "eth0" oifname "wg0" ct state related,established counter accept;nft add rule ip6 wireguard FORWARD iifname "wg0" counter accept; PostDown = nft delete table ip wireguard; nft delete table ip6 wireguard
Pour l'IP client, nous utilisons les premières IP de la plage désignée. Dans IPv6, vous pouvez autoriser un grand sous-réseau ici et cela permettra au client de se déplacer dans différentes IP du sous-réseau.
<ode>AllowedIPs = 10.66.66.2, 2000:xxx:xxx:x11:328e:ffff::2/128
Donc dans /etc/wireguard/wg0.conf
[Interface] Address = 10.66.66.1/24, fd42:42:42::1/64 ListenPort = 51820 PrivateKey = PostUp = nft add table ip wireguard;nft add chain ip wireguard wireguard_chain {type nat hook postrouting priority srcnat\; policy accept\;};nft add rule ip wireguard wireguard_chain counter pac> PostDown = nft delete table ip wireguard; nft delete table ip6 wireguard ... ### Client 1 [Peer] PublicKey = #PresharedKey = AllowedIPs = 10.66.66.2, 2000:xxx:xxx:x11:328e:ffff::2/128
Configuration du client
Ici, nous autorisons une seule adresse IPv6. Si la configuration du serveur autorise un grand sous-réseau, nous pouvons la modifier en conséquence.
Adresse = 10.66.66.2, 2000:xxx:xxx:x11:328e:ffff::2/128
Configuration complète. Enregistrée dans /etc/wireguard/client1.conf
[Interface] PrivateKey = Address = 10.66.66.2, 2000:xxx:xxx:x11:328e:ffff::2/128 DNS = 2606:4700:4700::1001 [Peer] PublicKey = #PresharedKey = AllowedIPs = 0.0.0.0/0, ::/0 Endpoint = [2000:xxx:xxx:xxx:x11::123]:51820
Redémarrer le tunel
sudo wg-quick down wg0 sudo wg-quick up wg0
Notes:
- Traduire les régles iptables en nftables
ip6tables-translate -A FORWARD -i eth0 -o wg0 -j ACCEPT ip6tables-translate -A FORWARD -i wg0 -j ACCEPT => nft add rule ip6 wireguard wireguard_forward iifname eth0 oifname wg0 counter accept; nft add rule ip6 filter chain forward iifname "eth0" oifname "wg0" counter accept; nft add chain ip6 wireguard wireguard_chain {forward iifname "wg0" counter accept\;};
Adapter et tester les règles
sudo nft add chain ip6 wireguard FORWARD { type filter hook forward priority filter\; } sudo nft add rule ip6 wireguard FORWARD iifname "eth0" oifname "wg0" ct state related,established counter accept; sudo nft add rule ip6 wireguard FORWARD iifname "wg0" counter accept
- Pour effacer les règles:
sudo wg-quick down wg0 sudo wg-quick up wg0
- Pour contrôler les règles:
sudo nft list ruleset
- Résultat
table inet filter { chain input { type filter hook input priority filter; policy accept; } chain forward { type filter hook forward priority filter; policy accept; } chain output { type filter hook output priority filter; policy accept; } } table ip wireguard { chain wireguard_chain { type nat hook postrouting priority srcnat; policy accept; counter packets 4640 bytes 317839 masquerade } } table ip6 wireguard { chain wireguard_chain { type nat hook postrouting priority srcnat; policy accept; counter packets 1350 bytes 145915 masquerade } chain FORWARD { type filter hook forward priority filter; policy accept; iifname "eth0" oifname "wg0" ct state established,related counter packets 13820 bytes 9978553 accept iifname "wg0" counter packets 10031 bytes 3057534 accept } }
Freebox
Dans la configuration IPv6 du serveur freebox
- Activer le firewall IPv6
- ⚠️ Décocher, Firewall sur les préfixes secondaires (Le trafic entrant du wan/wan6 doit être bloqué sur le routeur derrière la freebox).
Routeur Firewall
- ⚠️ Sécurité: Le trafic entrant du
wan/wan6
doit être bloqué sur le routeur derrière la freebox. - Dans le firewall, faire le transfert du port
51820
vers l'ipv6 et l'ipv4 locale du raspberry pi
Source: https://blog.miyuru.lk/setup-wireguard-with-global-ipv6/