IPv4アドレスを含むIPv6アドレス表記
IPv6アドレスには、128ビットの中にIPv4アドレスを含むものがあります。 IPv4アドレスを含むIPv6アドレスを表記するとき、通常のIPv6アドレス表記だけではなく、最後の32ビット部分をドット「.」で区切ったIPv4アドレス表記で記載することもできます。
先ほど公開したNAT64+DNS64記事で紹介している「64:ff9b::192.0.2.33」というのも、IPv4アドレスを含むIPv6アドレスの表記方法です。
このようなIPv4アドレスを含むIPv6アドレスをテキストで表記する方法に関しては、RFC 5952(A Recommendation for IPv6 Address Text Representation)の5章でも解説されています。
IPv4射影アドレス(IPv4-Mapped IPv6 Address)
IPv6アドレスの基本仕様(RFC 4291)には、IPv4射影アドレスというものがあります。
NAT64で利用される「64:ff9b::/96」や、RFC 5952でIPv4アドレスが埋め込まれたIPv6アドレスを利用する例として紹介されているISATAP(RFC 5241)で利用されるIPv6アドレスを利用する機器は、IPv4アドレスが埋め込まれたIPv6アドレスを通常のIPv6通信として扱います。
IPv4射影アドレスはIPv6アドレスを使いつつも、機器が行う通信はIPv4で行われるので、NAT64やISATAPとは少し違います。
たとえば、192.0.2.1というサーバとIPv4で通信を行う場合を考えてみます。 Webブラウザに対して http://[::ffff:192.0.2.1]/ とやってみたり、ssh ::ffff:192.0.2.1 とコマンドラインに打ち込むことで、IPv4射影アドレスを手元の環境で試してみることができます。 これらは、IPv6対応が行われた機器であれば、IPv6ネットワークがなくても動作します。 IPv6ではなく、IPv4で通信が行われているためです。
IPv4射影アドレスが特殊なのは、IPv6ソケットを通じてIPv4の通信が行えるという点です。 IPv4のソケットはsocketシステムコールをAF_INETというアドレスファミリで使うことで生成し、IPv6のソケットはAF_INET6というアドレスファミリで生成します。 IPv4とIPv6のソケットは、違うものなのです。
しかし、IPv6ソケットには、IPv4射影アドレスで表現されるIPv4アドレスを利用することができるので、IPv6ソケットを使ってIPv4の通信が行えるようになっています。 IPv4射影アドレスを利用できるような機能は、デフォルトで有効になっていることが多いのですが、それを機能を無効にするには、IPV6_V6ONLYという引数でsetsockoptを行います。
IPv4での通信ができないようにIPv6ソケットのみを使ってプログラムを書き、意図的にIPv4ソケットを生成していない場合でも、IPv4射影アドレスの機能を無効にしないと、気がつかずにIPv4で通信ができる状態になっていることがあるので注意が必要です。
追記
サーバ側の話も書きました。
最近のエントリ
- 「ピアリング戦記」の英訳版EPUBを無料配布します!
- IPv4アドレス移転の売買価格推移および移転組織ランキング100
- 例示用IPv6アドレス 3fff::/20 が新たに追加
- ShowNet 2024のL2L3
- ShowNet 2024 ローカル5G
- ShowNetのローカル5G企画(2022年、2023年)
過去記事