IPv6ネットワークを導入する場合、現状ではIPv4との相互運用についても考慮する必要がある。IPv6のシステムでも、トンネリングやアドレス変換などを使えば、IPv4のシステムと相互に通信できるようになる。相互運用の方法をまとめておく。
前回は、Windows Server OSを使ってIPv6のルーティングを行う方法について簡単に見てきた。Windows Server OSのRRASサービスを使えば、特に面倒な設定などもなく、IPv6のルーターとして扱うことができる。今回は連載の最後として、主にWindows OS環境で利用できるIPv4とIPv6の相互運用機能について取り上げ、簡単に紹介しておく。
本連載ではWindows OS上でIPv6プロトコルを扱う方法を解説してきたが、実際のシステムでは、全てのネットワーク機器(ルーターやサーバー、クライアントなど)をすぐにIPv6に切り替えるわけにはいかないだろう。IPv6に対応していないシステムやアプリケーションなどもまだ多いからだ。IPv4ベースのネットワークやシステムを使いつつ、今後はIPv6対応の機器を徐々に増やしながらIPv6への移行を行うことになるだろう。となると必要になるのがIPv4とIPv6の相互運用性(お互いに接続・通信する機能)である。
IPv4ネットワークとIPv6ネットワークの相互運用性を確保するための技術としては、大きく分けると次の3つがある。
それぞれの概要を次の表に示しておく。
方式 | デュアルスタック | トンネリング | NAT/プロキシ |
---|---|---|---|
概要 | IPv4とIPv6の両方をサポートし、どちらでも通信できるようにする | トンネリング技術を使って、IPv6トラフィックをIPv4上に流したり、逆にIPv4トラフィックをIPv6上に流したりする | IPv4とIPv6のパケットデータを変換して通信したり、プロキシサーバーで代理受信したりして、通信を中継する |
具体的な技術(Windows OSの機能も含む) | ・IPv4とIPv6のデュアルスタック | ・6to4 ・ISATAP ・Teredo ・VPN(GRE、L2TP) |
・NAT64/DNS64 ・IP-HTTPS ・DirectAccess ・portproxy |
IPv6への移行で利用される主な技術 主にWindows OSでサポートされている、IPv4とIPv6の相互運用を実現するための要素技術 |
「デュアルスタック」方式とは、各ホストにおいて、IPv4とIPv6の両方を同時にサポートする方式である。通信相手がIPv4とIPv6のどちらか一方しかサポートしていなくても通信が可能になる。
Windows OSをはじめ、現在使われているシステムではこのデュアルスタック方式をサポートしているシステムは少なくない。インターネットはともかく、イントラネットではこの方式で利用することが多いだろう。Windows OSではWindows XPのときからデュアルスタック方式でIPv4とIPv6がサポートされている。
※Windows 8におけるipconfigコマンドの実行例。現在のWindows OSは、最初からIPv4とIPv6の両方をサポートしている
C:\>ipconfig
Windows IP 構成
イーサネット アダプター イーサネット:
接続固有の DNS サフィックス . .: example.jp
リンクローカル IPv6 アドレス. .: fe80::941b:78:5904:520d%12 …IPv6アドレス
IPv4 アドレス . . . . . . . . .: 192.168.2.128 …IPv4アドレス
サブネット マスク . . . . . . .: 255.255.255.0
デフォルト ゲートウェイ . . . .: 192.168.2.2
…(以下省略)…
Windows OSではデュアルスタック方式でIPv6がサポートされているため、ネットワーク的に(IPパケットが)到達可能であれば、特に追加のソフトウェアを用意しなくても、IPv4とIPv6の両方のサーバーなどに接続してサービスを利用できる。
「トンネリング」とは、2つのホストや拠点間に仮想的なトンネル(パイプ)を作成し、その中にネットワークトラフィックを流す方式である。離れた場所にある2つのIPv4ネットワーク同士をIPv6上に構築したトンネルを経由してつないだり、逆に、2つのIPv6ネットワーク同士をIPv4上に構築したトンネルを経由してつないだりする。エンド・トゥ・エンドではIPv4もしくはIPv6同士で通信するが、異なるプロトコルのネットワーク上で通信するために使われる。
トンネリング方式を使った具体的な技術としては、6to4やISATAP、Teredoなどがある。
「6to4」方式とは、IPv4アドレスをIPv6アドレスの中に埋め込むという方法で相互接続させる技術である。IPv6のホストに対して、ある特定のIPv4アドレスを関連付けてトンネルを作ることにより、IPv4しか通らないネットワーク上でもIPv6ホスト同士の通信が可能になる。ただしプライベートIPv4アドレスやNAT機能を使っているケースは対象外なので、6to4を利用できる場面は限られている。「RFC 3056」や「RFC 6343」などで定義されている。
6to4では、グローバルなIPv4アドレスを「2002::/16」というIPv6アドレスの中に、次のようにして埋め込んでいる。
IPv6アドレスを見るとIPv4アドレスが分かるため、IPv6で通信できないネットワークの場合はIPv4でカプセル化して送信すればよい。6to4を使ったネットワークは次のようになる。
Windows OSでは、ネットワークインターフェイスにグローバルなIPv4アドレスを付けると自動的に6to4形式のIPv6アドレスが生成され、割り当てられる。
※Windows OSにおける6to4トンネルインターフェイスの例
C:\>ipconfig
Windows IP 構成
イーサネット アダプター イーサネット 2:
接続固有の DNS サフィックス . .:
リンクローカル IPv6 アドレス. .: fe80::792c:8475:143c:e09b%16
IPv4 アドレス . . . . . . . . .: 11.22.33.44 ……元となるグローバルIPv4アドレス
サブネット マスク . . . . . . .: 255.255.255.0
デフォルト ゲートウェイ . . . .: 11.22.33.1
……(中略)……
Tunnel adapter 6TO4 Adapter: ……作成された6to4トンネルインターフェイス
接続固有の DNS サフィックス . .:
IPv6 アドレス . . . . . . . . .: 2002:b16:212c::b16:212c ……6to4形式のIPv6アドレス
デフォルト ゲートウェイ . . . .:
C:\>
※6to4環境では、ネットワークインターフェイスに「2002::/16」と「11.22.33.44(16進数では0b16:212c)」を組み合わせた6to4形式のIPv6アドレスが付けられる。Window OSの場合は最下位の32bitにもIPv4アドレスが埋め込まれる。
6to4は、簡単で分かりやすいIPv6トンネリング技術であるが、グローバルなIPv4アドレスが必要で、NATを使っている場合は対応できないなど、制約も多い。そのため今後はあまり使われなくなるだろう。
「ISATAP(Intra-Site Automatic Tunnel Addressing Protocol、アイサタップ)」は、6to4と似ているが、プライベートIPアドレスでも利用できるように改良されたトンネリング技術である(ただしNATは想定外)。「RFC 5214」などで定義されている。
ISATAPでは、IPv4アドレスを次のような形式でIPv6アドレスの中に埋め込んでいる。上位64bitのプリフィックス部分は組織に割り当てられたものなどがそのまま使えるので、アドレス空間設計の自由度が高くなっている。
ISATAP形式のIPv6アドレスを使ったネットワークは次のようになる。6to4方式との一番の違いは、常にISATAPルーターが存在していて、これがトラフィックの中継やIPv4へのカプセル化/解除を行うという点にある。ISATAPで外部のIPv6ネットワークと通信したいホストはISATAPルーターとやりとりするだけでよいのでネットワークの管理などが簡単になる。
ISATAPで通信を行う場合は最初にISATAPルーターのアドレス情報を取得する必要がある。Windows OSの場合は、一般的な名前解決手段を使って「ISATAP」というホスト名を検索し(ホスト名ファイルからの検索やNetBIOS名前検索、DNS検索、WINS検索などを利用する)、それが見つかれば自動的にISATAPでは次のようなトンネルインターフェイスを作成する。
※Windows OSにおけるISATAPトンネルインターフェイスの例
C:\>ipconfig
Windows IP 構成
イーサネット アダプター イーサネット 2:
接続固有の DNS サフィックス . .:
リンクローカル IPv6 アドレス. .: fe80::c86:17b2:2895:f94c%15
IPv4 アドレス . . . . . . . . .: 10.20.30.51 ……元となるプライベートIPv4アドレス
サブネット マスク . . . . . . .: 255.255.255.0
デフォルト ゲートウェイ . . . .: 10.20.30.1
Tunnel adapter isatap.{BD18ED5D-8B21-4B11-9FDE-46CC0AE6B723}: ……作成されたISATAPトンネルインターフェイス
接続固有の DNS サフィックス . .:
リンクローカル IPv6 アドレス. .: fe80::5efe:10.20.30.51%13 ……このインターフェイスには「fe80::5efe」と「10.20.30.51」を組み合わせたIPv6アドレスが付けられている。IPv6とIPv4アドレスの折衷表記
デフォルト ゲートウェイ . . . .:
C:\>
※ネットワークインターフェイスにプライベートIPアドレスを付けておき、さらに「ISATAP」という名前の検索が成功すると、自動的にISATAPトンネルインターフェイスが作成され、ISATAPのIPv6アドレスが割り当てられる。
「Teredo」は、NATを使ったIPアドレス空間でも動作するように開発されたトンネリング技術である。NATが使われているような、主に小規模なネットワークを対象としている。「RFC 4380」「RFC 6081」などで定義されている。
Teredoでは、IPv6パケットをIPv4のUDPでカプセル化して通信している。ただしNAT環境でも動作するように、最初に「Teredoサーバー」と通信してNAT環境かどうかを判定したり、通信パケットの送信先情報をTeredoサーバーから取得した後、実際の通信は「Teredoリレールーター」を介して行うなど、システムとしてはやや複雑である。
Windows OSはTeredoのクライアントだけでなく、Teredoサーバーやリレールーターとしても利用できるが、あまり簡単ではないので、本稿では省略する。必要なら以下のサイトなどを参照していただきたい。
「NAT」や「プロキシ」は、IPv4ではインターネットとイントラネットの接続境界点において、ネットワークアドレスやポート番号を変換する場合によく使われる技術である。これと同様に、IPv4パケットとIPv6パケットの内容を変換して、相互に通信できるようにするのがこの方式である。IPv4しかサポートしていないホスト(サーバーなど)に対してIPv6で接続したり、逆にIPv6しかサポートしていないホストに対してIPv4で接続する場合に使うことができる。
この方式の具体的な実装としては、NAT64/DNS64やportproxy、IP-HTTPSなどがある
「NAT64」は、IPv6しかサポートしていないホストから、IPv4のホストに接続するための機能である。IPv6のホストが送信したパケットを受けてその内容を解釈・変換し(IPアドレスやポート番号を変換する)、IPv4のホストへと中継する。TCPだけでなく、UDPやICMPのパケットも対象とする、ステートフルなNATメカニズムとして「RFC 6146」などで定義されている。またこのNAT64と同時に使うために、「DNS64」という機能も「RFC 6147」などで定義されている。IPv6のホストが送信したIPv6のDNS問い合わせをIPv4のDNSサーバーへ中継する。そして応答にIPv4アドレス(Aレコード)しか含まれていなければ、IPv6の結果(AAAAレコード)も含むように拡張する、などの機能を持つ。NAT64とDNS64を組み合わせることにより、IPv6のホストはIPv4のホストと通信ができるようになる。
Windows OSでは、DirectAccessという機能でこのNAT64/DNS64(およびIPSecなどの暗号化)が使われている。DirectAccessのクライアントはIPv6でDirectAccessのサーバーに接続し、クライアントとイントラネット間を結ぶトンネルを作って、安全な通信を行うようになっている。
またDirectAccessではHTTPSプロトコル上でIPv6通信を行うIP-HTTPSを利用することにより、ファイアウォールなどでブロックされにくい通信を実現している。HTTPSはWebサーバーなどでよく使われるプロトコルであり、比較的ファイアウォールを通過しやすいプロトコルだからだ。
「portproxy」とは、特定のIPアドレスやポートに対して着信した通信を、別のIPアドレスやポートへ転送する機能(プロキシ)のことである。TCPの通信しかサポートしておらず、通信内容の解釈もしないし(通信内容にIPアドレスやポート番号情報が含まれていても、そのまま通過させるだけで何の処理もしない)、IPv4とIPv6の名前解決も行わないので利用できるシーンは限られるが、単に通信をフォワードするだけで済むなら役に立つだろう。Windows XPやWindows Serve 2003の頃から利用できる機能である。
※portproxyでサポートされているコマンド例
C:\>netsh ……netshを起動する
netsh>interface ……interfaceコンテキストへ移動
netsh interface>portproxy ……portproxyコンテキストへ移動
netsh interface portproxy>set ? ……利用できるコマンドの表示
使用できるコマンドは次のとおりです:
…(中略)…
このコンテキストのコマンド:
set v4tov4 - IPv4 をリッスンし、IPv4 経由でプロキシ接続するためにエントリを更新します。
set v4tov6 - IPv4 をリッスンし、IPv6 経由でプロキシ接続するためにエントリを更新します。
set v6tov4 - IPv6 をリッスンし、IPv4 経由でプロキシ接続するためにエントリを更新します。
set v6tov6 - IPv6 をリッスンし、IPv6 経由でプロキシ接続するためにエントリを更新します。
netsh interface portproxy>
このコマンドから分かるように4種類のプロキシが利用できるが、IPv4とIPv6の相互運用という点から見ると、IPv4→IPv6とIPv6→IPv4の2種類が役に立つだろう。
今回はIPv6連載の最終回として、IPv4とIPv6ネットワークを相互に接続するための技術について、主にWindows OS環境で利用できるものを紹介した。いずれはIPv6だけでネットワークを構築できるときが来るだろうが、現状ではIPv4ネットワークとの相互接続は欠かせないはずだ。実際にどのようにIPv6ネットワーク環境を構築するか、Windowsシステムをどう設定すればよいかなどについては、また機会をあらためて紹介したい。
Copyright© Digital Advantage Corp. All Rights Reserved.