Problème
- Par défaut le pare-feu IPv6 (Firewall) de la Freebox est désactivé.
- Pour protéger ses PC et autres appareils qui n’ont pas de pare-feu, on active le pare-feu IPv6 de la Freebox
- Mais alors notre serveur YunoHost n’est plus joignable en IPv6 sur le préfixe principal
Voici l’astuce que j’ai trouvée a priori nulle part d’autre sur le forum :
La Freebox permet de configurer plusieurs préfixes IPv6, par défaut elle attribue des IP dans le préfixe principal 2a01:xxxx:xxxx:xxx0::/64 aux appareils qu’on lui connecte (wifi ou ethernet). Les autres préfixes restent donc inutilisés par la Freebox et peuvent être délégués à des routeurs/serveurs secondaires, comme notre serveur YunoHost
L’idée est donc d’activer IPv6, et d’activer le pare-feu sur le préfixe primaire de la Freebox. Puis de déléguer un préfixe secondaire au serveur YunoHost en lui laissant la gestion du pare-feu. Le YunoHost se retrouve avec une IPv6 dans le préfixe de primaire et une dans le secondaire. Il faut que cette dernière soit la PreferredSource, sinon le diagnostique échoue.
Si on veut faire du docker sur le YunoHost il faut en plus qu’il accepte et gère la délégation DHCP sur son préfixe.
Solution
à faire côté Freebox :
https://mafreebox.freebox.fr/#Fbx.os.app.settings.ConnectionIpv6Config
- Paramètres de la Freebox > Connexion Internet > Paramètres IPv6
- Noter IPv6 de lien local (de la Freebox) :
fe80::xxxx:xxxx:xxxx:xxxx - Activer le firewall IPv6
- Ne pas Activer Firewall sur les préfixes secondaires
- Renseigner le préfixe local de votre serveur YunoHost dans Préfixe secondaire > Next Hop :
- Option 1 - lien local qu’on fixe :
fe80::100 - Option 2 (voir ci-dessous) - lien local auto-généré depuis la MAC :
fe80::xxxx:xxxx:xxxx:xxf9
- Option 1 - lien local qu’on fixe :
- Noter le préfixe secondaire correspondant : 2a01:xxxx:xxxx:xxx1::/64
à faire côté serveur YunoHost en ligne de commande :
Option 1 avec un lien local et une IPv6 publique qu’on fixe nous-même
- Créer un fichier (s’il n’existe pas)
/etc/systemd/network/enp2s0.network - Adapter et ajouter le contenu ci-dessous
- Puis
sudo systemctl restart systemd-networkd - Eteindre le serveur, redémarrer la box, rallumer le serveur (relâcher l’IP de lien local auto-générée depuis la MAC)
- Vérifier que la route préférée part bien de l’IPv6 qui est déléguée et donc pas derrière le pare-feu de la freebox :
curl -6 ifconfig.me - Doit renvoyer :
2a01:xx:xx:xxx1::1 - Dans le Diagnostique IPv6 de YunoHost :
-
IP globale : 2a01:xx:xx:xxx1::1 IP locale : 2a01:xx:xx:xxx0::100
[Match]
Name=enp2s0
[Network]
DHCP=ipv4 # On reste en DHCP IPv4 pour ne pas risquer de perdre entièrement l'accès pendant les tests
#IPv6AcceptRA=yes
#DHCPPrefixDelegation=yes
[Address]
Address= 2a01:xx:xx:xxx1::1/64 # première IPv6 du préfixe secondaire délégué
#[Address]
#Address= 2a01:xx:xx:xxx0::100/64 # 100ème IPv6 du préfixe principal géré par la freebox
[Address]
Address= fe80::100/64 # IPv6 de lien local
[Route]
Gateway= fe80::xxxx:xxxx:xxxx:xxxx # Lien local Freebox
PreferredSource= 2a01:xx:xx:xxx1::1 # Sinon le diagnostique passe par 2a01:xx:xx:xxx0::100 qui est derrière le pare-feu
Metric= 10
#[DHCPPrefixDelegation]
#Announce=no
#SubnetId=0x1
#UplinkInterface=:self
[DHCPv4]
UseDNS=no
Option 2 en prenant le lien local automatique généré depuis la MAC :
- Taper
ip apour récupérer :- adresse_mac : link/ether
xx:xx:xx:xx:xx:f9 - lien local :
fe80::xxxx:xxxx:xxxx:xxf9/64
- adresse_mac : link/ether
- Dans la config IPv6 de la Freebox
- Renseigner le préfixe local de votre serveur YunoHost dans votre Freebox Préfixe secondaire > Next Hop :
fe80::xxxx:xxxx:xxxx:xxf9(au lieu defe80::100) - Créer un fichier (s’il n’existe pas)
/etc/systemd/network/enp2s0.network - Adapter et ajouter le contenu ci-dessous
- Puis
sudo systemctl restart systemd-networkd - Vérifier que la route préférée part bien de l’IPv6 qui est déléguée et donc pas derrière le pare-feu de la freebox :
curl -6 ifconfig.me - Doit renvoyer : 2a01:xx:xx:xxx1:xxxx:xxxx:xxxx:xxf9
- Dans le Diagnostique IPv6 de YunoHost :
-
IP globale : 2a01:xx:xx:xxx1:xxxx:xxxx:xxxx:xxf9 IP locale : 2a01:xx:xx:xxx0:xxxx:xxxx:xxxx:xxf9
[Match]
Name=enp2s0
[Network]
DHCP=ipv4
#IPv6AcceptRA=yes
#DHCPPrefixDelegation=yes
[Address]
Address= 2a01:xx:xx:xxx1:xxxx:xxxx:xxxx:xxf9/64
#[Address]
#Address= 2a01:xx:xx:xxx0:xxxx:xxxx:xxxx:xxf9/64 # IPv6 du préfixe principal géré par la freebox
[Route]
Gateway= fe80::xxxx:xxxx:xxxx:xxxx # Lien local Freebox
PreferredSource= 2a01:xx:xx:xxx1:xxxx:xxxx:xxxx:xxf9 # Sinon le diagnostique passe par 2a01:xx:xx:xxx0:xxxx:xxxx:xxxx:xxf9 qui est derrière le pare-feu
Metric= 10
#[DHCPPrefixDelegation]
#Announce=no
#SubnetId=0x1
#UplinkInterface=:self
[DHCPv4]
UseDNS=no
A compléter
-
Tester la configuration du serveur YunoHost pour faire serveur DHCP sur son préfixe délégué, cf les éléments
DHCPPrefixDelegationen commentaire -
Résolu (ligne PreferredSource) :
Normalement il faudrait ajouter au serveur YunoHost une adresse sur le préfixe principal de la Freebox. Mais quand on fait ça le diagnostique YunoHost en IPv6 échoue car il teste cette IP qui est derrière le pare-feu. C’est les lignes qui sont commentées dans le code.cf :
- le routage ne nécessite aucune règle et pourtant sous Linux la stack ipv6 (noyau 6.10) a l’air d’ignorer les ICMP redirect (car la freebox qui est la gw par défaut répond aux machines du préfixe principal qu’il y a un chemin plus court vers le serveur ce qui est logique vu que tout est sur le même segment réseau, le comportement est donc normal) mais c’est facilement contournable en attribuant également une IP du préfixe principal au serveur, c’est du bricolage mais ça fonctionne