6to4 (parfois écrit « 6 to 4 ») est une méthode de transition d'IPv4 vers IPv6 définie dans la RFC 3056[1] et qui permet à un réseau IPv6 isolé de communiquer en IPv6 avec un autre réseau IPv6 à travers un réseau IPv4. 6to4 est utile quand deux hôtes souhaitent échanger des informations en IPv6 mais qu'une portion du réseau qui les sépare ne supporte que IPv4.
6to4 peut être utilisé par un ordinateur seul ou par un réseau local IPv6. Utilisé par un ordinateur seul, ce dernier doit impérativement avoir une connexion IPv4 et une adresse IPv4 publique. Il est alors responsable de l'encapsulation des paquets IPv6 sortants et de la décapsulation des paquets IPv6 entrants. Quand 6to4 est utilisé par un réseau local, l'ensemble du réseau n'a besoin que d'une seule adresse IPv4 publique et un ordinateur servira de passerelle. À l'intérieur du réseau, les hôtes récupèrent leurs baux IPv6 et tables de routages en utilisant leurs protocoles d'identification classiques, juste comme s'ils étaient sur un réseau IPv6.
6to4 ne permet pas l'interopération entre les hôtes uniquement IPv4 et les hôtes uniquement IPv6.
6to4 réalise 3 tâches :
Pour toute adresse 32 bits IPv4 globale qui est assignée à un hôte ou à un réseau, un préfixe 48 bits 6to4 IPv6 peut être construit ou utilisé par cet hôte ou réseau en préfixant 2002 (hex) à son adresse IPv4. Donc pour l'adresse IPv4 globale 207.142.131.202, le préfixe 6to4 correspondant serait 2002:CF8E:83CA::/48 (les adresses IPv4 sont généralement notées en décimal tandis que les adresses IPv6 le sont en hexadécimal).
Étant donné que les adresses IPv6 sont sur 128 bits et que 6to4 fournit un préfixe de 48 bits, 6to4 autorise plus de 280 hôtes IPv6 sur un réseau pour communiquer avec d'autres hôtes IPv6, même si seule la connexion extérieure utilise IPv4 et qu'il n'y a qu'une seule adresse IPv4.
Toute adresse IPv6 qui débute avec 2002::/16 est donc reconnue comme une adresse 6to4, par opposition à une adresse native IPv6 qui n'utilisera pas ce préfixe.
6to4 encapsule un paquet IPv6 dans la zone de données (payload) d'un paquet IPv4 avec protocole de type 41. Pour envoyer un paquet IPv6 sur un réseau IPv4 vers une adresse de destination 6to4, un en-tête IPv4 avec type de protocole 41 est préfixé au paquet IPv6.
L'adresse de destination IPv4 pour l'en-tête de paquet préfixée est dérivée de l'adresse IPv6 de destination qui est à l'intérieur du paquet IPv6, en extrayant les 32 bits qui suivent immédiatement l'en-tête d'adresse de destination IPv6 (2002::/16). L'adresse source IPv4 dans l'en-tête de paquet IPv4 préfixée est l'adresse IPv4 de l'hôte ou routeur qui envoie le paquet sur le réseau IPv4.
Le paquet IPv4 résultant est dirigé vers sa destination IPv4 comme n'importe quel paquet IPv4.
Pour permettre aux hôtes et aux réseaux utilisant des adresses 6to4 d'échanger des données avec les hôtes utilisant nativement des adresses IPv6, des routeurs relais (relay routers) ont été mis en place. Un routeur relais se connecte à un réseau IPv4 et à un réseau IPv6. Les paquets 6to4 arrivant sur l'interface IPv4 auront leurs données IPv6 dirigées sur le réseau IPv6, tandis que les paquets IPv6 arrivants sur l'interface IPv6 avec une adresse de destination commençant par 2002::/16 seront encapsulés et retransmis sur le réseau IPv4.
Les paquets transitant de l'internet IPv6 à des systèmes 6to4 doivent être envoyés à un routeur relais 6to4 par des méthodes de routage IPv6 normales. La spécification établit que les routeurs relais ne doivent informer que des routes pour les 2002::/16 et non pour les subdivisions de manière à éviter que les routes IPv4 ne viennent polluer les tables des routeurs IPv6. À partir de quoi, ils peuvent être transmis au travers de l'internet IPv4 vers leur destination.
Pour permettre à un routeur 6to4 de communiquer avec l'internet IPv6 natif, il doit impérativement avoir son point d'accès par défaut pointant vers l'adresse IPv4 d'un routeur relais 6to4. Ceci doit être réalisé manuellement dans chaque réseau concerné.
Toutefois, afin d'éviter aux utilisateurs le besoin d'établir ceci manuellement, l'adresse anycast 192.88.99.1 avait été allouée par la RFC 3068[2] pour l'envoi de paquets à un routeur relais. Pour des raisons de routage, la totalité de 192.88.99.0/24 a été allouée pour des routes conduisant vers des routeurs relais 6to4 qui utilisent des IP anycast. Les fournisseurs d'accès souhaitant fournir ce service à leurs clients ou pairs sur l'IP anycast 6to4 pouvaient annoncer le préfixe anycast comme tout préfixe IP dans BGP.
La RFC 7526[3] a rendu obsolète cette fonctionnalité particulière (IPv4 Anycast pour relais 6to4), en raison des problèmes rencontrés (annonce de l'IP sans relais derrière, notamment).
6to4 est en butte à des problèmes opérationnels :
De par le développement d'IPv6 natif d'une part, des problèmes rencontrés[6] avec 6to4 d'autre part, 6to4 en lui-même paraît désormais[7] dépassé[8] et son utilisation a du reste décru[9] continument dès le début des années 2010.