6to4 è un sistema che permette di trasferire pacchetti IPv6 su una rete IPv4 (generalmente la parte IPv4 di Internet) senza il bisogno di configurare tunnel espliciti. Esistono convenzioni di routing che permettono agli host 6to4 di comunicare con la parte IPv6 di Internet. È utilizzato comunemente quando si vuole accedere alla parte IPv6 di Internet da una connessione con solo accesso IPv4 (preferibilmente con indirizzo pubblico).
Dal punto di vista pratico 6to4 non fa altro che creare in modo automatico dei tunnel punto-punto tra ogni host 6to4 e ogni altro, senza bisogno però di configurarli manualmente. Dato che tra due host dual-stack configurati per 6to4 i pacchetti IPv6 viaggiano incapsulati in normali pacchetti IPv4, non è necessario che i router e le altre apparecchiature di rete che li collegano supportino IPv6.
6to4 ha tre funzioni:
Per ogni indirizzo IPv4 pubblico assegnato ad un determinato host, si ha un prefisso di rete IPv6 di 48 bit formato dal prefisso esadecimale 2002
seguito dai 32 bit dell'indirizzo IPv4 stesso. Ad esempio all'indirizzo IPv4 207.142.131.202
corrisponde il prefisso IPv6 2002:CF8E:83CA::/48
(i due indirizzi possono sembrare molto diversi tra loro, ma bisogna ricordare la differenza tra la notazione dotted e quella esadecimale: 207
corrisponde a CF
, 142
corrisponde a 8E
e così via).
Nell'utilizzo classico, a ogni prefisso di 48 bit seguono uno SLA di 16 bit (Site level aggregator, indica il numero della sottorete) e un indirizzo di interfaccia di 64 bit (che generalmente è calcolato automaticamente utilizzando il MAC univoco della scheda di rete): questo permette di assegnare indirizzi IPv6 a 65 536 sottoreti ognuna contenente un numero pressoché arbitrario di host.
6to4 incapsula ogni pacchetto IPv6 all'interno di un pacchetto IPv4 con tipo di protocollo 41; in pratica questo corrisponde a porre "in testa" al pacchetto un header IPv4 aggiuntivo (di 20 byte). L'indirizzo IPv4 di destinazione da utilizzare nell'header IPv4 viene estratto dall'indirizzo IPv6 del pacchetto incapsulato, estraendo i 32 bit che seguono il prefisso 2002::/16
.
Il pacchetto IPv4 risultante viene instradato alla sua destinazione IPv4 normalmente, come qualsiasi altro pacchetto IPv4.
Per permettere a un host configurato con 6to4 di comunicare con host IPv6 "nativi" vengono utilizzati dei relay router che sono raggiungibili sia dalla rete nativa IPv4 che da quella IPv6. Questi router instradano tutti i pacchetti 6to4 in arrivo sull'interfaccia IPv4 verso la rete IPv6 e solamente i pacchetti IPv6 la cui destinazione ha il prefisso 2002::/16
al corrispondente indirizzo IPv4.
Un host o router configurato con 6to4 che voglia comunicare con un indirizzo IPv6 "nativo" non dovrà fare altro che utilizzare uno di questi relay router come gateway di default. Per facilitare ulteriormente la configurazione è stato allocato l'indirizzo IPv4 anycast 192.88.99.1
(che in notazione 6to4 corrisponde all'indirizzo IPv6 2002:c058:6301::
) appositamente per indicare questi router: utilizzandolo si comunicherà automaticamente con il relay router più vicino dal punto di vista della topologia di rete.
Se un host o router ha un indirizzo indirizzo IPv4 pubblico allora anche l'indirizzo IPv6 ottenuto tramite 6to4 sarà fisso: è quindi possibile richiedere la delega per la risoluzione inversa degli indirizzi IPv6 corrispondenti al proprio prefisso di 48 bit. Il processo di assegnazione, gestito dalla Number Resource Organization, è totalmente automatico: è sufficiente collegarsi all'apposito indirizzo tramite la rete 6to4 per cui si vuole ricevere la delega e compilare la richiesta.