6to4は、明示的なトンネリングの設定を行わなくとも、IPv4のネットワーク(たとえば、IPv4のインターネット)上にIPv6のパケットを流せるようにするという技術である。6to4ネットワークとIPv6ネイティブなネットワークの通信を行えるようにするためのリレーサーバも存在している。

## 概要

6to4では、途中のノードがIPv6に対応しなくても通信が行えるため、IPv6が整備される初期の段階で特に必要となる技術である。ただし、あくまでIPv6への移行段階で使うためのものであり、恒久的に使われることを意図したものではない。

6to4は、ホスト単体でも、ローカルなIPv6ネットワークに対しても適用することができる。あるホストを6to4対応とする場合、そのホストにはグローバルなIPv4アドレスが必要であり、また6to4としてのパケットのカプセル化や取り出しはホストが自前で行う必要がある。ホストが他のクライアントからIPv6のパケットを受け取って、それを6to4にカプセル化するように設定する、つまり6to4のルーターを設置することもできる。

ほとんどのIPv6ネットワークは自動設定されるが、この場合IPv6アドレスの下位64ビットがホストに割り当てる分となる。6to4では、最初の16ビットが`2002:`と固定され、続く32ビットにはIPv4のアドレスが入り、残りの16ビットはルーターが選ぶこととなる。自動設定が有効なIPv6ホストでは、ホスト自身で下位64ビットが一意に決定されているので、残り64ビットをルーター通知することでIPv6アドレスが完成する。6to4ルーターは、宛先の上位16ビットが`2002:`なら続く32ビットのIPv4アドレスへ直接、そうでなければIPv6ネイティブなネットワークとの通信が行えるリレーサーバーへ、パケットをIPv4にカプセル化して送信する。

6to4は、IPv4しか使えないホストとIPv6しか使えないホストの相互通信を可能とする技術ではなく、あくまでIPv6ホスト同士が通信するための透過的に使えるレイヤーである。

設定ミスの多発や性能が出ていない現状を前にして、2011年8月には6to4をどのように導入すべきかというRFCが公開された。

## 動作の仕組み

6to4には以下のような、3つの機能がある。

- グローバルなIPv4アドレスについて、対応するIPv6アドレスのブロックを割り当てる。
- IPv4ネットワークで通信を行うために、6in4を使ってIPv6パケットをIPv4パケットにカプセル化する。
- 6to4と「ネイティブな」IPv6ネットワークの間でのルーティングを行う。

### アドレスブロックの割り当て

32ビットのグローバルIPv4アドレスがホストに割り当てられていれば、`2002:`のあとにそのアドレスを続けることで、48ビットのIPv6プレフィックスとなる。

例えば、`192.0.2.4`というIPv4アドレスには`2002:c000:0204::/48`というプレフィックスが対応する。このプレフィックスは48ビットであり、下位64ビットをホストに使っても、残り16ビットをサブネットの識別に使うことができる。

`2002::/16`の範囲内にあるIPv6アドレス、つまり先頭2バイトが2002hであるアドレスは6to4用のアドレスであり、他のIPv6アドレスと違って変換が行われる。

なお、RFC 1918にあるような、インターネット上でルーティングされない予約IPv4アドレスを使った場合の動作は未定義となっている。

### カプセル化・通信

6to4では、IPv6のパケットをIPv4パケットのペイロードとしてカプセル化し、IPv4のプロトコル番号には41を指定する。IPv6パケットを6to4アドレスへIPv4経由で送る場合、IPv6パケットの前にIPv4ヘッダが追加される。そして、IPv4の宛先アドレスは、内包されるIPv6パケットのアドレス(6to4アドレス)から`2002:`のあとに続く32ビットのIPv4アドレスを抜き出して設定される。IPv4パケットの送信アドレスは、そのパケットをIPv4に載せ替えたホスト・ルーターのIPアドレスとなる。これらを設定したIPv4パケットは、普通のパケットと同様にIPv4ネットワーク上をルーティングされていく。

### 6to4とネイティブなIPv6間のルーティング

6to4を使うネットワークと、ネイティブなIPv6ネットワークの間で通信できるようにするために、「リレールーター」が用意されている。リレールーターはIPv4とIPv6両方のネットワークに接続し、IPv4側から6to4パケットが来ればペイロードのIPv6パケットをIPv6ネットワークへと中継し、逆にIPv6側に宛先が`2002::/16`のパケットが来れば、カプセル化してIPv4ネットワークへと転送する。

6to4のホストがネイティブなIPv6のインターネットと通信できるようにするには、デフォルトゲートウェイに6to4リレールーターの6to4アドレスを指定する必要がある。手動設定せずに済む方法として、`192.88.99.1`へのエニーキャストでリレールーターへとつながるようになっている。これを6to4アドレスにすると、`2002:c058:6301::`となる(ただし、サブネットやホストはゼロとなっている)。BGPによるルーティングの都合上、`192.88.99.0/24`というもっと広い範囲がエニーキャスト用に予約されている。6to4サービスを提供する場合、このIPv4プレフィクスを広告し、6to4リレーサーバへとルーティングする必要がある。

IPv6のインターネットから6to4ノードにIPv6パケットを送る場合、まずは通常のルーティングにより6to4リレールーターへと到着する。規格書によれば、6to4用のルーティングデータが細分化されてルーティングテーブルがあふれるのを防ぐため、リレールーターは`2002::/16`全体を広告しなければならないことになっている。そして、リレールーターでは届いたパケットをIPv4パケットに載せて、IPv4のインターネット経由で宛先へと向かう。

6to4の拡張であるIPv6 rapid deployment(6rd)では、設定ミスの危険性がある外部のリレーサーバーに頼る必要性をなくしている。

## DNS逆引き

6to4ホストが固定のIPv4グローバルアドレスを持っている場合、48ビットの6to4アドレスのプリフィックスもまた固定となり、DNS逆引きの移譲を受けることもできる。

## セキュリティ

RFC 3964において、6to4のルーターやリレールーターで確認すべきことが挙げられている。

- IPv6パケットの送信元・宛先のうち、少なくとも一方が6to4アドレス(`2002::/16`)である
- IPv6パケットの送信元が6to4アドレスである場合、そのアドレスがIPv4ヘッダの送信元アドレスに対応するものである
- 同様に、IPv6パケットの宛先が6to4アドレスである場合、そのアドレスがIPv4ヘッダの宛先アドレスに対応するものである
- パケットの6to4ルーターのアドレスがグローバルユニキャストである

## 関連RFC

- B. Carpenter & K. Moore. Connection of IPv6 Domains via IPv4 Clouds. RFC 3056, February 2001.
- R. Gilligan & E. Nordmark. Transition Mechanisms for IPv6 Hosts and Routers. RFC 2893, August 2000.
- C. Huitema. An Anycast Prefix for 6to4 Relay Routers. RFC 3068, June 2001.
- P. Savola & C. Patel. Security Considerations for 6to4. RFC 3964, December 2004.