VoIP における Firewall Traversal の提案と実装 116107 杉野 裕哲

平成 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