Solaris のシステム管理 (第 3 巻)

第 15 章 IPv4 から IPv6 への移行

IPv6 をサポートするためにホストとルーターをアップグレードしたあとも、IPv4 だけをサポートしているノード (ホストとルーター) とのネットワーク経由の相互運用が必要です。この章では、IPv4 から IPv6 への移行方法と、標準的な解決法の概要について説明します。RFC 1933 でも、移行問題の詳しい解決法を示しています。

移行条件

移行時のグローバルな調整は不要です。サイトとインターネットサービスプロバイダ (ISP) はそれぞれのスケジュールで移行できます。また、移行時の依存条件も最小限に抑えました。たとえば、ホストのアップグレード前にルーターをアップグレードしなくても移行できます。

サイトが異なれば、移行時にはそれぞれの制約が課されます。また、IPv6 の初期アダプタには、IPv6 の製品版ユーザーの場合とは異なる問題があります。RFC 1933 は現在利用できる移行ツールを定義しています。移行の必然性としては、IPv4 アドレス領域の不足または IPv6 の新機能を使用する必要性のどちらか、または両方が考えられます。IPv6 仕様では、移行時には既存のプロトコルとアプリケーションとの完全な互換性が求められます。

移行方式を理解できるように、次の用語を定義します。

標準移行ツール

RFC 1933 は、次の移行方式を定義しています。

デュアルスタックの実装

デュアルスタックとは、アプリケーションからネットワーク層に到るプロトコルスタックのすべてのレベルの完全な複製をいいます。デュアルスタックの例として、同じマシンで実行する OSI プロトコルと TCP/IP プロトコルがあります。ただし、IPv6 移行の観点からは、プロトコルスタックに IPv4 と IPv6 の両方を組み込み、残りスタックが同一である状況を表します。この場合、同じ伝送プロトコル (TCP、UDP など) と同じアプリケーションが IPv4 と IPv6 の両方で実行します。

図 15-1 は、OSI 層全体にわたるデュアルスタックプロトコルを表します。

図 15-1 デュアルスタックプロトコル

Graphic

デュアルスタック方式では、ホストとルーター両方のサブセットをアップグレードして、IPv4 に加えて IPv6 をサポートします。この方法では、アップグレードされたあとのノードからも IPv4 で常に IPv4 専用ノードと相互運用できます。そのため、IPv4 からデュアルスタックにアップグレードしても失われるものはありません。

ネームサービスの設定

デュアルノードでは、ピアが IPv6 と IPv4 のどちらをサポートしているか明確でないと、伝送時にどちらの IP バージョンを使用するのかが決まりません。そのため、ネームサービスでどんな情報を伝達するかを制御する必要があります。ネームサービスで IPv4 ノードの IP アドレスと IPv6 ノードの IP アドレスを定義すると、デュアルノードでは、両方のアドレスをネームサービスで使用できます。

ただし、IPv6 アドレスをネームサービスに指定した場合も、ネームサービスから情報を得たすべてのノードが IPv6 でそのノードにアクセスできます。たとえば、NIS に IPv6 アドレスを指定すると、その IPv6 ホストはその NIS ドメインに所属するすべての IPv6 とデュアルノードからアクセスできます。グローバル DNS に IPv6 アドレスを指定するには、そのノードがインターネット IPv6 バックボーンからアクセスできることが条件です。これは、IPv4 の場合も同様であり、たとえばメールの配信と HTTP プロキシの操作は、IPv4 でアクセスできるノードの IPv4 アドレスがあるかどうかに依存します。たとえばファイアウォールなどの理由で IPv4 でアクセスできない場合、IPv4 アドレスがアクセスできる範囲だけで認識できるように、ネームサービスは内部ファイアウォールと外部ファイアウォールのデータベースに分けます。

ネームサービスのアクセスに使用するプロトコル (DNS、NIS、NIS+ など) は、ネームサービスで検索できるアドレスタイプに依存しません。このネームサービスサポートでは、デュアルスタックとの組み合わせにより、デュアルノードから、IPv4 専用ノードとの通信では IPv4、IPv6 ノードとの通信では宛先までの IPv6 ルートがあれば IPv6 を使用できます。

IPv4 互換アドレスフォーマットの使用

通常 32 ビット IPv4 アドレスは、128 ビット IPv6 アドレスで表現できます。移行機能では、次の 2 つの形式を定義しています。

IPv6 ノードは互換フォーマットで表現します。このフォーマットでは、実際の IPv6 アドレスがなくても IPv6 ノードを使用できます。また、IPv4 専用ルーターで自動トンネルを使用できるため、このアドレスフォーマットではさまざまな IPv6 設定の試用が可能です。ただし、IPv6 ステートレスアドレス自動設定機構では、このアドレスは設定できません。IPv6 ステートレスアドレス自動設定機構には、DHCPv4 など既存の IPv4 機構や静的構成ファイルが必要なためです。

マップアドレスフォーマットでは、IPv4 ノードを表現します。現在ソケット API の一部でだけ、このアドレスフォーマットの使用方法が定義されています。IPv4 アドレスを 128 ビットマップアドレスで表現して IPv6 アドレスと IPv4 アドレスの両方に共通のアドレスフォーマットを使用すると、アプリケーションで便利です。ただ、IPv4 プロトコルトランスレータと IPv6 プロトコルトランスレータがないとこれらのアドレスは使用できません。

トンネル機構

移行時の依存状態を最小限に抑える目的から、2 つの IPv6 ノード間のあるすべてのノードで IPv6 をサポートする必要がありません。この機構をトンネルといいます。基本的に IPv6 パケットは IPv4 パケット内部に組み込まれ、IPv4 ルーター間を転送されます。図 15-2 は、IPv4 を使用したルーター (R) 間のトンネル機構を示します。

図 15-2 トンネル機構

Graphic

その他、移行時には次のようなトンネル機構の使用方法があります。

設定トンネルは、MBONE (IPv4 マルチキャストバックボーン) など現在はインターネットで他の目的に使用します。設定トンネルの作成手順からいうと、2 つのルーターを設定して、その間に IPv4 ネットワーク経由の仮想ポイントツーポイントリンクを作成します。近い将来インターネットのさまざまな局面にこの種のトンネルが利用されるでしょう。

自動トンネル

初期の実験的配置では、自動トンネルの使用可能範囲は限定されています。IPv6 ルーターがない場合、自動トンネルには IPv4 互換アドレスが必要であり、IPv6 ノードと接続できることが条件です。(自動トンネルネットワークインタフェースを設定すれば) トンネルの発信元はデュアルホストとデュアルルーターのどちらが発信元でも使用でき、終点は必ずデュアルホストになります。トンネルのはたらきにより、宛先 IPv4 アドレス (トンネルの終点) が IPv4 互換宛先アドレスから抽出されて動的に指定されます。

アプリケーションとの対話

IPv6 にアップグレードしたノードでも、IPv6 を使用できるかどうかはアプリケーション次第です。アプリケーション側で変更が必要な API (ソケットなど) を使用する場合や、API のプロバイダ (java.net クラスなどの実装) が IPv6 アドレスをサポートしていないアプリケーションでは、IPv6 アドレスのネームサービスを要求するネットワーキング API を使用しません。どちらの場合も、ノードが送受信するのは IPv4 ノードのように IPv4 パケットだけです。

次の用語は、インターネットの世界では標準用語として使用されています。

IPv4 と IPv6 の相互運用性

IPv4 から IPv6 に段階的に移行する場合、新しく導入する IPv6 有効化アプリケーションと併行して既存の IPv4 アプリケーションも使用しなければなりません。最初の段階では、デュアルスタックで実行する、ということは IPv4 プロトコルスタックと IPv6 プロトコルスタックの両方で機能するホストプラットフォームとルータープラットフォームがベンダーから提供されます。IPv4 アプリケーションは、少なくとも 1 つの IPv6 インタフェースで IPv6 有効化になっているデュアルスタックでも実行できます。アプリケーションの変更 (や移植) は不要です。

デュアルスタックで実行する IPv6 アプリケーションも、IPv4 プロトコルを使用できます。その場合、IPv4 マップ IPv6 アドレスを使用します。IPv6 は設計上、(IPv4 と IPv6 で) 別々のアプリケーションは不要です。たとえば、デュアルホストの IPv4 クライアントがなくても IPv4 専用ホストのサーバーと通信できます。また独立した IPv6 クライアントがなくても IPv6 サーバーと通信できます。実装時には IPv4 クライアントアプリケーションを新しい IPv6 API に移植するだけです。クライアントは、IPv4 専用サーバーだけでなく、デュアルホストまたは IPv6 専用ホストで実行中の IPv6 サーバーとも通信できます。

ネームサーバーからクライアントが取り出すアドレスで、IPv6 や IPv4 を使用するかどうかが決まります。たとえば、ネームサーバーにそのサーバーの IPv6 アドレスが指定されている場合、サーバーは IPv6 を処理できます。

表 15-1 に IPv4 と IPv6 のクライアントとサーバー間の相互運用性をまとめます。表 15-1 では、デュアルスタックホストに、IPv4 と IPv6 両方のアドレスがそれぞれのネームサービスデータベースに存在するものとします。

表 15-1 クライアントサーバーアプリケーション: IPv4 と IPv6 の相互運用性

アプリケーションの種類 (ノードの種類) 

IPv6-unaware (非認識) サーバー (IPv4 専用ノード)  

IPv6-unaware (非認識) サーバー (IPv6 有効化ノード) 

IPv6-aware (認識) サーバー (IPv6 専用ノード) 

IPv6-aware (認識) サーバー (IPv6 有効化ノード) 

IPv6-unaware (非認識) クライアント (IPv4 専用ノード)  

IPv4 

IPv4 

IPv4 

IPv6-unaware (非認識) クライアント (IPv6 有効化ノード) 

IPv4 

IPv4 

IPv4 

IPv6-aware (認識) クライアント (IPv6 専用ノード) 

IPv6 

IPv6 

IPv6-aware (認識) クライアント (IPv6 有効化ノード) 

IPv4 

(IPv4) 

IPv6 

IPv6 

X は、それぞれのサーバーとクライアント間の通信ができないことを表します。

(IPv4) は、クライアントの選択するアドレスによって相互運用性が決まることを表します。IPv6 アドレスを選択すると処理はエラーになりますが、IPv4 アドレスを選択すると IPv4 マップ IPv6 アドレスとしてクライアントに戻り、IPv4 データグラムが送信されて処理が成功します。

IPv6 配置の初期段階では、IPv6 のほとんどの実装がデュアルスタックノードで処理されます。一般ベンダーではほとんど、初期状態では IPv6 専用実装をリリースしません。

サイト移行シナリオ

サイトや ISP では、それぞれ事情も異なれば移行段階の手順も異なります。ここでは、サイト移行シナリオの例をいくつか紹介します。

サイト移行では最初に、IPv6 アドレスをサポートするためのネームサービスをアップグレードします。DNS の場合、BIND 4.9.4 以降などの新しい AAAA (クアド A) レコードをサポートする DNS サーバーにアップグレードします。2 つの新しい NIS マップと NIS+ テーブルを Solaris システムで作成、管理できます。新しいデータベースの詳細については、「Solaris ネームサービスに対する IPv6 拡張機能」を参照してください。

ネームサービスで IPv6 アドレスを処理できるようになったら、ホストの移行を開始します。ホストは、次の手順で移行します。

その他の移行機構

先に説明した方法では、デュアルノードと IPv4 ノード間で相互運用をします。その場合、デュアルノードには IPv4 アドレスがあります。また、IPv6 専用ノード (また IPv4 アドレスのないデュアルノード) と IPv4 専用ノードの間では先に説明した方法は相互運用ができませんでした。ほとんどの実装はデュアルにできますが (デュアルかどうかはコードのメモリーフットプリントだけの問題)、現実には、IPv4 専用ノードとの相互運用が必要なすべてのノードごとに 1 つのアドレスを割り当てるのに充分な IPv4 アドレス領域があるかどうかが問題です。

次に、新しい移行機構がなくても相互運用を実現できる方法を示します。

残念ながら、ALG と NAT のどちらの方法も、弱点があります。これらの方法を使用すると、インターネットの基盤がかなり弱まります。IETF では、IPv6 専用ノードと IPv4 専用ノードとのより良い相互運用性のために努力しています。1 つの提案としては、必要に応じて IPv4 互換アドレスを割り当てる方法でヘッダートランスレータを使用する方法があります。別の方法としては、必要に応じて IPv4 互換アドレスを割り当て、IPv6 トンネルで IPv4 を利用して IPv6 ルーターをブリッジできます。

ステートレスヘッダートランスレータでは、使用中の IPv6 アドレスを IPv4 アドレスとして表現できれば (IPv4 互換か IPv4 マップアドレスであること)、IPv4 ヘッダーフォーマットと IPv6 ヘッダーフォーマットの間の変換が可能です。変換時に情報が失われないよう暗号化されているパケットや、ソースルーティングなど使用頻度の低い機能を除外することで、これらトランスレータのサポートが IPv6 プロトコルに組み込まれています。