NTTソフトウェア ネットワークサービス事業部 主任代理
近い将来のユビキタス社会を見越して、一般企業でも大規模社内ネットワーク構築にIPv6を選択する動きが出始めている。IPv6の特長である「大幅に拡張されたIPアドレス」や「プラグ・アンド・プレイにより管理が容易」といった点が、大きなメリットとして映るためだ。
しかし、インフラとしてのIPv6ネットワークが準備されていても、現実的にはすべてのアプリケーションがIPv6に対応しているわけではない。IPv6でいくつかのアプリケーションが動作せず、不便を強いることがあれば何らかの対策を立てる必要がある。たとえばWindows XPに標準で実装されているリモートデスクトップは、IPv6ネットワークでこそ、その利便性を発揮できると考えられるが、残念ながらIPv6には今のところ対応していない。
そこで今回は、リモートデスクトップを例に、SSHが持つポートフォワーディングという機能を使用して、IPv6ネットワーク上でIPv6非対応ソフトウェアを動作させる方法を紹介する。
リモートデスクトップとは
リモートデスクトップは、Windows XPが標準で実装している機能で、サーバ側のマシンのポート3389番に対してクライアント側からログオンすることにより、そのマシンのリソースを使うことができるものだ(図1)。この機能があれば、会社からインターネット経由で自宅のマシンを操作するといったことが非常に簡単に行える。
図1
しかし残念ながら、現状ではリモートデスクトップはIPv6をサポートしていない。また、リモートデスクトップを利用するには、サーバ機能とクライアント機能の両方が必要であるが、Windows XP Home Editionには、リモートデスクトップのクライアント機能のみが搭載されており、サーバ機能は搭載されていない。そのため、リモートデスクトップ環境を構築するには、サーバ側がWindows XP Professionalである必要がある。
SSHでトンネルを作る
SSH(Secure SHell)は、Netscape社が開発したSSLという暗号化技術を使って、ネットワーク上のコンピュータ間を安全に通信するための仕組みだ。SSHを使用した通信では、コンピュータ間でプログラムが使用する通信路全体を暗号化するため、ネットワークの途中で盗聴される危険が極めて低くなる。また接続するコンピュータ同士を特別な鍵を使って認証するため、なりすましを防ぐこともできる。
SSHには、Shellと名が付くとおりのtelnetの代替という機能のほかに、ポートフォワーディングという機能がある。これは、SSHが構築した暗号化した通信路の内部に別のプロトコルを通すことができるというものだ(図2)。これにより、サーバ−クライアント間であたかもトンネルを作るかのように通信路が確保される。このトンネルをIPv6で確保することによって、IPv6非対応のアプリケーションをIPv6ネットワーク経由で動作させることが可能になる。

図2
サーバ側:OpenSSHのインストールとIPv6化
では、実際にSSHのポートフォワーディング機能を使用してリモートデスクトップをIPv6ネットワークで使用してみよう。今回は、SSHサーバおよびSSHクライアントにOpenSSHとその派生のソフトウェアであるPortForwarderをIPv6化して使用することにした。OpenSSHはOpenBSDプロジェクトによって開発された、SSHプロトコルをフリーで実装したSSHで、IPv6化のコードがすでに入っていて簡単にIPv6ネットワークで使用することができ、今回の用途に適しているためだ。
1. OpenSSH for Windowsのダウンロードとインストール
まずは、サーバ側のWindows上にOpenSSHの動作する環境を構築するためのソフトウェアとして OpenSSH for Windows をインストールする。OpenSSH for Windows は Windows上で OpenSSH が動作するようにパッケージングされているため、インストールは簡単だ。
OpenSSH for Windowsのバイナリ配布元
http://lexa.mckenna.edu/sshwindows/download/releases/
上記のページから、OpenSSH for Windows v3.5p1-3をクリックし、ファイルをダウンロードする(ファイル名はopenssh35-20030324.zip)。OpenSSH for Windowsのインストール自体は通常のアプリケーションのインストールと変わらない(図3)。

図3
インストール後、自動的にquickstart.txtが開く。OpenSSH for Windowsを使用するときは、この中に記述されているConfigurationを設定する必要があるので、ここで設定してしまおう。コマンドプロンプトを起動し、下記のコマンドを投入する。
|
> cd c:\Program Files\OpenSSH\bin > mkgroup -l >> ..\etc\group > mkpasswd -l -u username >> ..\etc\passwd |
2. Cygwin/w32api IPv6 extentionのダウンロードとインストール
OpenSSH for WindowsはCygwinと呼ばれるUNIXのAPIをWindowsのAPIでエミュレーションする環境の上で動作しており、OpenSSH for WindowsにパッケージングされているCygwinでは残念ながらIPv6環境では動作しない。そこで、OpenSSH for Windows のCygwinのライブラリをIPv6対応したものに入れ替える。
Cygwin/w32apiのバイナリ配布元
http://win6.jp/Cygwin/index-j.html
上記のページから、cygwin-1.3.22-1-ipv6-0.2.zipをダウンロードする。展開するとフォルダが作成されるので、その中から
- bin\new-cygwin1.dll
- C:\Program Files\OpenSSH\bin
3. OpenSSH IPv6化ファイルのダウンロードとインストール
最後にCygwin上で動作するOpenSSHもIPv6化したものと入れ替える必要がある。OpenSSH IPv6化のファイルは本記事のために用意した
OpenSSH IPv6化ファイル配布元
http://www.ipv6style.jp/jp/tryout/20030523/openssh_ipv6.zip
上記のページから、openssh_ipv6.zipをダウンロードする。展開するとフォルダが作成されるので、その中から
- bin\*
- sbin\*
- C:\Program Files\OpenSSH\bin
- C:\Program Files\OpenSSH\sbin
これでインストール作業は完了だ。このインストール作業をサーバとなるマシンに行なっておけば、あとはコマンドラインからプログラムを起動するだけでOpenSSHをIPv6で動作させることができる。これでサーバ側の設定は終了である。
4. OpenSSH Serverの設定変更
OpenSSH for Windowsでは、デフォルトでSSHのプロトコルバージョン2.0を使用するように設定されている。しかし、クライアント側で使用するPortForwarderはSSH1.5のみをサポートしているため、OpenSSH for Windows側でSSH1.5でも接続できるよう設定を変更してしておく。
C:\Program Files\OpenSSH\etc\sshd_config
のファイルを編集して、Protocolの設定行を
Protocol 1,2
と変更する。
5. OpenSSH Serverサービスの開始
設定が完了後はサーバを起動する必要がある。起動するコマンド自体は簡単だ。コマンドプロンプトから
| > net start opensshd |
のコマンドを投入する(図4)。これでOpenSSHデーモンがサービスとして起動する。確認や停止は、[スタート]-[設定]-[コントロールパネル]-[サービス]から可能だ(図5)。

図4

図5
クライアント側:PortForwarder(IPv6)のインストール
次はクライアント側だ。クライアント側は頻繁に起動するため手軽であることと、動作が簡略であることを考えてPortForwarderを使用する。
1. PortForwarderのダウンロード
PortForwarderもすでにIPv6化されたバイナリが用意されているので、既存のPortForwarderの実行ファイルを入れ替えるだけだ。PortForwarder自体はファイルを展開するだけでよく、インストール作業は必要ない。
PortForwarder(オリジナル)の配布元
http://www.fuji-climb.org/pf/JP/download_jp.html
上記ページからPortForwarder-1-1-1.zipをダウンロードして展開すると、PortForwarderの各ファイルが用意される。これはまだIPv6には対応していないため、IPv6化されたバイナリと入れ替える。
PortForwarder(IPv6対応)のバイナリ配布元
http://win6.jp/PortForwarder/index-j.html
上記のページから、PortForwarder-1-1-1-ipv6-0-996.zipをダウンロードする。ダウンロード後は展開して、PortForwarder.exeとzlib.dllを入れ替えよう。
2. 接続先等の設定
次に、PortForwarderを起動する前に接続先や各種情報を記述した設定ファイルであるconfiguration.iniを用意する必要がある。その設定内容を下記に示す。
| # Sample of config file Host server1 HostName 2001:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx # server1's IP address User username LocalForward 3389 127.0.0.1:3389 Host * User username |
3. PortForwarderの開始
設定が完了後はPortForwarderを開始してみよう。起動自体は簡単だ。PortForwarder.exeをダブルクリックして起動し、Config fileを設定する(図6)。設定が完了したら、Hostにserver1を入れ、ProtocolにIPv6を選択してConnectボタンを押すと接続が開始される。

図6
初回接続時は、「ホストの認証が行なわれていないがこのまま続けるか」といった内容のダイアログが表示されるので、「はい」を押す。次回からは、すでにホストとの認証が行なわれた状態となるので、この操作は一回限りである(図7)。
図7
その後はサーバのパスワードを入力すれば、(図8)ポートフォワーダーの接続が完了する。

図8
リモートデスクトップの設定
ポートフォワーダーが起動したら、リモートデスクトップを起動させてみよう。リモートデスクトップを利用するためには、サーバ側でリモートデスクトップの接続を許可し、さらにユーザに対して接続を許可しておけばよい。
サーバ側のリモートデスクトップを許可するには、コントロールパネルのシステムを起動してシステムのプロパティを呼び出し、リモートタブにあるリモートデスクトップを有効にする(図9)。その後、リモートユーザの選択から、リモートデスクトップに接続を許可するユーザを追加する(図10)。

図9

図10
次はクライアント側だ。リモートデスクトップクライアントからOpenSSHのポートフォワーダーにプロトコルを通す場合、リモートデスクトップから一度クライアント自身に接続する必要がある。そこでリモートデスクトップのプロパティを変更し、互換モードでプログラムを実行してローカルホストに接続できるようにする。
方法は簡単だ。クライアントとなるマシンのシステムディレクトリに格納されているリモートデスクトッププログラム
- C:\WINDOWS\system32\mstsc.exe

図11
あとは、スタートメニューにある[プログラム]-[アクセサリ]-[通信]からリモートデスクトップ接続を起動(あるいはコピーしたmstsc.exeを起動)すればよい。オプションを押すとユーザ名とパスワードが入力できるので、投入後は保存をしておけば次回からの接続が簡単になる。接続先を"localhost"と投入し、あとは[接続]ボタンをクリックして接続してみよう(図12)。サーバ側のデスクトップが表示されるようになるはずだ(図13)。

図12

図13
IPv6とIPv4の掛け橋となる技術
現在、すでにIPネットワークのIPv6への移行は本格的に進んでいる。しかし、いくらインフラの移行が進んでいっても、周辺機器やソフトウェアがいきなりIPv4からIPv6へ切り替わることは難しく、当面は両方のプロトコルの共存が必要だ。すべてのネットワーク装置が両方のプロトコルを使用できるわけではないので、しばらくは今回紹介したようにIPv4をIPv6網で使用する、あるいは逆にIPv6をIPv4網で使用するといった技術がより有効となってくる。すでにIPv6とIPv4の掛け橋となる技術は多数あり、そのほとんどが簡単に、またユーザに意識させることのない設計となっている。
今回はIPv6を使用する際に頻繁に紹介される「IPv6をIPv4網で使用する」場合とは逆の事例について解説したが、この解説によってIPv6がより身近なものとなり、IPv6移行への心配も少しは解消されるだろう。そして、その中でもポートフォワーディングやリモートデスクトップの技術は、シーンを選ばず有用だ。試されてはいかがだろうか。
この記事のトラックバックURL
http://www.ipv6style.jp/trackback/305


