用語辞典・IPv6・接続方式

NAT64

NAT64とは

NAT64は、IPv6専用クライアントとIPv4サーバーの間でIP・ICMPヘッダーとアドレスを変換し、通信状態を保持して往復を対応付ける仕組みです。RFC 6146の正式名称はStateful NAT64: Network Address and Protocol Translation from IPv6 Clients to IPv4 Servers(ステートフル・ナット・シックスティーフォー)です。

IPv6クライアントは、IPv4宛先を埋め込んだ特別なIPv6アドレスへパケットを送ります。NAT64装置はIPv6ヘッダーをIPv4ヘッダーへ変換し、自身の公開IPv4プールから送信元アドレスとポートを割り当てます。

NAT64は、IPv4パケットをIPv6で包むトンネルではありません。ヘッダーを変換し、IPv6側とIPv4側で異なるIPパケットとして転送します。

IPv4宛先を埋め込んだIPv6アドレスを、変換装置へ経路制御するヘッダー変換と状態表を使い、少数の公開IPv4アドレスで複数クライアントを中継する
IPv6専用端末がPref64とIPv4宛先を組み合わせたIPv6アドレスへ送り、NAT64がヘッダーを変換して状態表と公開IPv4プールでIPv4サーバーとの往復を対応付ける図解
図1ネイティブIPv6の接続先へはNAT64を通りません。IPv4側から新規通信を始めるには、通常の動的状態だけでなく静的バインディングなどが必要です。

宛先IPv6アドレスに、IPv4宛先を埋め込む

NAT64へ届くIPv6宛先の構造変換用プレフィックスとIPv4アドレスを、RFC 6052の形式で組み合わせる
Pref64::/n変換装置へ向けるIPv6プレフィックス

Well-Known Prefixの64:ff9b::/96またはネットワーク固有プレフィックスを使う

IPv4アドレス最終的なIPv4宛先

例示用IPv4アドレス192.0.2.33を所定のビット位置へ埋め込む

IPv6宛先NAT64へ送る完成アドレス

/96の例では64:ff9b::c000:221となり、経路がNAT64へ導く

図2表示例は説明用です。利用中ネットワークのPref64は事業者設定に従い、任意のNAT64へインターネット全体から到達できる値ではありません。

BIBとSession Tableが、往復を対応付ける

BIB(Binding Information Base/バインディング・インフォメーション・ベース)は、IPv6側のアドレスとポートを、NAT64のIPv4アドレスとポートへ対応付けます。TCP、UDP、ICMP Queryで別々のバインディングを管理します。

Session Table(セッション・テーブル)は通信相手を含むフロー情報と有効時間を持ちます。IPv4サーバーから戻ったパケットは、この状態から正しいIPv6クライアントへ変換されます。

DNS64は宛先を作り、NAT64はパケットを変換する

DNS64は、AAAAを持たずAだけを持つ名前について、Pref64とAのIPv4アドレスから合成AAAAを返せます。IPv6クライアントは通常のIPv6接続としてそのアドレスへ送り、経路上のNAT64が実際の変換を行います。

IPv4アドレスを文字列で直接指定するアプリや、DNSを使わないプロトコルは、DNS64だけでは宛先IPv6アドレスを得られません。端末側でIPv4互換を提供する464XLATなどが必要になる場合があります。

すべてのIPプロトコルや外部着信を自動変換するわけではない

RFC 6146の状態保持型NAT64はユニキャストTCP、UDP、ICMP Queryを対象とし、IPsecなど任意のプロトコルを一律に変換する仕様ではありません。IP・ICMP変換では、チェックサムやエラー内に引用されたヘッダーも処理します。

動的なバインディングは通常IPv6側から始めた通信で作られます。IPv4側から任意のIPv6端末へ新規接続するには静的バインディングやNAT越えの別手法が必要で、一般的な公開サーバー用途とは条件が異なります。

仕様の確認資料:RFC 6146「Stateful NAT64」RFC 6052「IPv6 Addressing of IPv4/IPv6 Translators」RFC 7915「IP/ICMP Translation Algorithm」

関連用語