IPv6移行技術(IPv6いこうぎじゅつ、IPv6 transition mechanism)とは、インターネットにおいて使用するプロトコルの、1981年から使われているIPv4 (Internet Protocol version 4) から、その後継技術であるIPv6 (Internet Protocol Version 6) への移行を促進するための技術である。IPv4/IPv6共存技術ともいう。

## 概要

IPv4とIPv6のネットワークは直接に相互運用可能でないため、IPv6移行技術はどちらのネットワークタイプに属するホストでも他のどのホストとも通信することが出来るように設計されている。

その技術的な基準を満たすために、IPv6には現在のIPv4からの直接の移行計画がなければならない。その目的に向けた移行技術を開発するために、Internet Engineering Task Force(IETF)はワーキンググループやインターネットドラフトやRFCを通じた議論を指揮している。いくつかの基本的なIPv6移行技術は RFC 4213 で定められている。

大きく分けて、IPv4ネットワーク下でIPv6通信を可能化する手法と、IPv6ネットワーク下でIPv4通信を可能化する手法がある。IPv6を推進する立場からは後者は「IPv4延命技術」とも呼ばれる。

IPv6ネットワーク下でIPv4通信を可能化する場合、トンネリング(カプセル化)やトランスレーション(ヘッダ書き換え)等の手法がある。トンネリングの場合、トンネル内ではIPv6のヘッダ分(標準 40bytes)オーバーヘッドが増える。トランスレーションでは、適用区間内で (IPv6ヘッダ - IPv4ヘッダ)分(標準 20 bytes)増加する。よって、ネットワークMTUとの関連で議論がある。またいずれの方式も、フラグメント化されたIPv4パケットの取扱いに難がある。

IPv4上のコネクション(L3)に対してしばしば、キャリアグレードNAT(CGN)が適用される。

## ステートレスIP/ICMP変換

ステートレスIP/ICMP変換(SIIT: Stateless IP/ICMP Translation)は、IPv6とIPv4の間でパケットのヘッダフォーマットを変換する。SIITでは、「IPv4変換アドレス」(IPv4-translated address)と呼ばれるIPv6アドレスの種類を定義する。IPv4変換アドレスはプリフィックスが::ffff:0:0:0/96で、IPv4アドレスがa.b.c.dのとき::ffff:0:a.b.c.dのように書き表す。このプリフィックスは、トランスポート層のヘッダのチェックサム値が変化しないよう、値が0のチェックサムを与えるために選ばれた。

このアルゴリズムは、固定的に割り当てられたIPv4アドレスを持たないIPv6ホストが、IPv4のみのホストと通信する場合に使用される。アドレスの割当てとルーティングの詳細は、仕様に記載されていない。SIITは、ステートレスなネットワークアドレス変換(NAT)の特別な例である。

仕様はNGTRANS IETFワーキンググループによるもので、最初にサン・マイクロシステムズのE.Nordmarkによる RFC 2765 として、2000年2月にドラフトが発表された。RFC 2765は、2011年に RFC 6145 によって廃止された。RFC 2765のアドレス・フォーマットの一部は、 RFC 6052 で定められている。IPv4/IPv6変換の枠組みは、RFC 6144で定められている。

## トンネルブローカー

トンネルブローカーは、IPv6のトラフィックをIPv4による接続の中にカプセル化することによって、IPv6による接続を提供する。一般的には6in4が使用される。これは、IPv4ネットワークの中にIPv6トンネルを確立する方法である。トンネルは、Tunnel Setup Protocol(TSP)やAnything In Anything(AYIYA)で管理される。初のトンネルブローカーは、1999年2月に公開された。

## 6rd

6rdは、インターネットサービスプロバイダ(ISP)がIPv4基盤を通してIPv6サービスを迅速に提供することを容易にする技術である。IPv4とIPv6の間でステートレスなアドレスマッピングを使用し、顧客ノードの間でIPv4パケットと同様に最適化されたルートをたどる自動的に生成されたトンネルを通してIPv6パケットを送る。

2007年の RFC 5569 によって定義され、ネイティブアドレスに対するIPv6サービスの初期の大規模な展開のために使われた。プロトコルの標準化過程の仕様は RFC 5969 である。

## Transport Relay Translation

RFC 3142 ではTransport Relay Translation (TRT)が定められている。この方法は、NAT-PT/NAPT-PTとほぼ同一であるが、DNSのAAAAレコードとAレコードの変換に RFC 2694 で定められたDNS-ALGを使用する。

## NAT64

NAT64は、IPv6ホストがIPv4サーバーと通信することができるようにする技術である。NAT64サーバは、少なくとも1つのIPv4アドレスと、32ビット(例:64:ff9b::/96)のIPv6ネットワークセグメントを持つエンドポイントである( RFC 6052, RFC 6146 )。

IPv6クライアントは、これらのビットを用いて通信することを望むIPv4アドレスを埋め、結果として生じるアドレスにパケットを送る。NAT64サーバーはIPv6とIPv4アドレスの間でNATマッピングを作成し、クライアントと相手先が通信できるようにする。

## DNS64

DNS64は、ドメインのAAAAレコードを要求されるためにDNSサーバーを記述するが、Aレコードだけしか見つけられなかった場合は、AレコードからAAAAレコードを合成する。合成されたIPv6アドレスの最初の部分はIPv6/IPv4トランスレータを指し、第2の部分はAレコードからIPv4アドレスで埋める。トランスレータは、通常NAT64サーバーである。DNS64の標準化過程の仕様は RFC 6147 である。

DNS64には、以下の2つの問題がある。

- DNSが遠隔ホストアドレスを見つけた場合にしか働かない。IPv4リテラルが使われるならば、DNS64サーバーは決して関与しない。
- DNS64サーバーがドメインのオーナーで特定されない記録を返す必要があるので、変換しているDNSサーバーがドメインのオーナーのサーバーでない場合、ルートに対するDNSSEC確認は失敗する。

## 464XLAT

464XLAT(RFC 6877)は、IPv6のみのネットワークの上のクライアントがIPv4のみのインターネットサービス(Skypeなど)にアクセスできるようにする。

クライアント(例えばSkypeクライアント)は、IPv6のみのネットワークを通してNAT64トランスレーター(上述)に送るために、SIITトランスレーター(上述)を使用してIPv4パケットをIPv6に変換する。NAT64トランスレーターは、IPv4が使用可能なネットワークを通してIPv4のみのサーバ(例えばSkypeサーバ)に送るために、IPv6パケットをIPv4に変換する。SIITトランスレーター(CLAT)は、(特別なソフトウェアとして)クライアントそのものとして、または中間のIPv4が使用可能なLAN(ただし、それにはIPv4インターネット接続性があるなら、464XLATは必要でない)として実装される。NAT64トランスレーター(PLAT)は、サーバーとクライアント(CLATを通して)に到達できなければならない。NAT64の使用は、UDP、TCP、ICMPを用いたクライアントサーバモデルの接続に制限される。

464XLATはトランスレーションであり、CPEあるいは端末に置かれるCLATはステートレス、PEに置かれるPLATはステートフルとなる。

- Android用のCLATの実装: Android CLAT
- AndroidネイティブのCLATの実装はバージョン4.3(Jelly Bean)で導入された。
- Windows PhoneネイティブのCLATの実装は2014年にWP 8.1で導入された。

## Dual-Stack Lite (DS-Lite)

Dual-Stack Lite(デュアルスタックライト、DS-Lite)は、 RFC 6333 で定義されている。DS-Liteでは、インターネット接続を提供するためにグローバルIPv4アドレスをカスタマ構内設備(CPE)に割り当てる必要がない。

CPEは、ISPから割り当てられた範囲でLANクライアントにプライベートIPv4アドレスを配信する。CPEは、IPv6パケットの中にIPv4パケットをカプセル化する。CPEはパケットをISPのキャリアグレードNAT(CGN)に届けるためにグローバルなIPv6接続を使用する。ISPのCGNにはグローバルなIPv4アドレスが割り当てられている。ISPのCGNは、元のIPv4パケットをデカプセル化し、IPv4パケットにNATを実行し、グローバルのIPv4インターネットに送信する。CGNは、セッションごとにCPEのグローバルIPv6アドレス、プライベートIPv4アドレス、TCPまたはUDPのポート番号を記録することにより、個々のトラフィックフローを識別する。

## MAP

Mapping of Address and Port(MAP)は、CiscoによるIPv6移行技術の提案で、A+P のポートアドレス変換と、ISP内部のIPv6ネットワークの上にIPv4のトンネリングを行う技術を複合させる。2012年9月 (2012-09)現在、MAPはInternet Draftの標準化過程(standards-track)の状態にあった。

IPv4パケットをIPv6にカプセル化しトンネリングする方式がMAP-E (RFC 7597)である。トンネリングではなく、NAT64によりトランスレーション(ヘッダ書き換え)を行う方式はMAP-T (RFC 7599)と呼ぶ。

いずれの方法も、CPE側 (CE)でNAPT実施(ステートフル)し、PE側 (BR:Border Relay) はステートレスとなる。

## 提案中の草案

以下の方法は、まだ議論中であるか、IETFによって放棄された。

### 4rd

4rd(IPv4 Residual Deployment)は、 RFC 7600 で定義された、IPv6ネットワークを通してIPv4サービスの提供を容易にするための技術である。6rdのように、IPv6とIPv4の間でステートレスなアドレスマッピングを使用する。トランスポート層ポートに基づくIPv4アドレスの拡張をサポートする。これは、A+Pモデルのステートレスな変種である。

4rd-U (Unified) とは異なる。MAP-Eの原型。

## 非推奨の方法

以下の方法は、IETFによって非推奨とされた。

### NAT-PT

ネットワークアドレス変換/プロトコル変換(NAT-PT: Network Address Translation/Protocol Translation)は RFC 2766 で定められたが、多くの問題のために、 RFC 4966 によって廃止された。一般的に、NAT-PTはDNSアプリケーション・レベル・ゲートウェイ(DNS-ALG)実装とともに用いられる。

### NAPT-PT

ネットワークアドレスポート変換/プロトコル変換(NAPT-PT: Network Address Port Translation/Protocol Translation)は、 RFC 2766 で定められた。NAT-PTとほとんど同じであるが、アドレスだけでなくポート番号の変換も行う。この方法は、 RFC 4966 によって廃止された。

## その他の方法

- IVI
  - 1:N

- dIVI
  - dIVI = double IVI。MAP-Tの原型
- 4rd-U
  - ヘッダ情報のマッピング。MAP-EとMAP-Tの統合。4rdとは異なる。
- LW4o6
  - RFC 7596。MAP-Eとの相違点

## 実装

- stone (ソフトウェア) - WindowsとUnix系OSのポートトランスレータ
- faithd - BSDベースの固定TRTの実装(KAMEプロジェクトによる)
- TAYGA - Linux用のステートレスなNAT64の実装
- Jool - Linux用のステートフルなNAT64の実装
- naptd - ユーザレベルのNAT-PT
- Ecdysis - NAT64ゲートウェイ(DNS64を含む)
- Address Family Transition Router (AFTR) - DS-Liteの実装
- niit - IPv4ユニキャストトラフィックをIPv6ネットワークへ流せるようにするLinuxカーネルデバイス
- IVI - IPv4/IPv6パケット変換の実装(Linuxカーネルのパッチ)
- Microsoft Forefront Unified Access Gateway - DNS64・NAT64を実装するリバースプロキシ・VPN
- BIND - バージョン9.8からDNS64を実装
- PF (ファイアウォール) - OpenBSDのパケットフィルタ。バージョン5.1からNAT64を含むIPバージョン変換をサポートする。