Cet article répond à l'objectif d'éducation de base au réseau Internet tel que décrit dans ce précédent.

Il a pour but de permettre aux particuliers client d'un fournisseur d'accès Internet de comprendre le fonctionnement de base du réseau, et de résoudre leurs problèmes de connection.

Le réseau Internet connaît aujourd'hui un changement fondamental en ce qu'une nouvelle version du protocole IP se diffuse: IPv6. C'est l'objet de l'article présent.

Cet article est le pendant de celui-ci, portant sur la version précédente, IPv4, que certains voudraient vouloir déclarer obsolète, malgré qu'il s'agisse encore du protocole de base à peu près partout.

Internet IPv6

Internet est un réseau de réseaux. Des réseaux informatiques interconnectés et qui se parlent entre eux avec un langage commun : IP, soit Internet Protocol.

Les adresses IP permettent aux divers ordinateurs qui sont connectés sur ces réseaux de communiquer.

Les adresses IPv6 sont composés de huit groupes de deux octets (soit 128 bits), donc par exemple :

2001:0db8:0000:85a3:0000:0000:ac1f:8001
2a00:1450:400f:0804:0000:0000:0000:200e
2001:0470:2099:000e:0000:0000:0000:0002

La notation complète comporte 39 caractères pouvant aller de 0 à 9 puis de a à f.

Ces nouvelles adresses ont été conçues pour fournir un espace d'adressage tellement démesuré qu'on parle de millions, milliards, voir milliards de milliards d'adresses par millimètre-carré de surface terrestre.
Comme ça me paraissant délirant, je me disais que quelqu'un a fait une erreur de frappe ou d'ordre de grandeur. J'ai donc fait moi-même le calcul, et j'obtiens 0,6 milliards de milliards d'adresses par millimètre-carré (!!!).

Simplifier les adresses

Comme ces adresses sont longues (n'est-ce pas ?), il est possible de les raccourcir. Les groupes de caractères sont à considérer comme des nombres, donc on peut éliminer les 0 en début de groupe.

Par exemple dans cette adresse (qui ce trouve être celle de mon serveur) :

2001:0470:2099:000e:0000:0000:0000:0002

0407, 000e et 0002 peuvent être réduis à 407, e et 2 respectivement. Les groupes de 0 peuvent eux être ignoré (carrément) s'ils sont consécutifs et s'il n'y a pas plus de deux suites de 0 complètes dans l'adresse. Ce qui donne dans ce cas :

2001:470:2099:e::2

Oui, je sais, c'est en fait plus compliqué (pour simplifier la gestion du truc, on complexifie l'adresse… qui a inventé ça ?).

Mais ces adresses n'ont pas été conçues pour être mémorisées par des humains (c'est d'ailleurs un problème). Vous même n'avez pas trop à vous en préoccuper, je m’arrête donc là pour ça.

Passons aux différentes sortes d'adresses.

Adresses de lien local

Les adresses de lien local sont actives dès lors que la machine a une pile IPv6 active. Même en dehors du réseau, perdu au fin fond de l'Antarctique, cette adresse sera active sur la machine.

Elle est (en général) générée avec le préfixe fe80:: et l'adresse MAC (une sorte d’identifiant matériel) de la carte réseau, en y insérant ff fe au milieu.

Cette façon de générer les adresses est appelée auto-configuration sans état.

MAC: 00:26:b9:f6:d7:09
ipv6 local: fe80::226:b9ff:fef6:d709

Il est à noter qu'on peut apparemment utiliser une autre méthode pour créer les adresses de lien local. Mais je n'en ai jamais vu (mais je n'ai eu la main que sur des machines grand public sans configuration ou matériel spécifique).

Les adresses de lien local sont, comme leur nom l'indique, locales. C'est à dire qu'on ne peut pas les utiliser sur internet.

Je crois me souvenir que même si on a pas de connectivité ipv6 (pas de prefixe, pas de routeur ipv6, pas de connection à l'Internet IPv6), les machines sur le réseau local vont répondre à un ping sur cette adresse, même si personne ne s'est donné la peine de faire quoi que ce soit. Ça signifie que ces adresses offrent bien une connection, même basique. Donc elles doivent être protégées (un pare-feu doit être actif et configuré correctement).

On peut pinger ces adresses, on doit normalement indiquer quelle interface on utilise avec % suivi du nom de l'interface :

[stephane@Jabberwocky ~]$ ping fe80::20d:b9ff:fe3e:a812%eno1
PING fe80::20d:b9ff:fe3e:a812%eno1(fe80::20d:b9ff:fe3e:a812%eno1) 56 data bytes
64 bytes from fe80::20d:b9ff:fe3e:a812%eno1: icmp_seq=1 ttl=64 time=0.620 ms
64 bytes from fe80::20d:b9ff:fe3e:a812%eno1: icmp_seq=2 ttl=64 time=0.410 ms
^C
--- fe80::20d:b9ff:fe3e:a812%eno1 ping statistics ---i want to spend my lifetime loving youpe
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.410/0.515/0.620/0.105 ms

Adresses routables

Comme on a suffisamment d'adresses pour chaque grain de sable sur Terre, on a pas besoin de se gêner. Chaque ordinateur, téléphone, grille-pain, voiture, carte de bus (???) dispose d'une (ou plusieurs) adresse IP complète. Ce qui fait que ces adresses sont toutes directement accessibles, routables, sur internet.

Le type d'adresse se reconnaît (outre le prefixe) par une indication en bout de ligne :

wlp3s0b1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet6 2001:470:2099:a0:5eac:4cff:fe53:db1c  prefixlen 64  scopeid 0x0<global>
    inet6 fe80::5eac:4cff:fe53:db1c  prefixlen 64  scopeid 0x20<link>

On voit bien à la fin des deux dernières lignes ici : scope global ou scope link. Respectivement adresse globale (donc routable, donc publique), et adresse de lien.

Les préfixes et masques de réseau

Comme en IPv4, les réseaux IPv6 peuvent se découper en sous-réseaux de moindre taille. Ceci se fait grâce à la notion de masque ou de préfixe de réseau.

Le masque de réseau, indiqué souvent à la fin de l'adresse avec un /X ou prefix X, représente le nombre de bits en début d'adresse réservé au réseau. D'où le nom de préfixe.

Donc un /48 a 48 bits (les trois premiers groupes de caractères) réservé au préfixe réseau. Un /64 a lui les quatre premiers groupes de caractères réservé à l'adresse réseau.

Si vous me comprenez bien, un /48 peut contenir plusieurs milliers de réseaux /64, lesquels pourraient chacun contenir l'ensemble des adresses Internet actuelles sans se gêner.

Généralement, les FAI vont fournir un /48, un /56 ou un /64. Cette dernière solution est la taille minimale d'un réseau local IPv6 parce que c'est la taille sur laquelle se base l'algorithme de configuration sans état mentionné précédemment (slaac). Cet algorithme a besoin des 64 derniers bits de l'adresse (la moitié de l'adresse quand même). Donc un préfixe plus grand que /64 empiéterait sur l'espace d'adressage local.

NB : Il est néanmoins tout à fait possible d'utiliser un préfixe plus grand, mais ce ne sera à priori jamais votre cas. Il s'agit de cas d'administration spécifique (serveur en datacenter par exemple). Dans un réseau plus petit que /64, il n'est plus possible d'utiliser l’auto-configuration sans état. Il faut donc également configurer les adresses de lien local manuellement.

Pour configurer une adresse automatiquement, on récupère le préfixe (obligatoirement annoncé par le routeur), puis on adjoint les 64 bits autogénérés à partir de l'adresse MAC.

Donc une adresse lien local, c'est pareil : le préfixe est fixe, inscrit directement dans le code de la pile IPv6. Et les derniers bits sont ceux de l'adresse MAC.

C'est pour ça que les adresses globales slaac et les adresses de lien local ont la même fin.

Toutes les machines sur lesquelles j'ai eu la main pouvaient générer une adresse automatiquement. L'algorithme est inscrit dans le code de la pile IPv6.

Il existe aussi une méthode DHCP pour ipv6, où l'adresse vous est attribuée par le serveur du réseau, mais ceci nécessite de disposer d'un client DHCPv6 sur votre ordinateur, et d'un serveur DHCPv6 dans votre réseau, ce qui n'est pas toujours le cas.

Enfin, vous pouvez toujours configurer vos adresses manuellement.

Debug

Voici venu le temps du debug.

Ais-je une adresse ip globale ?

À moins que votre ordinateur soit un dinosaure ayant réussi à éviter de se mettre à jour au cours de la dernière décennie, vous disposez d'une pile IPv6.

Mais avez-vous une adresse globale ? Sous Unix-like, ça se vérifie facilement avec ifconfig en filtrant sur global :

[stephane@Jabberwocky ~]$ ifconfig|grep global
    inet6 2001:470:2099:e:226:b9ff:fef6:d709  prefixlen 64  scopeid 0x0<global>
    inet6 2001:470:2099:a0:5eac:4cff:fe53:db1c  prefixlen 64  scopeid 0x0<global>

Ici j'ai deux adresses globales, une pour chaque interface.

Sous Windows, l'utilisation de la commande ipconfig devrait suffire.

Si vous n'avez que les adresses de lien, et pas d'adresse globale, ça signifie très certainement que votre routeur ne diffuse pas de préfixe IPv6, ce qui signifie en conséquence que votre FAI ne supporte pas ce protocole. Vous devez donc aller les taper (sic).

Quelle est l'adresse de ma passerelle

La passerelle, soit votre passage, votre porte de sortie vers l'Internet, c'est à priori votre box, ou routeur, suivant le terme technique approprié.

D'ordinaire, l'adresse de la passerelle correspond en fait à l'adresse du réseau. Essayez donc pour tester :

[stephane@Jabberwocky ~]$ ping 2001:470:2099:e::
PING 2001:470:2099:e::(2001:470:2099:e::) 56 data bytes
64 bytes from 2001:470:2099:e::: icmp_seq=1 ttl=64 time=0.545 ms
64 bytes from 2001:470:2099:e::: icmp_seq=2 ttl=64 time=0.541 ms
^C
--- 2001:470:2099:e:: ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.541/0.543/0.545/0.002 ms

Sinon, l'utilisation de la commande route, présente sur tous les systèmes d'exploitation grand public, sera très utile, avec l'option -6.

[stephane@Jabberwocky ~]$ route -6|grep eno1
2001:470:2099:e::/64           ::                         U    100 4    77 eno1
fe80::/64                      ::                         U    256 0     0 eno1
::/0                           fe80::20d:b9ff:fe3e:a812   UG   100 4   112 eno1
ff00::/8                       ::                         U    256 4    14 eno1

Là ici, c'est la ligne ::/0 qui indique Internet. Ça signifie :

Si vous voulez rejoindre le réseau ::/0 (Internet), passez par fe80::20d:b9ff:fe3e:a812.

Si vous avez une adresse IPv6 globale, vous avez forcement une route par défaut. Tout problème à cette étape signifie que votre routeur ou votre ordinateur a des problèmes (Mise à Jour ?).

Dans l'hypothèse, un reboot des machines est la meilleure des solutions.

DNS ?

Le fonctionnement du DNS est le même en IPv4 ou IPv6. Donc quasiment le même texte que l'article relatif à l'IPv4.

Le DNS, autrement dit le système qui permet de relier adresse web et adresse ip devient un service très critique avec IPv6. Même pour des trucs ultra basiques, on ne peut pas s'en passer. Donc il faut savoir si vous pouvez contacter un DNS résolvant IPv6. Il n'est pas nécessaire que ce resolveur soit sur IPv6 lui-même (vous avez très certainement encore une connection IPv4).

Sous Unix-like (Linux et BSD), il faut aller regarder dans le fichier /etc/resolv.conf. Les resolveurs sont indiqués par les lignes nameserver.

[stephane@Jabberwocky ~]$ cat /etc/resolv.conf
# Generated by resolvconf
search 22decembre.eu
nameserver 10.0.0.2
nameserver 10.0.0.1
nameserver 2001:470:2099:e::2
nameserver 2001:470:2099:e::
[stephane@Jabberwocky ~]$

Sous Windows, ils sont accessibles soit par la commande ipconfig précédemment citée, soit par l'interface graphique, via la boite de dialogue «connections réseau» accessible par le panneau de configuration ou l’icône en bas à droite de l'écran de l'ordinateur.

Comme vous avez sûrement une double pile IPv4/IPv6, il est très probable que vous récupériez les DNS via le DHCPv4.

Toutefois, des mécanismes sont prévus pour ça en IPv6 : les DNS peuvent être fournis via DHCPv6 ou via les messages des routeurs.

Si vous n'avez toutefois pas de DNS, vous pouvez modifier manuellement la liste de resolveurs. Sous Unix il suffit d'éditer manuellement le fichier /etc/resolv.conf en tant que Root. Attention, ce fichier sera peut-être réécrit au reboot du système.

Google DNS

Google met à disposition du public des resolveurs DNS gratuits: 2001:4860:4860::8888 et 2001:4860:4860::8844.

OpenDNS

OpenDNS permet apparemment de customiser ses réponses DNS. Il peut filtrer les sites pornos par exemple. Mais c'est une entreprise à but lucratif, qui plus est partenaire de la NSA. À vous de voir.

DNS anti-censure

Il y a les résolveurs de FDN, 2001:910:800::12 et 2001:910:800::40.

Ceux de censurfridns : 2001:67c:28a4:: et 2002:d596:2a92:1:71:53::.

Tester sa connectivité au DNS

Faîtes un ping sur l'adresse de votre DNS. Si le ping échoue, mais que vous pouvez pinger un autre serveur (ceux de Google par exemple), c'est que le réseau de votre FAI est perturbé.

Dans ce cas, il est plus simple de changer ses DNS comme indiqué plus haut.

Tester sa résolution de noms

Utilisez la commande nslookup (sous Windows) suivie d'un nom de site web, host, dig ou drill sous Unix:

[stephane@Jabberwocky ~]$ host www.fdn.fr
www.fdn.fr has address 80.67.169.52
www.fdn.fr has IPv6 address 2001:910:800::52

Si vous pouvez pinger votre serveur de nom (celui qui vous est indiqué par votre fournisseur d'accès Internet via le DHCP, ou celui que vous avez choisi), mais qu'il ne peut vous indiquer les adresses des sites demandés, cela signifie que ce resolveur a un problème. Il vous faut alors le changer comme indiqué juste au dessus.

Pour aller plus loin.

Stéphane Bortzmeyer a écrit un certain nombre d'articles à propos d'ipv6. Faîtes attention, c'est assez technique.

Vous pouvez lire avec beaucoup d'intérêt le Lothaire Yarding de Julien Vaubourg.