IPv4/IPv6 変換技術は IPv4 から IPv6 に完全移行するまでの期間中に必要となる技術ですが、以下のような背景があることから、個人的には IPv4/IPv6 変換技術をあえて学ぶモチベーションが強くありません。
- IPv4 から IPv6 に完全移行するまでの一時的な技術である。
- 様々な変換技術が存在しているが、どれも複雑であり、一時的な技術にしては学習ハードルが高い。
- そもそも IPv6 は IPv4 と互換性を持つことを前提としていない。このため、これらの変換技術は IPv6 より上位レイヤー(あるいは別の要素)で実装する必要があり、別の弊害が起きる可能性が高い。
私見としては、移行中は End-to-End のデュアルスタックを用いた方が良いと思っています。この場合、IPv4, IPv6 ともにピュアな IP 通信が可能となり、妙な弊害は発生しません。一方で、「IPv6 はネットワークの話なので、それ以外のサーバーなどは IPv6 を使いたくない」という意見も多く、一筋縄ではいきません。
このため、ネットワークエンジニアは IPv4/IPv6 変換技術を学ばざるを得ないというのが、現状での私の結論です。IPv6 が浸透しつつあるとはいえ、おそらくあと 100 年くらいは IPv4 が残ると思うからです。そして、変換技術とはいえ、これはネットワークエンジニアだけではなく、それに関わる他のエンジニアもある程度は理解しておかないと会話にならないと思いますので、諦めて学んで下さい。
代表的な IPv4/IPv6 変換技術は以下のとおりです。
SIIT (Stateless IP/ICMP Translation):
- RFC 6146 で定義されています。
- IPv4 – IPv6 間で双方向通信が可能です。
- ステートレス方式のため、ステートフル方式で発生する問題がありません。
- IPv4 アドレスを、IPv6 アドレスプレフィックスと 16 ビットのポート番号に変換します。
- ICMP を含む、すべての IPv4 パケットが変換されます。
- 送信元と宛先 IP アドレスを変換します。
Stateful NAT64:
- RFC 6145 で定義されています。
- IPv4 – IPv6 間で双方向通信が可能です。
- ステートフル方式のため、細かい制御が可能である一方、特定の通信に対応できない場合があります。
- IPv4 アドレスを、IPv6 アドレスプレフィックスと 32 ビットのポート番号に変換します。
- 送信元と宛先ポート番号も変換されます。
464XLAT:
- RFC 6877 で定義されています。
- IPv4 – IPv6 間で双方向通信が可能です。
- SIIT と Stateful NAT64 を組み合わせたものであり、464XLAT クライアント (SITT) はステートレス方式、464XLAT サーバー (Stateful NAT64) はステートフル方式となります。
- 464XLAT クライアント (SITT) は、IPv4 アドレスを IPv6 プレフィックスと 16 ビットのポート番号に変換します。
- 464XLAT サーバー (Stateful NAT64) は、送信元と宛先ポート番号も変換します。
MAP-T (Mapping of Address and Port with Translation):
- RFC 7599 で定義されています。
- IPv4 – IPv6 間で双方向通信が可能です。
- ステートフル方式のため、細かい制御が可能である一方、特定の通信に対応できない場合がありますが、NAT64 と比較してより柔軟なアドレッシングスキームを提供します。
- IPv6 アドレスの一部を IPv4 アドレスとして使用し、更にポート番号も変換し、IPv4 と IPv6 を相互に変換します。
これらの内、最も制約が少なく、かつ導入しやすいと思うのは、やはり SIIT です。ステートレスであり、ポート番号の変換がないことが、最もピュアな IP 通信だと思うからです。文章だけだとこのような複雑な技術は説明が難しいですが、情報のアップデートがあれば更新していきたいと思います。
この記事は、こちらの情報も参考にさせていただきました。かなり詳細に書かれているので、時間があるときにじっくり読みたいと思います。