平成 14 年度卒業研究発表会(日本大学工学部情報工学科) A-7 VoIP における Firewall Traversal の提案と実装 A Proposal and Implementation of Firewall Traversal in VoIP 116107 1 杉野 裕哲 通話が終了すると、BYE パケットを端末 2 へ送信する。 BYE パケットを受け取った端末 2 は 200OK を返し、通 話時に使用していたポートを解放する。 はじめに 近年、インターネットの急激な普及に伴い、インター ネットを利用したサービスの多様化が進められている。 音声通信もそのひとつであり、インターネット上で音声 通話を行う VoIP (Voice over IP) という技術が普及して いる。また、IP 電話などのサービスも開始されているが、 現在インターネット上で音声通信を行うのには NAT (Network Address Translation) や Firewall がある場合 は通信が困難である。しかし、NAT は IP アドレスの枯 渇の問題を解決し、Firewall はユーザを不正アクセスか ら守るため、現在のインターネットには不可欠なもので ある。現在、音声通信で NAT や Firewall を越えるため の研究が進められており、UPnP (Universal Plug and Play) などの技術が開発されている。 本研究では、IP 電話での NAT Traversal、Firewall Traversal の問題を明らかにするとともに、Firewall Traversal を実現する方式を提案し実装を行う。 2 2.2 NAT が存在する場合の問題 音声通信を NAT 配下から行う場合、送信元ホストには ローカルアドレスが割り当てられているため、SDP には、 そのローカルアドレスが記述される。しかし、NAT はデ ータ部の IP アドレスを変更する機構を持たないため、宛 先ホストにはセッション開始者がローカルアドレスのホ ストだという情報が届く。このアドレスはグローバルで は無効であるため、宛先ホストは応答メッセージを送信 できない。 グローバル側から音声通信を開始する場合、パケット の宛先アドレスは NAT のグローバルアドレスとなる。通 常 NAT 配下の端末との通信は、NAT 配下の端末から行 わなければならない。これは、この時のみ NAT がローカ ルアドレスとグローバルアドレス変換を行うマッピング が作成されるからである。グローバルからの音声通信時 は、このマッピングがないため、NAT はローカルの端末 のアドレスが分からず、パケットを中継できない。 既存の VoIP 技術 VoIP のプロトコルの一つに、SIP (Session Initiation Protocol) がある。ここでは、まず SIP の通信手順を示 し、NAT や Firewall が存在する場合に生じる問題点を 明確にする。 2.3 Firewall が存在する場合の問題 Firewall での問題は、音声通信に使用するポートが閉 じられていることにある。前述のように、通話に使用す るポート番号は SDP に記述されるが、そのポート番号は 5004∼65535 の範囲で、端末自身が空きリソースから動 的に決定する。通常 Firewall は、管理者がセキュリティ ポリシーに基づいて、特定のポートのみを許可する。た とえ管理者が VoIP アプリケーションの待ち受けポート 1245 を許可していたとしても、通話には別ポートがラン ダムに使われるため、Firewall に遮断されてしまい通話 ができない。 2.1 SIP の通信手順 SIP を用いた通信シーケンスを図1に示す。図1では 端末 1 から端末 2 へ接続を行っている。 端末1 ①INVITE [竹中研究室] 端末2 ②100 Trying g ③180 Ringin ④200 OK 端末1 ⑤ACK Firewall 端末2 INVITE 100 Trying ⑥通話 180 Ringing BYE 200 OK 200 OK 音声通信の確立に 使用するポート は許可する ACK 図 1.SIP の通信手順 ① 端末 1 が SIP の INVITE という接続要求を送信する ② 端末 2 が INVITE に対して 100Tring を返信する ③ 端末 2 は保留応答として、180Ringing を送信する ④ 180Ringing が端末 2 のユーザにより受理されたら、 端末 2 は 200OK を送信する ⑤ 端末 1 が ACK を送信する ⑥ 通話が開始される ここで、①の INVITE メッセージの SDP (Session Description Protocol) には、端末 1 が音声通信の受信に 使用する IP アドレスとポート番号が記述される。SDP に記述されるポート番号は、端末 1 が空きリソースから 動的に決定する。端末 2 は SDP に記述される IP アドレ スとポート番号に、100Trving などを返信する。 また、⑥の通話に用いられる端末 2 の IP アドレスとポ ートは、④で受信した 200OK の SDP に記述されるが、 このポート番号としては、INVITE 時とは別ポートが用 いられ、端末 2 が空きリソースから動的に決定する。 通話には別ポートがランダムに使用される 通話 許可しない 図2.VoIP での Firewall の問題 3 UPnP を用いた解決方法 前章の問題に対して、Windows Messenger では UPnP という技術を用いた解決方法を行っている。UPnP は、 元来 IP ネットワークに接続されたデバイスが相互に自 動認識して利用可能にする技術である。例えば、プリン タをホームネットワークに接続する場合、プリンタ自身 がネットワークへの参加を広告する。ネットワークに接 続されているデバイスは、その広告から機器の情報を受 け取り、プリンタや PC に何ら設定を行うことなくプリ ンタを使用することができる。 ここでは、この UPnP を用いた NAT & Firewall Traversal の問題の解決方法を述べる。 14 平成 14 年度卒業研究発表会 A-7 Firewall の一つとして、LINUX 上でよく用いられる iptables がある。iptables には FORWARD チェインとい う、パケットの転送に関して許可をするかフィルタリン グするかのルールが書かれているものがあり、この FORWARD チェインのルールは iptables のコマンドに より静的に決めることができる。提案システムでは、 iptables を使用し、通過する音声通信パケットの SDP か ら IP アドレス、ポート番号などの情報を取出し、 FORWARD チェインのルールを動的に変更させる。 3.1 UPnP による NAT & Firewall Traversal 図 3 に、Windows Messenger の音声チャットを UPnP に対応したルータを介して行う場合を例に、UPnP によ る NAT & Firewall Traversal を説明する。なお、UPnP に対応したルータには NAT および Firewall 機能が内蔵 されているとする。 クライアントPC UPnP対応ルータ FORWARD ①通話に使用するポートの 開放を要求/IPアドレス、 ポート番号の問い合わせ Windows Messenger SIP 5 RCS ②ルール変更/Mapping作成 UPnP API UPnP API ③OK/IPアドレスとポート 番号の通知 NAT 許可されたポート ④ 200OK の 生 成 / INVITE作成 12345 SDP SDP 図3.UPnP による Firewall Traversal Firewall の場合、ユーザが音声チャットを開始する際 に、Firewall へ通話に使用するポートの開放を要求する (①)。Firewall はそのポートを許可するようルールを変 更し、ユーザに OK を返す(②③)。その後、ユーザは許 可されたポートを SDP に記述し、 200OK を送信する(④)。 このように UPnP を使用することにより、ポートの開閉 などを自動的に行うことができる。 NAT の場合、ユーザが Windows Messenger を起動す ると、Windows Messenger は、そのユーザ端末が NAT 配下にいるかを検出する。NAT 配下であるなら、NAT にグローバル IP アドレスと自分に割り当ててもらうポ ート番号を問い合わせる(①②)。NAT は、IP アドレスと ポート番号を通知する(③)。その後、取得した IP アドレ スとポート番号を元に SIP 要求パケットを生成し、 INVITE メッセージを送信する(④)。こうして、宛先ホス トはセッション開始者の IP アドレスの判別ができ、応答 パケットを送信することができる。 しかし、これは通信相手の方にも UPnP 対応のルータ が無くてはならない。また、UPnP は同一ネットワーク 内のゲートウェイでしか有効ではない。Firewall が多段 にあるネットワークでは、相手に届くまでに通話に利用 するポートが閉じられている可能性がある。また、UPnP 対応ルータはそれほど普及していないので、グローバル なインターネット環境では、この機能に頼るのは難しい。 4 提案方式 この提案システムの有効性を確認するために、実験環 境として図4に示す実験システムを構築した。提案シス テムの機能である、パケットのデータの取り出しや SIP/SDP の判断、iptables のルールを変更するプログラ ム(図4VoIP Traverser)を C 言語により作成した。この プログラム作成の際、カーネルからパケットのデータを 取り出すためにパケットキャプチャライブラ libpcap を 用いた。また、プログラム上で iptables のルールを追加 するために、システムコールを用いた。これを LINUX 上で実装し、Firewall を立てた。iptables の Firewall を はさんで端末 1 と端末 2 を設置した。 この実験環境の下、端末 1 から端末 2 へ音声通信を行 った場合のシーケンスを以下に示す。Firewall の初期状 態では、通話に使用する 5004∼65535 のポートは全て閉 じておく。 ① 端末 1 から音声パケットを送信する ② Firewall をパケットが通過する際に、パケットをキ ャプチャーする ③ キャプチャーした パケットのデータから SIP/SDP パケットの判別を行う ④ パケットが SIP/SDP パケットであるなら、データ部 に記述されている、通話に使用する IP アドレス、ポ ート番号を取り出す ⑤ Firewall のフィルタ リングルールが書かれている FORWARD チェインに、取り出したポート番号の通 過を許可する 実験の結果、通話に使用されるポートが閉じている状 態から実験を開始し、SDP に記述される IP アドレス、 ポート番号を元に Firewall のルールが変更され、端末 1 と端末 2 が通話をすることができることを確認した。 6 ここでは、既存のアプリケーションをそのまま使用す ることができ、Firewall が多段に存在しても IP 音声通 信のできるシステムを提案する。Firewall Traversal の 問題は、2.3で述べたように SDP に記述されるポート がランダムに決められる事にある。この問題に対して、 パケットの内容を判断して、SDP に記述されたポート番 号から Firewall に動的にポートを開放させるシステムを 提案する。(図4) VoIP Traverser ⑤ルール追加 Firewall 参考文献 Filterテーブル ①パケット送信 端末1 むすび 本研究では、インターネット上で音声通話を行う VoIP の問題点を明確にするとともに、Firewall Traversal に 関して、動的にポートを開けるシステムを提案し、その 実装を行った。実験の結果、Firewall のルールを変更が できていることを確認し、VoIP の Firewall Traversal を確認することができた。 今回は Firewall Traversal に関してのプロトタイプを 作成したが、今後は実インターネット環境で VoIP 通信 を可能にするシステムの詳細化を図り、もう一つの課題 である NAT Traversal をも可能とするシステムの構築を 行う。 ③SIP/SDPの判定 ④IPアドレス、ポート番号取得 ②パケットデータ 提案方式の実装 [1] 大久保 榮、川島 正久 H.323/MPEG-4 教科書 要点チ ェック式 IE インスティテュート 2001.4.16 [2] 角 将高、竹中 豊文 Mobile VoIP のインターネット 実環境での適用課題と提案 、第 45 回学術研究報告会 日本大学工学部情報-2-23 パケット受信 端末2 図4.提案する Firewall Traversal 15
© Copyright 2024 Paperzz