加畑健志
有限会社アドリブ
IPv6でできることは現在のIPv4でも実装できると考えているアプリケーション開発者の方は多いだろう。このIPv6入門の連載はこれまでのIPv6の入門記事とは異なり、IPv4でできることをIPv6ではどのように実装するのかということを主題とし、IPv6の特徴について理解を深めていく。
インターネット電話をIPv6で作るとどうなるか
前回の終わりに今回は「IP電話」について考えると書いた。しかし、すでに「IP電話」ではIPv6が使われ始めている。フリービットが提供するIPセントレックスでは端末に割り振るアドレスにIPv6を使うことで移行や構成変更を容易に行うことができるメリットがある。そこで今回は音声通話のなかでもとくに「インターネット電話」をIPv6で作るとどうなるかを考えてみることにする。
電話、インターネット電話、IP電話の違いはすでにあいまいになってきている。今までは通信経路の違い(PSDN、インターネット、IP網)がベースと言われていたが、現在ではそれらを組み合わせることが多いため分類には適さないだろう。あえていえば利用デバイスが違うと言えるのではないだろうか。つまり電話といえば050以外の番号を使い、“電話機”という機器を使う。それに対し、インターネット電話はPCやPDAなどの“電話機以外”を使う。IP電話は050の番号を使い“電話機”を使う。
そこで今回はPCをベースとしたインターネット電話をIPv6で作るとどうなるかを考えてみる。
まず、インターネット電話を実現するために最低必要な要素は次の3つだ。
1)音声をIPに乗せる
2)相手を探す
3)接続する
音声をIPに乗せる技術に関してはIPv6が特に優れているという点はない。それはIPv6にはプロトコル的に備えている優先制御(QoS)の仕組みがあるとはいえ、一般的に使えるとはいえない。
つぎに相手を探すという技術だ。サーバーを経由するにせよ、ピア・ツー・ピアで接続するにせよ、IPアドレスがベースになる。問題はその接続すべきIPアドレスをどうやって手に入れるかということだが、まず考えられるのがDNSの利用だ。しかし、インターネットに接続されているすべてのマシンのホスト名とIPアドレスを解決可能なDNSは存在しない。この問題にはDDNSと呼ばれる動的なDNS情報の更新手段やそれに類する方法を使うことで(現実的かどうかを別にすれば)対応できる可能性はある。
しかし、現在広く使われているNATによって分断されたネットワークの内側にあるプライベートIPアドレスを持つホストではそもそも名前解決の手法を使うことはできない。IPv6を使うとすべてのホストにグローバルIPアドレスを割り振ることができるため、少なくとも相手のマシンのIPアドレスを名前から得ることはできるようになる。
さて、音声をIPに乗せることができ、送るべき相手のIPアドレスが得られても、3つ目の接続ができなければ通話はできない。IPv4ベースのインターネット電話ソフトはこの問題を解決するために多くの努力がなされ、現在ではNATがあっても、さらにはファイアウォールがあっても通話できるようになっていることが多い。
これまではNATを越えることが難しいため、インターネット電話を実現するにはIPv6を使うほうがいいのではないかという話を見かけたが、IPv4でここまでシームレスにNATもファイアウォールも越えることができるのであれば、そのアドバンテージは消えたかのように思える。
しかし、考え方を変えるとIPv6のメリットはまだあると考える。それは着信用IPアドレスを複数持つことができるということだ。通話者がA1、A2、A3…Anとn人いた場合、Bに対して通話をするためには現在は1つのIPアドレスしか持てないため、同時に複数の人と別々に会話することや、ある通話者を接続レベルで拒否したい、また知っている人からの着信しか受け付けたくないということを実現するためにはサーバー、クライアントともにかなり面倒な作りこみが想定される。
これに対し、IPv6を使った場合は、その広いアドレス空間を生かし、通話者ごとに異なったIPアドレスで接続を行うモデルが考えられる。たとえば通話を行うためにはまず受け付け用のアドレス(これを公開アドレスとする)を前述の手順で手に入れる。そしてその公開アドレスに対し個別通話用のアドレス(これを個別アドレスと呼ぶ)を着信側で生成し、それを相手に通知する。受け取った相手はその新しい個別アドレスに対して接続を行うという手順になるだろう。よく通話し、信頼が置ける相手がそれほど多くなければ個別アドレスを毎回発行せず、ある程度固定的に割り当てることもできる。
この方法であれば、複数の人と別々に会話する場合は、単純に個別アドレスの通話ごとにアプリケーションが動作するだけになる。通話者の禁止は個別アドレスの発行を行わないか、すでに割り当てられている個別アドレスでの待ちうけをやめるだけでよい。知っている人からの着信だけにしたい場合は、公開アドレスを非公開にすれば、新しい個別アドレスの発行が行われないため、それぞれの個別アドレスを知らないと通信ができない。
もちろん個別アドレスといえどもある程度の認証は必要だが、最初の個別アドレス発行のフェーズで共通鍵のようなものを発行することはそれほど複雑ではないため、大きな問題にはならないだろう。
このようなIPv6でインターネット電話を作る場合、前述の名前解決だけでなく暗号化に伴う手順を解決する必要もある。プロトコルベースでIPsecをサポートするIPv6だが、その利用手順は簡単とはいえない。もちろんアプリケーションレベルで暗号化することも可能だが、去年その問題を解決する可能性がある技術とサービスが発表された。それはm2m-xというもので、ネットワークに接続された機器同士が安全、簡単に直接やり取りするための仕組みだ。
このm2m-xには接続相手の認証、通信の暗号化のための設定、各端末に対するアクセスコントロールのような機能があるが、これらはSIPをベースにした仕様をベースに開発されている。このサービスの中心は「m2m-xマネジメントサーバー」が行い、DNSを使うことなく、それぞれの機器の接続を管理する。
このサービスは物と物をつなぐことに注目して作られたものではあり、ISPが提供するようになると言われているが、それが現実になるとインターネット電話のようなアプリケーションを作る場合にもメリットがあるだろう。
次回はテレビをインターネットで見るアプリケーションに関して考えてみる。


