<?xml version="1.0" encoding="utf-8"?>
<rfcdesc title="Experiences from an IPv6-Only Network" num="6586" status="informational">
<authors><author>J. Arkko</author><author>A. Keranen (Ericsson)</author></authors>
<rfcdate><month>April</month><year>2012</year></rfcdate>
<date>2012-04-22</date>
<content>
<p>La plupart des <wikipedia name="Request for comments">RFC</wikipedia> décrivent, de façon
normative, un <wikipedia name="Protocole de communication">protocole</wikipedia> ou un
<wikipedia name="Format de données">format</wikipedia> qui sera ensuite déployé sur
l'<wikipedia>Internet</wikipedia>. Mais ce document est différent :
c'est un récit d'expérience, celle de deux courageux chercheurs qui,
au péril de leur usage de <wikipedia>Facebook</wikipedia> et dans
l'intérêt de la science, ont coupé <wikipedia>IPv4</wikipedia> et
n'ont accédé à l'Internet que via <wikipedia>IPv6</wikipedia> pendant
la durée de l'expérience. Les machines de l'expérience n'avaient plus
du tout d'IPv4 et seule une fragile passerelle
<wikipedia xml:lang="en">NAT64</wikipedia> les reliaient aux territoires barbares où
régnait encore IPv4. Qu'est-ce qui marche dans ce cas ? Qu'est-ce qui
ne marche pas ? Qu'est-ce qu'on peut améliorer ?</p>
<p>Deux réseaux ont été utilisés, un professionnel et un à la
maison. Tous les deux étaient en double-pile (IPv4
<emphasis>et</emphasis> IPv6, cf. <rfc num="4213" local="true"/>) depuis longtemps. Tous les deux avaient
une connectivité IPv6 stable et correcte depuis des années. Il était
donc temps de sortir de la « zone de confort » et d'essayer le grand
large. Mais la majorité de l'Internet reste accessible en IPv4
seulement. C'est là qu'intervient <wikipedia xml:lang="en">NAT64</wikipedia> (<rfc
num="6144" local="true"/>), qui permet aux machines purement IPv6
d'accèder à des sites Web attardés en v4.</p>
<p>Ce n'est pas juste une expérience de démonstration pour montrer que
les Vrais Hommes peuvent se passer du vieux protocole des mangeurs de
yaourt. L'<link local="epuisement-adresses-ipv4">épuisement des adresses IPv4</link> fait
que de plus en plus de <wikipedia name="Fournisseur d'accès à Internet">FAI</wikipedia> envisagent de
déployer des réseaux uniquement IPv6, puisqu'ils n'ont plus la
possibilité d'obtenir des adresses. Tester de tels réseaux en vrai est
donc nécessaire. La conclusion est d'ailleurs que cela ne marche pas
trop mal mais qu'il reste un certain nombre de petits problèmes qu'il
serait bon de régler.</p>
<p>La section 3 du <wikipedia name="Request for comments">RFC</wikipedia> explique l'environnement
de l'expérience. Les deux réseaux (un à la maison et un au bureau)
étaient un mélange classique de <wikipedia name="Ordinateur personnel">PC</wikipedia>, d'appareils
photos numériques, de gadgets électroniques divers et de petits
routeurs du commerce, avec divers systèmes
(<wikipedia>Mac OS</wikipedia>, <wikipedia name="Microsoft Windows">Windows</wikipedia>,
<wikipedia>Linux</wikipedia>...). Les usages étaient également
classiques, <wikipedia name="Courrier électronique">courrier</wikipedia>,
<wikipedia name="Secure Shell">SSH</wikipedia>, <wikipedia>VoIP</wikipedia>, jeu (pas dans
le réseau de bureau, bien sûr),
<wikipedia>messagerie instantanée</wikipedia>, un peu de <wikipedia>domotique</wikipedia> et bien sûr du
<wikipedia name="World Wide Web">Web</wikipedia>. Il s'agissait de petits réseaux avec une
dizaine d'utilisateurs au maximum.</p>
<p>Comme certains des utilisateurs des deux réseaux, des petits bras, avaient choisi de
ne pas participer à l'expérience, il a fallu créer un réseau séparé
pour celle-ci, avec un <wikipedia name="Réseau local virtuel">VLAN</wikipedia> propre. Il n'y
avait évidemment pas de serveur <wikipedia name="Dynamic Host Configuration Protocol">DHCP</wikipedia> v4 sur
ce réseau seulement des RA (<foreign>Router Advertisement</foreign>) v6.</p>
<p>On l'a vu, l'essentiel du Web aujourd'hui n'est accessible qu'en
IPv4. Il a donc fallu mettre en place une passerelle
<wikipedia xml:lang="en">NAT64</wikipedia> (<rfc num="6146" local="true"/>). Elle
incluait le serveur <wikipedia xml:lang="en" name="IPv6 transition mechanisms" anchor="DNS64">DNS64</wikipedia> (<rfc num="6147"
local="true"/>). L'installation et la configuration de cette
passerelle étaient très simples pour un administrateur réseaux.</p>
<p>Le serveur <wikipedia name="Domain Name System">DNS</wikipedia> cité plus haut était publié
via les RA (<rfc num="6106" local="true"/>). (À noter que Windows écrit
aussi à des serveurs DNS bien connus,
<computer>fec0:0:0:ffff::1</computer>,
<computer>fec0:0:0:ffff::2</computer>, et
<computer>fec0:0:0:ffff::</computer>.) Trouver le serveur DNS dans un
environnement IPv6 pur n'est pas trivial. Dans les environnements
mixtes, il est fréquent que le résolveur DNS à utiliser par les
clients ne soit publié qu'en v4, les clients demandant ensuite aussi
bien les enregistrements A que les AAAA en IPv4. Ici, cette méthode
n'était pas possible et les auteurs du RFC ont également testé avec
<wikipedia name="Dynamic Host Configuration Protocol">DHCP</wikipedia> v6 (<rfc num="8415" local="true"/>). Un
des charmes d'IPv6 est en effet qu'il existe deux façons de découvrir
automatiquement le résolveur DNS local, via les RA ou bien via
DHCP.</p>
<p>Le serveur DNS64 et la passerelle NAT64 fonctionnaient de la
manière habituelle (<rfc num="6144" local="true"/>) : si un client
demandait un AAAA (adresse IPv6 dans le DNS) inexistant, le serveur
DNS64 en synthétisait un, les paquets à destination de cette adresse
étaient ensuite interceptés par la passerelle et NATés en IPv4 (la
passerelle avait, elle, une adresse v4 publique). Les destinations
ayant des AAAA étaient traitées normalement : la passerelle servait
alors de simple routeur v6, le cas idéal d'une connectivité v6 complète.</p>
<p>Les résultats de l'expérience occupent le reste du RFC. La section
4 fournit une synthèse et la section 5 examine un par un les choses
qui ont plus ou moins bien marché. Principale conclusion ;
<emphasis>ça marche</emphasis>. Un des auteurs du RFC travaille dans
un environnement IPv6 pur depuis un an et demi et est toujours vivant
et en bonne santé. Certains points marchent particulièrement bien
(aucun problème avec le Web). Sur un téléphone
<wikipedia name="Symbian OS">Symbian</wikipedia>, <emphasis>toutes</emphasis> les
applications ont marché (sur un <wikipedia>Android</wikipedia>, toutes
les applications de base marchaient, mais après un bricolage pour
permettre à la machine de trouver son résolveur DNS).</p>
<p>Les problèmes rencontrés se subdivisent en plusieurs catégories :
<enum>
<item>Les <wikipedia name="Bug (informatique)">bogues</wikipedia> pures et simples. Un logiciel
gère théoriquement IPv6 mais, en pratique, on trouve des problèmes qui
n'existent pas en v4. Ces bogues sont relativement fréquentes car trop
peu de tests sont faits avec IPv6.</item>
<item>Pas d'IPv6 du tout, même en théorie. Cela arrive à des
programmes antédiluviens (le RFC cite dict, un client
<rfc num="2229" local="true"/>) mais aussi, et là c'est inexcusable, à
des programmes plus récents comme le logiciel privateur
<wikipedia>Skype</wikipedia>, ou comme beaucoup de jeux.</item>
<item>Des problèmes liés au protocole. Dès que le protocole transmet
des adresses IP, les ennuis commencent. La machine locale utilise
IPv6, transmet l'adresse au pair v4 avec qui elle communique grâce au
NAT64, pair qui
n'arrive pas à répondre. Un exemple est fourni par certaines
applications Web qui renvoient une page avec des
<wikipedia name="Uniform Resource Locator">URL</wikipedia> utilisant des adresses IPv4 littérales
(comme <computer>http://192.0.2.80/</computer>). Ce problème est rare
mais très agaçant lorsqu'il se produit.</item>
<item>Problèmes situés quelque part dans la couche 3, le plus fréquent
étant les problèmes de <wikipedia name="Maximum Transmission Unit">MTU</wikipedia> causés par un
<wikipedia name="Pare-feu (informatique)">pare-feu</wikipedia> mal configuré.</item>
</enum>
Bref,
aucun de ces problèmes n'était un problème fondamental d'IPv6 ou de
NAT64, nécessitant de revisiter le protocole. C'était « uniquement »
des questions de développement logiciel.</p>
<p>Maintenant, avec la section 5, voyons ces problèmes cas par
cas. D'abord, ceux situés dans les <wikipedia name="Système d'exploitation">systèmes
d'exploitation</wikipedia>. Par exemple, <wikipedia>Linux</wikipedia>
ne jette pas l'information acquise par les RA lorsque la connectivité
réseau change, il faut faire explicitement un cycle
<wikipedia name="Veille (mode de fonctionnement)">suspension/reprise</wikipedia>. Ensuite, le
<wikipedia name="Daemon (informatique)">démon</wikipedia> rdnssd, censé écouter les annonces de
résolveurs DNS faites en RA, n'était pas intégré par défaut sur
<wikipedia>Ubuntu</wikipedia> et, de toute façon, ne semblait pas très
fiable. Comme pas mal de problèmes rencontrés lors de cette
expérience, il s'est résolu en cours de route, avec une nouvelle
version du système. Mais tout n'est pas parfait, notamment le
<wikipedia>NetworkManager</wikipedia> qui s'obstine à sélectionner un
réseau sans-fil IPv4 qui n'a pas de connectivité externe, plutôt que
le réseau IPv6 pur.</p>
<p>Les autres systèmes ont aussi ce genre de problèmes. Ainsi, avec <wikipedia>Mac OS X</wikipedia>, il faut
dire explicitement au système qu'IPv4 est facultatif et qu'un réseau
sans IPv4 ne doit pas être considéré comme cassé et à ignorer. Et
passer d'un réseau v4 à v6 nécessite des manipulations manuelles.</p>
<p>Pour <wikipedia>Windows 7</wikipedia>, le problème était avec les
résolveurs DNS : Windows les affichait mais ne les utilisait pas sans
action manuelle.</p>
<p><wikipedia>Android</wikipedia> a un problème analogue. Il peut
faire de l'IPv6 mais il ne sait pas sélectionner les résolveurs DNS en
IPv6. Par défaut, il lui faut donc un résolveur DNS v4. Heureusement,
il s'agit de <wikipedia>logiciel libre</wikipedia> et les auteurs ont
pu <link url="http://www.arkko.com/ddd/">résoudre ce problème eux-même</link> avec le nouveau logiciel DDD.</p>
<p>En conclusion, le RFC note que tous ces systèmes ont IPv6 à leur
catalogue depuis des années, parfois de nombreuses années, mais tous
ces problèmes donnent à penser qu'ils n'ont jamais été sérieusement testés.</p>
<p>La situation des langages de programmation et des
<wikipedia name="Interface de programmation">API</wikipedia> semble meilleure, par exemple
<wikipedia name="Perl (langage)">Perl</wikipedia> qui était un des derniers grands langages
à ne pas gérer complètement IPv6 par défaut semble désormais
correct.</p>
<p>C'est moins satisfaisant pour la <wikipedia>messagerie instantanée</wikipedia> et la <wikipedia>voix sur IP</wikipedia>. Les
cris les plus perçants des utilisateurs impliqués dans l'expérience
avaient été provoqués par <wikipedia>Skype</wikipedia>, qui ne marche
pas du tout en IPv6 (il a fallu utiliser un relais
<wikipedia name="Secure Shell">SSH</wikipedia> vers une machine distante). La légende
comme quoi Skype marcherait toujours du premier coup en prend donc
un... coup.</p>
<p>Parmi les autres solutions testées, celles
passant par le Web marchaient (<wikipedia>Gmail</wikipedia> ou
<wikipedia>Facebook</wikipedia>, par exemple), celles fondées sur
<wikipedia name="Extensible Messaging and Presence Protocol">XMPP</wikipedia> également mais les solutions
commerciales fermées comme <wikipedia name="Windows Live Messenger">MSN</wikipedia>, <wikipedia>WebEx</wikipedia> ou
<wikipedia name="America Online">AOL</wikipedia> échouent toutes. Ces solutions sont mises
en &#x153;uvre dans des logiciels privateurs (on ne peut donc pas
examiner et corriger le source) mais l'examen du trafic réseau montre
qu'il passe des adresses IPv4 entre machines, ce qui est incompatible
avec NAT64.</p>
<p>Et pour les applications stratégiques essentielles, je veux dire les
jeux ? Ceux utilisant le Web n'ont pas de problème, pour les autres,
c'est l'échec <emphasis>complet</emphasis>. En outre, aucun des ces
logiciels ne produit de messages de diagnostic utilisables et le
débogage est donc très difficile. Au moment des premiers tests, ni
<wikipedia name="Battlefield (série)">Battlefield</wikipedia>, ni <wikipedia>Age of Empires</wikipedia>, ni <wikipedia>Crysis</wikipedia> ne
fonctionnaient sur le nouveau réseau. Depuis, <wikipedia>World of Warcraft</wikipedia> est devenu le premier jeu majeur qui marchait en
IPv6. Les jeux dont le source a été libéré (comme
<wikipedia>Quake</wikipedia>) ont également acquis cette capacité. Les autres feraient bien d'utiliser une API réseau plus
moderne... (Cf. <rfc num="4038"/>.)</p>
<p>Pendant qu'on en est au divertissement, que devient la musique en
ligne ? La plupart des boutiques reposent sur le Web et marchent donc,
sauf <wikipedia>Spotify</wikipedia> qui réussit l'exploit d'être un
des rares services accessibles via le Web qui ne fonctionne pas en
IPv6.</p>
<p>Moins bonne est la situation des
<foreign><wikipedia name="Électroménager">appliances</wikipedia></foreign> comme les
<wikipedia name="Webcam">webcams</wikipedia>. La plupart ne parlent pas IPv6 du
tout, sourds que sont leurs constructeurs chinois aux sirènes de la modernité.</p>
<p>Enfin, les problèmes ne sont pas forcément avec les matériels et
logiciels du réseau local. Parfois, le problème est situé chez le pair
avec qui on veut communiquer comme lorsque
<wikipedia>bit.ly</wikipedia> (le RFC cite ce cas mais sans mentionner
le nom comme si l'information n'était pas déjà publique...) avait
publié un enregistrement AAAA invalide : NAT64 ne peut rien dans ce
cas puisque la passerelle pense que le service est accessible en
IPv6. C'est l'occasion de rappeler qu'il vaut mieux ne pas publier de
AAAA que d'en publier un erroné.</p>
<p>On l'a vu, une bonne partie de la connectivité externe des deux
réseaux de test dépendait de <wikipedia xml:lang="en">NAT64</wikipedia>, puisqu'une
grande partie de l'Internet n'est hélas pas joignable en IPv6. La
section 6 tire le bilan spécifique de ce protocole et il est très
positif : pas de problèmes de fond, juste quelques bogues dans
l'implémentation, corrigées au fur et à mesure.</p>
<p>Le cas des adresses
IPv4 littérales dans les <wikipedia name="Uniform Resource Locator">URL</wikipedia> est irrémédiable
(le DNS n'est pas utilisé donc DNS64 ne peut rien faire)
mais rare. Les deux seuls cas bloquants concernaient certaines pages
<wikipedia>YouTube</wikipedia> (tiens, pourquoi est-ce que les erreurs
de bit.ly sont mentionnées sans indiquer son nom, alors que YouTube
est désigné dans le RFC ?) et une page de réservation d'un hôtel qui
renvoyait vers un URL contenant une adresse IPv4. Les auteurs du RFC
ont mesuré les 10 000 premiers sites Web du classement
<wikipedia name="Alexa Internet">Alexa</wikipedia> et trouvé que 0,2 % des 1 000 premiers
ont un URL IPv4 dans leur page (pour charger du
<wikipedia>JavaScript</wikipedia>, du <wikipedia name="Feuilles de style en cascade">CSS</wikipedia> ou
autre), et que ce chiffre monte à 2 % pour les 10 000 premiers (ce qui
laisse entendre que les premiers sont mieux gérés). Cette stupide
erreur n'empêchait pas le chargement de la page, elle privait juste le
lecteur d'un bandeau de publicité ou d'une image clignotante. Ce n'est
donc pas un problème sérieux en pratique.</p>
<p>Les auteurs ont également testé avec <wikipedia name="GNU Wget">wget</wikipedia>
le chargement des pages d'accueil de ces 10 000 sites en comparant un
accès IPv4, un accès IPv6 sans NAT64 et le réseau de test, IPv6 pur
mais avec NAT64. En IPv4 pur, 1,9 % des sites ont au moins un problème
(pas forcément la page d'accueil elle-même, cela peut être un des
composants de cette page), ce qui donne une idée de l'état du Web. Le
RFC note toutefois que certains problèmes peuvent être spécifiques à
ce test, si le serveur refuse à wget du contenu qu'il accepterait de
donner à un navigateur Web. wget avait été configuré pour ressembler à
un navigateur (le RFC ne le dit pas mais je suppose que cela veut dire
des trucs comme <computer>--user-agent="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:11.0) Gecko/20100101 Firefox/11.0"</computer>). Mais cela
ne suffit pas dans des cas comme l'absence d'une adresse pour un nom
de domaine, qui ne gène pas le navigateur qui ajoute
<computer>www</computer> devant à tout hasard, chose que ne fait pas
wget.</p>
<p>Avec le réseau IPv6 pur, 96 % des sites échouent (ce qui est
logique, vu le nombre de sites Web accessible en v6). Les sites
<wikipedia>Google</wikipedia> étaient une des rares exceptions.</p>
<p>Avec le réseau IPv6 aidé de la passerelle NAT64, le taux d'échec
est de 2,1 %, quasiment le même qu'en IPv4 pur (la différence venant
surtout des adresses IPv4 littérales).</p>
<p>Sur quoi doivent porter les
efforts de mesure futurs (section 7) ? Le RFC estime important de mesurer plus
précisement les phénomènes à l'&#x153;uvre lors d'une connexion
utilisant NAT64. Certains utilisateurs ont signalé des
ralentissements, mais qui ne sont pas confirmés par une analyse des
paquets et des temps de réponse. S'il se passe quelque chose qui ralentit, c'est
plus subtil, et cela devrait être investigué.</p>
<p>Compte-tenu de cette expérience, quelles conclusions en tirer
(section 8) ? Comme indiqué plus haut, la principale est qu'un réseau
purement IPv6 est viable. (Le RFC ne le précise pas mais je rajoute :
s'il est géré par un informaticien compétent et disponible. Cette
expérience n'est pas encore reproductible par M. Toutlemonde.)</p>
<p>Seconde grande conclusion : il reste du travail, trop de petites
bogues sont encore présentes, et à beaucoup d'endroits.</p>
<p>Bref, aujourd'hui, il reste prudent d'utiliser plutôt la
double-pile (IPv6 <emphasis>et</emphasis> IP4) pour un réseau de
production. Un réseau IPv6 pur, à part pour le
<foreign><wikipedia>geek</wikipedia></foreign>, est surtout
intéressant pour des environnements très contrôlés, comme par exemple
celui d'un opérateur de téléphonie mobile qui fournirait un modèle de
téléphone obligatoire, permettant de s'assurer que tous les clients
aient ce qu'il faut.</p>
<p>Comme tout ne s'arrangera pas tout seul, nos héroïques explorateurs
revenant de la terre lointaine et mystérieuse où tout ne marche qu'en
IPv6 suggèrent des actions à entreprendre pour se préparer à notre
future vie dans ce monde :
<enum>
<item>La découverte du résolveur DNS reste un des points qui marchent
le plus mal, probablement parce qu'elle fonctionne bien en
double-pile, masquant les problèmes IPv6. Par exemple, l'utilisation
des annonces RA du <rfc num="6106" local="true"/> devrait être
systématique et c'est loin d'être le cas, par exemple dans les divers
systèmes utilisant <wikipedia>Linux</wikipedia>.</item>
<item>Autre problème, les divers <foreign>network managers</foreign>,
ces logiciels qui règlent le ballet des différentes composants de
l'accès au réseau : même lorsque le système dispose de tous les
composants qui marchent en IPv6, le <foreign>network manager</foreign>
ne les utilise pas toujours correctement. En essayant
<wikipedia>Ubuntu</wikipedia>, par exemple, il est clair que ce
système n'a jamais été testé dans un environnement purement
IPv6.</item>
<item>Les <wikipedia name="Pare-feu (informatique)">pare-feux</wikipedia> ont souvent des capacités
IPv6 inférieures à celles qu'ils ont en v4.</item>
<item>Plusieurs applications que les utilisateurs considèrent comme
très importantes (les jeux vidéo, par exemple) ne marchent pas du tout
en IPv6 : du travail pour les programmeurs, qui devraient au miminum
utiliser des <wikipedia name="Interface de programmation">API</wikipedia> qui sont indépendantes de la
version d'IP.</item>
</enum>
Le RFC note que pratiquement aucune de ces actions ne nécessite
d'action dans le champ de la
<wikipedia name="Normes et standards industriels">normalisation</wikipedia>. Cela veut dire que toutes les
normes nécessaires sont là, l'<wikipedia name="Internet Engineering Task Force">IETF</wikipedia> a terminé
son travail et c'est maintenant aux programmeurs et aux
administrateurs réseaux d'agir.</p>
</content>
</rfcdesc>
