LINUX:Adressage IPv6
→ retour aux Notions de réseau
But
Le protocole réseau IPv6 (v6 comme version 6) est destiné à remplacer l'IPv4 qui est actuellement majoritairement utilisé. Mais comme ils sont incompatibles, tout équipement réseau à travers le monde doit les avoir activés tous les deux avec ce que cela implique pour toutes les couches et applications qui en dépendent si on veut passer définitivement à IPv6 et abandonner IPv4, ce qui est loin d'être le cas.
Le protocole IPv4 présente un peu plus de 4 milliards de combinaisons (232) et donc de machines pouvant être interconnectées sur Internet. Malheureusement suite à l'explosion de la population mondiale ayant accès à Internet et du nombre d'appareils diversifiés connectés, on arrive à saturation. En effet, dans nos pays, chaque personne a un PC, un smartphone et l'internet des objets se multiple: montre, lunette connectées, aspirateur, onduleur,...
Ce protocole a été conçu pour reporter cette limite très loin (2128 combinaisons) (environ 340 undecillions) et par la même occasion, le simplifier. Au contraire d'IPv4, tout appareil recevra une adresse IPv6 publique directement connectée à Internet.
Les systèmes Linux, MS Windows, iOS, MacOS, Android récents l'intègrent. Mais sur Internet les serveurs ne le sont pas toujours. Un conseil que l'on rencontre souvent, est de n'activer pour le moment que le protocole IPv4. De même tout modem/routeur des ISP ne sont pas configuré pour IPv6 ou du moins totalement ouvert. Par exemple, le BBOX de Proximus est configurée pour l'IPv6 mais ne laisse passer le trafic que dans le sens sortant.
Nous nous contenterons à la partie des interfaces physiques sous Linux afin d'accéder à Internet.
Adressage
Le protocole IPv4 se présente sous forme de 4 nombres séparés par des points. Chaque nombre va de 0 à 255, ce qui correspond à 28=256 combinaisons. Cette adressage comporte 2(8*4)=232 combinaisons.
Le protocole IPv6 est composé lui de 8 zones séparées par un double point (":"). Chaque zone est composée de 4 nombres hexadécimaux. Voyez l'article sur Octal, Hexadécimal et Binaire pour vous remémorer la notion d'hexadécimal. Cette adressage comporte 128 bits ou 2(4*4*8)=2128 combinaisons ou machines adressables.
Le schéma ci-dessous donne un exemple. La première ligne est la représentation officielle en hexadécimal, la seconde en binaire qui reprend les 128 bits.

Le protocole IPv4 avait une notion de masque de réseau (netmask) qui permet de définir deux parties: le réseau et les machines de ce réseau.
Sous IPv6, cette notion a changé. On définit un "prefix" et derrière un "host" ou machine. Entre les deux peut s'insérer un "sous-réseau", non représenté dans le schéma. Le chiffre final après de slash ("/"), "/64" représente ici le nombre de bits du prefix. Le prefix est "2A02:A03F:C92A:AA00::/64"
La notation finale, par exemple "/64", correspond au masque de réseau; il définit l'ensemble des machines appartenant au même groupe.
Les "prefix" ont été distribués aux grands acteurs d'Internet. Classiquement, au niveau d'un particulier, ce prefix est de 64 bits; pour une entreprise, il est plus réduit, par exemple 56 bits, de façon que la différence (64-56=8 bits) puisse servir à l'entreprise pour insérer des sous-réseaux entre le prefix et le host et donc à découper l'ensemble de ses machines en sous-réseaux (8 bits = 256 combinaisons = 256 sous-réseaux).
Dans mon cas, je suis un particulier et je suis abonné à un ISP: Proximus. Il m'a attribué au travers de mon modem/routeur (BBOX) un prefix de 64 bits. Dans l'interface Web de ce modem/routeur, on peut le consulter ("IPv6 Prefix"). Sur les 128 bits, il me reste 64 bits, c'est à dire 264 combinaisons ou adresses pour mes machines personnelles, ce qui est énorme.

Vous rencontrerez parfois une notation hexadécimale plus courte que 4 par zone. En effet les chiffres hexadécimaux nul ("0") de gauche sont souvent omis. Par exemple, la cinquième zone "021C" peut être notée "21C". Et dans le cas de "0000", elle devient vide "" et si on l'encadre des deux point (":"), la représentation devient "::". Si ce type de regroupement est unique dans l'adresse et comporte plus de deux ":", par exemple ":::" ou "::::", il peut être simplifié en "::". Par exemple, l'adresse "2A02:A03F:C92A:AA00:0000:0000:0000:0001/64" peut être simplifié en "2A02:A03F:C92A:AA00::::1/64" ou mieux "2A02:A03F:C92A:AA00::1/64".
Types principaux d'adresses
Nous n'allons pas passer en revue toutes les catégories d'adresses, mais les plus courantes:
- Loopback: C'est la boucle locale. Sous Linux, cet interface est nomme "lo" qui a l'adresse IPv4 "127.0.0.1" et en IPv6 "::1/128".
- Global Unicast: Ce sont des adresses attribuées à chaque machine, qui sont publiques et uniques et dont qui accèdent à Internet. Elle commencent par un "2" ou un "3". (prefix="2000::/3")
- Link-Local: Ce sont des adresses qui ne sont utilisables que sur le même réseau local strict (réseau de câbles et de switchs); elles ne sont pas routables et sans accès à internet. Similaire en IPv4 à "169.254.0.0/16" quand l'interface ne peut avoir d'adresse. Tout interface en a une d'office. (prefix="fe80::/10")
- Unique Local: Ce sont des adresses utilisables sur le réseau local de façon privée sans accès à Internet. Similaire en IPv4 aux adresses "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16" de nos réseaux locaux privés ou d'entreprises. (prefix="fc80::/8" et "fd00::/8"; le premier n'est pas utilisé)
- Multicast: Ce sont adresses attribuées de façon identiques à un ensemble de machines qui forment groupe privé. Quand un paquet est envoyé sur cette adresse, toutes les machines du groupe le reçoivent. (préfix="ff00::/8") Similaire en IPv4 à "224.0.0.0/4".
- Anycast: Même notion que le Multicast mais seul le premier du groupe qui se présente reçoit le paquet, utile lors d'équilibrage de charge. Pas de prefix défini.
En synthèse, en ce qui nous concerne directement, un interface réseau qui veut communiquer avec Internet recevra une adresse Link-Local et une Global Unicast. Notons qu'il est possible d'attribuer plusieurs adresses à un interface.
Activation d'IPv6
Au niveau des paramètres systèmes, il faut s'assurer que les suivants sont bien nuls:
net.ipv6.conf.all.disable_ipv6=0 net.ipv6.conf.default.disable_ipv6=0 net.ipv6.conf.lo.disable_ipv6 = 0
Pour le vérifier, par exemple pour le paramètre "net.ipv6.conf.all.disable_ipv6" on lance la commande de ligne:
sysctl net.ipv6.conf.all.disable_ipv6
Si ce n'est pas le cas, on ajoute les trois lignes dans le fichier "/etc/sysctl.conf".
Pour l'activer, soit on redémarre la machine soit on lance la commande:
sysctl -p /etc/sysctl.conf
Méthodes d'acquisitions d'adresses IP
Il existe diverses méthodes pour récupérer les adresses IPv6 et ses informations associées. Actuellement sous Fedora 44, c'est le service "NetworkManager.service" qui le gère. La configuration des interfaces, se retrouve dans le répertoire "/etc/NetworkManager/system-connections". Un fichier y est créé portant le nom de l'interface avec comme extension ".nmconnection", par exemple pour l'interface enp0s25", il aura comme nom de fichier "enp0s25.nmconnection".
Nous allons décrire succinctement ces méthodes.
En ligne de commande, on peut lancer l'application:
nmtui
En voulant modifier l'interface désiré, on a l'écran ci-dessous:

, on a une liste déroulante des méthodes dans laquelle on en choisit une. Des options peuvent être affinées par la suite.
De même, si on a accès à un écran de fenêtrages tel une Station de Travail, on peut accéder a cet équivalent.

On a les méthodes suivantes:
- Désactivé: Le protocole IPv6 est désactivé pour cet interface
- Ignorer: Un peu spécial, c'est la méthode par défaut du système qui est retenue, souvent "Automatique"
- Lien-Local: Seul l'adresse de type Link-Local vue plus haut est activée. L'adresse Global Unicast n'est pas créée donc on n'a pas d'accès à Internet.
- Manuel: On doit renseigner toutes les informations manuellement (adresse, masque, routes, DNS,...)
- Automatique (DHCP uniquement): C'est la méthode classique faisant appel à un serveur DHCP, existant sous IPv4 à l'exclusion de la route par défaut qui est fournie par le routeur concerné.
- Automatique: C'est une méthode toute nouvelle n'existant pas sous IPv4. L'adressage de type Global Unicast est généré automatiquement soit aléatoirement soit sur base de l'adresse MAC. Le prefix et la route par défaut est fournie par le routeur concerné. Si ce routeur le spécifie, la main peut être donnée au serveur DHCP. Dans le cas "aléatoire", l'adresse change à chaque redémarrage de façon a éviter le traçage. Elle est connue aussi sous le nom SLAAC (Stateless Address Autoconfiguration).
- Partagé: La configuration est récupérée comme pour la méthode faisant intervenir le serveur DHCP, ensuite le prefix est partagée avec les autres machines locales (utilité?).
Rappelons que l'adresse de type Link-Local est toujours générée sauf dans le cas "Désactivé".
Notons que pour l'adressage "Automatique" (SLAAC), la partie "host" doit avoir une longueur de 64 bits. Si ce n'est pas le cas, il faudra passer à une autre méthode.
Si on va modifier manuellement le fichier de configuration ou via la commande "nmtui", soit on redémarre la machine soit on relance le service concerné:
systemctl restart NetworkManager.service
Il est possible d'effectuer ces opérations via la commande "nmcli" qui a un effet immédiat.
→ retour aux Notions de réseau