IPv6とIPv4を共存させる!【IPv6移行なんてやってられない】

インターネット接続機器が爆発的に増えて、このままではIPv4のアドレスが枯渇してしまう、少ない資源をなんとか有効活用しようとして生まれた技術がプライベートアドレスNATクラスレスアドレッシング(サブネットマスク)などです。

上記技術はあくまで一時しのぎの策に過ぎません。IPv6のアドレス空間は128ビットと巨大であり、事実上無限のIPアドレスを割り当てることができるため、そんな一時しのぎみたいなことをせずに、最初からIPv6にしてしまえば良いのではないでしょうか?

そう思うかもしれませんが、なかなかそうはいきません。何故なら、現行のIPv4と次世代のIPv6は互換性がなく、相互通信はできないからです。

IPv4もIPv6も同じインターネットプロトコルであり、バージョンが違うだけで互換性があっても良いように一見思えますが、両者はまったくの別物です。
アドレス長をはじめ、ヘッダ構成、通信の種類に至るまで仕様が異なるのです。「インターネットという世界は2つある。」と前回の記事で書きましたが、それは、IPv4というインターネットとは別に、IPv6という新しいインターネットが生まれたと考えるのがわかりやすいです。

2021年現在でもさまざまな機器がIPv4アドレスを使用しているため、IPv4を廃止してIPv6に完全移行するのはまだまだ困難です。そこで、IPv4とIPv6を共存させる仕組みが必要になってきます。今回はその仕組みについて考えていきたいと思います。

IPv4とIPv6を共存させる

現時点でのインターネットの主流はまだまだIPv4です。そのため、IPv6でネットワークを構成する場合は、組織内のネットワーク全体をIPv6にする必要がありますが、移行中は全てのシステムを止めることになり、コストもはずむため、現実的になかなか難しいです。そこで段階的にIPv6へ移行していくことを考えるわけですが、そのためにはIPv4とIPv6を共存させる必要があります。

しかし、前述のとおり、IPv4とIPv6は別の世界であり、それらの世界をつなぐ仕組みが必要です。

まずは、IPA情報処理技術者の過去問からこの点について考えてみます。

IPv6への第1ステップの取り組みとしては、インターネット経由でIPv6端末からもIPv4のWebサーバーを利用できるように、IPv4とIPv6を変換する装置(以下、トランスレータという)を導入することにする。 トランスレータは、NATの延長線上の技術である。NATは、IPアドレスを変換するのに対し、トランスレータは、IPヘッダを変換し、必要に応じてポート番号も変換する。 IPヘッダの変換には様々な処理が必要である。IPv4ヘッダとIPv6ヘッダは、それぞれ20バイト、40バイトと長さが異なる。 IPv6のIPアドレスは128ビットであり、それによって表せるIPアドレス数は、IPv4と比較して2の96乗倍である。また、IPv6には、標準ヘッダの他に、フラグメントヘッダやルーティングヘッダといった、IPv4にはない拡張ヘッダが導入されている。また、IPv4では、経路中のルータが必要に応じてパケットを分割することができるが、IPv6では許されていないという違いもある。トランスレータは、これらの違いを吸収して、IPv4とIPv6を相互変換している。

上記では、トランスレータ(IPv4/IPv6トランスレーション)を用いたIPv4とIPv6の共存方法について述べています。共存方法にはいくつかの方法があり、以下のようなものがあります。

IPv4とIPv6の共存方法
  • トンネリング
  • デュアルスタック
  • IPv4/IPv6トランスレーション

デュアルスタック

IPv4とIPv6の二つの異なるプロトコルスタックを同時に動作させ、共存させる仕組みがデュアルスタックです。

現行のIPv4ネットワークにIPv6ネットワークを重ねるといったイメージですか?

そのイメージで正しいよ。ひとつの端末(=NIC)にIPv4アドレスとIPv6アドレスの両方を設定するんだ。IPv4ホストと通信する際は前者、IPv6ホストと通信する際は後者を用いることになるよ。単一の回線に二つのネットワークがのっているイメージでも正しいね。

でもそれって、専用の機器がいるとかじゃないんですか?

専用の機器はいらないよ。IPプロトコルはレイヤー3、つまりソフトウェア上で動作するものだから、レイヤ1、2を担当する従来のNICがあればIPv6通信は可能だよ。お互いの通信は独立していて、互いに影響を与えることもなく、理想的な対応策とも言えるね。

それならデュアルスタックにすれば良いですね!

デュアルスタックの欠点として、ネットワーク上のすべての機器に対してIPv6設定が必要ということなんだ。台数が少なければ良いけど、端末が何百、何千台とあるような大規模なネットワークであれば時間もかかる。あと、DNSやメールサーバーなどについてもIPv6用の登録を追加しないといけないため、コストも大きくかかると考えた方が良いね。

プロキシサーバーによる対応

WebプロキシにIPv4、IPv6双方のアドレスを持たせ、IPv4で来た通信をIPv6アドレスで送信し直す、いわば中継方式がプロキシ方式です。この方式では、IPv6対応が必要なのは基本的にプロキシサーバーだけでなので導入敷居は比較的低いと言えます。

手間もコストもかからないということですね!そういうの好きです!

ただし、代わりに変換できる通信は限られるという欠点もあるんだ。HTTPやHTTPSなど、代表的なプロトコルにしか対応しておらず、ニッチなプロトコルや独自のプロトコルは対応できないと考えた方が良いね。

IPv4/IPv6トランスレーション

IPv6からIPv4への通信、IPv4からIPv6への通信を、トランスレータを用いて取り持つ方法です。

IPヘッダを見て、定められたルールに基づき送信元・宛先を変換してくれる、いわゆるNAT箱みたいなものだね。

NATはプライベートアドレスをグローバルアドレスに変換する技術でしたよね?

そう!その変換対象がプライベートとグローバルではなく、IPv4ヘッダとIPv6ヘッダを変換する装置がトランスレータだよ。NAT64、もしくはNAT46とも言われるね。64ならIPv6からIPv4への変換、46は逆といった感じ。

じゃあ今度こそ、そのトランスレータを使えば良いんじゃないですか?

でも、トランスレータは基本的に高額な装置なんだ。IPv6移行はコストを抑えて実施したいという要望が結構あって、導入を見送る企業が多いようね。

Cさん

でもこれって、変換対象が少し違うだけで、従来からある普通のNAT箱とあんまり変わらないですよね?何でそんなに高額になるんですか?

単純なNAT箱なら確かにそんなに高額にはならないよ。だけど、普通のものだと設定が大変になることがある。なぜなら、IPv4とIPv6の対応表を作成しないといけないから。端末の数が少なければ良いけど、多いとその分だけポリシーの数が必要なんだ。例えば、端末20台なら入りと出で合計40ポリシーといった感じね。これが何千台の端末数がある場合はとてもじゃないけど手動で設定できるボリュームではないんだ。装置が高額になるのはそういった問題を解決するための仕組みが組み込まれているからなんだ。

なるほど。その仕組みとはどんなものがあるんですか?

例えば、DNS64と呼ばれる、名前解決を使ってIPv6、IPv4を吸収する仕組みがあるよ。DNSの名前解決によりホスト名からIPアドレスを引けるわけなんだけど、その仕組みを利用し、IPv4端末から名前解決要求が来たらIPv4アドレスを返し、IPv6端末から名前解決要求が来たらIPv6アドレスを返してやれば、相互のネットワークを仲介することができるというわけ。いわゆるDNSフェイクというものだね。

確かにそれなら、手動で変換ポリシーを作らなくても良さそうです。では問題はコストだけですか?

それがまだ問題はあるんだ。NATと相性が悪いアプリとかって聞いたことない?

オンラインゲームとかP2Pソフトのことですか?

そう、それらがなぜNATと相性が悪いのかというというと、IPヘッダだけじゃなくデータ部にまでアドレスが書き込まれているからなんだ。NATはあくまでヘッダの中身を書き換えるもので、データの中身までは書き換えてくれない。だから通信に失敗してしまうんだ。

あれ?でも、データ部まで含めてパケット変換してくれる仕組みがあった気がします。

ALG(アプリケーションレイヤーゲートウェイ)のことだね。ただそれもプロトコルごとに対応させないといけない。FTPやSIPといった代表的なプロトコルなら対応しているけど、ニッチなプロトコルや独自のプロトコルには対応しておらず、そういったものを使っているシステムがある場合は、結局使えないということになるんだ。

トンネリング

トンネリングは、IPv4ネットワークを経由してIPv6の通信を行う通信方式です。IPv4ネットワーク上でIPv6パケットをルーティングするため、IPv6パケットはIPv4パケットにカプセル化され、転送されます。トンネリングの手法はいくつかあり、ルータ間で自動トンネリングを行う「6to4」や、あるサイト内のローカルIPv4ネットワークでIPv6ネットワークでIPv6通信を実現するTeredo(テレード)ISATAP(アイサタップ)などの技術があります。

トンネリングの基本的な考え方は「カプセル化」です。IPv6パケットをIPv4ヘッダをつけてIPv4パケットにカプセル化し、IPv4ネットワークに転送します。

代表的な方式が6to4トンネルになりますが、上図イメージのようにデュアルスタックルータ間でトンネルを生成します。
宛先アドレスは静的に指定しません。着信するIPv6パケットの宛先アドレスから、自動的に宛先IPv4アドレスを導きます。6to4ではIPv6アドレスのプレフィックスに「2002::/16」を使用する必要があります。

現在はまだIPv4アドレスの利用が多いので、LAN側ではIPv6を使用する6to4が多く用いられますが、その逆であるIPv4パケットをIPv6パケット内にカプセル化し通信を行う技術もあります。

Cさん

ん?でもこれって、異なるネットワーク間を中継しているだけで、例えば、IPv4端末はIPv6ネットワーク内のサービスを利用できないのでは?

そのとおり。だから本当の意味で「共存できている」というわけではないんだ。

IPv6への移行

「IPv6」」という用語が世の中に広がったのはもう随分前です。私が社会人になったときくらいのとき(15年程前)にはすでに、「間近に迫るIPv4アドレス枯渇問題」という感じで認知されていました。

ただ、そんな前から認知されているのに、2021年になった今でもまだまだIPv4の方が多く使われているのが実状の様です。

その要因として、NATやプライベートアドレスといた技術で意外とやり繰りできているということが挙げらえると思います。

社会基盤システムのような大きなシステムを持つ会社は、クラスAのIPアドレス帯を何個も持っており、そういう会社にはまだまだストックがあるので、慌てる必要もないのでしょう。

特にインターネットに直接つながらない、独自のネットワークで構成するシステムについては、IPv4のままとしているところが多いように感じています。IPv4で完成しているシステムをIPv6に移行するのはリスクが高すぎる、かつ、IPv6に移行したからと言って、直接的な利益につながらないという理由などが移行に踏み切れない理由だと思います。

ただそうはいっても、インターネットに直接つながるようなネットワークについてはIPv6への移行は着実に進んでいるようです。

ICMPv6

最後に少し余談となりますが、IPv6ではIPv4に比べてICMPの役割が非常に大きくなります。(IPv6でのICMPをICMPv6と表現します。)

特に大きいのか、IPアドレスからMACアドレスを調べる仕組みとしてIPv4ではARPが担当していましたが、IPv6からはICMP近隣探索メッセージに変更されるという点です。