Title: SIPサーバのENUM機能 Author: 高橋知宏 (takahasi@softfront.co.jp) Date: 07/21/2004 1. はじめに ソフトフロントのSIPサーバと、そのENUM機能拡張について述べる。まずSIP サーバの概要と、その主な機能について紹介する。次に、このサーバをベース にして拡張として実現したENUM機能について、機能の概要と動作を説明する。 さらに、ENUM WGの活動として本サーバを半年にわたって運用したが、その運 用状況と、その運用から得られた知見を紹介する。 2. SOFTFRONT SIPサーバの特徴 SOFTFRONT SIPサーバは、RFC3261に基づいたSIPサーバの実装である。プロキ シやレジストラなどの基本サーバ機能を核とし、さらに拡張によってプレゼ ンスなどのSIP アプリケーションサーバを構築することを可能としている。 SIPプロキシの基本機能は、受信したリクエストを受け取り、ポリシーに基づ き宛先を書き換えて、新たな宛先に送信することである。これをSIPメッセー ジのルーティングと呼んでいる。本SIPサーバでは、独自のルーティングを行 なうための拡張インターフェースを用意している。 この拡張インターフェースを使用して、ENUMモジュールを追加することによ り、以下に述べるENUM拡張を実装している。 3. SIPプロキシのENUM拡張 SIPサーバ(プロキシ)がENUM機能を持つ事により、従来のENUMに対応しない クライアントをそのまま使用しながら、ENUMを使用するシステムを構築する ことができる。しかしながら、SIPサーバによるENUM機能では、sip:以外の URI に対応することが困難であり、クライアントが(SIP以外の)プロトコルま たはアプリケーションを選ぶことができる ENUM の利点が失われることに注 意する必要がある。 3.1 ENUMによるルーティング SIPサーバ(プロキシ)がENUM機能では、ルーティングとしてENUMを利用する。 ENUMとは番号の入力に対して、URI を出力することである。プロキシが電話 番号を受け取った場合に、サーバがENUMによる解決を行なってURIを取得し。 さらに取得したURIをSIPクライアントの登録アドレスへの解決など通常のプ ロキシ処理を行なうことによりSIPプロキシのENUM機能を実現することができ る。 3.2 電話番号のURI表現 SIPサーバはクライアントからリクエストを受け取る。リクエストは宛先が URI形式で含まれている。電話番号を宛先とするためには、電話番号をURI形 式で表現する必要がある。 そのため以下のような形式を使用する。電話番号にはハイフンを含めること ができる。またE.164形式の電話番号の場合には+ 記号と国番号を付加する。 sip:を使用する場合、ドメイン名は任意である。 tel:012345 tel:+81-3-3456-7890 sip:012345@domain.com sip:+81-3-3456-7890@domain.com 3.3 電話番号の処理 電話番号をドメイン名に変換する規則は次の通りである。電話番号からハイフ ンを取り除き桁毎にピリオドで区切ってさらに逆順にして、TLD(Top Level Domain)を付加する。 1) tel:012-3456 電話番号を含むURI 2) 012-3456 電話番号を取り出す 3) 0123456 ハイフンを取り除く 4) 0123456 先頭に+記号があれば取り除く 5) 6.5.4.3.2.1.0 逆順にしてピリオドで区切る 6) 6.5.4.3.2.1.0.e164.wide.ad.jp. TLD(Top Level Domain)を付加する 使用するTLDは設定により与えることができる。ここでは、 e164.wide.ad.jp. をTLDとしている。 後に述べる正規表現による置換は 3) の形式に適用される。 3.4 NAPTRレコードの解釈 形式 NAPTR {order} {pref} {flag} {service} {regexp} {replace} 例 NAPTR 0 0 "u" "E2U+sip" "!^.*$!sip:vtr.alice@domain2.com!" . order 16bit符号無し整数 小さいものを使用(prefより優先) pref 16bit符号無し整数 小さいもの優先 flags "u" URIを出力(他に"a","s","p"など) service このエントリが適用されるサービスを指定(例:E2U+sip, E2U+web:http等) regexp 正規表現による置換規則 replace 再度NAPTR検索する場合のドメイン名(無視) 一つのドメイン名に対して、複数のNAPTRレコードを定義することができる。 サービス種別や優先度により適用するレコードやその順序を制御することがで きる。SIPサーバからENUMを利用する場合には、検索されたNAPTRレコードのう ちサービス種別が"E2U+sip"のレコードを選択する。 4. シーケンス ENUMを利用するシーケンス例として、aliceが 012345 というbobの電話番号に 向かって発信した例を示す。 alice proxy-domain1 DNS proxy-domain2 bob |-(F1 INVITE)->|-(F2 DNS Qry)->| | | | |<-(F3 DNS Asr)-| | | | |-(F4 INVITE)---------->|-(F5 INVITE)->| |<--(F8 200)---|<--(F7 200)------------|<-(F6 200)----| |---(F9 ACK)-->|---(F10 ACK)---------->|--(F11 ACK)-->| | | | | |--(F12 BYE)-->|---(F13 BYE)---------->|--(F14 BYE)-->| |<-(F17 200)---|<--(F16 200)-----------|<-(F15 200)---| F1 INVITE tel:012345 SIP/2.0 To: tel:012345 From: sip:alice@domain1.com;tag=456248 Call-ID: 843817637684230@998sdasdh09 Via: SIP/2.0/UDP [2001:0DB8:1234::10]:5060;branch=z9hG4bKnashds8 CSeq: 1 INVITE Contact: sip:[2001:0DB8:1234::10]:5060 Content-Type: application/sdp Content-Length: ... ■説明 alice が電話番号 012345 をあて先として発信する。宛先は tel:形式の URIを使用している。宛先として使用するのは先頭行にあるURI(リクエス トURI)であり、ToヘッダのURIではないことに注意する。 F2 DNS Query 5.4.3.2.1.0.e164.wide.ad.jp. NAPTR? ■説明 電話番号を宛先としたリクエストを受け取ったSIPサーバは、ENUMの規則 に従いドメイン名を組み立てて、DNSへ問い合わせを送る。tel:012345 か ら電話番号を取りだし、ENUMのドメイン名に変換(桁毎にピリオドで区切 り逆順にする)し、そのNAPTRレコードを問い合わせる。 F3 DNS Answer 5.4.3.2.1.0.e164.wide.ad.jp. NAPTR 0 0 "u" "E2U+sip" "!^.*$!sip:bob@domain2.com!" 5.4.3.2.1.0.e164.wide.ad.jp. NAPTR 0 0 "u" "E2U+email" "!^.*$!mailto:bob@domain2.com!" ■説明 DNSから応答を受け取る。受け取った複数のレコードから、サービスとし てSIPプロキシが対応可能な"E2U+sip"を選択する。NAPTRレコードから得ら れた正規表現の書換規則 "!^.*$!sip:bob@domain2.com!" を、電話番号文字 列"012345" に適用する。この例では全置換となり、URIとして、 sip:bob@domain2.com を得る F4 INVITE sip:bob@domain2.com SIP/2.0 To: tel:012345 From: sip:alice@domain1.com;tag=456248 Call-ID: 843817637684230@998sdasdh09 Via: SIP/2.0/TLS [2001:0DB8:2345::5060]:5060;branch=z9hG4bK2d4790.1 Via: SIP/2.0/UDP [2001:0DB8:1234::10]:5060;branch=z9hG4bKnashds8 CSeq: 1 INVITE Contact: sip:[2001:0DB8:1234::10]:5060 Record-Route: Content-Type: application/sdp Content-Length: ... ■説明 ENUMにより取得したURIが自ドメインではなく他のドメインなので、リク エストURIを置き換えたうえで、domain2.comのプロキシに送る。 F5 INVITE sip:[2001:0DB8:4567::10]:5060 SIP/2.0 To: tel:012345 From: sip:alice@domain1.com;tag=456248 Call-ID: 843817637684230@998sdasdh09 Via: SIP/2.0/UDP [2001:0DB8:3456::5060]:5060;branch=z9hG4bK8924b.1 Via: SIP/2.0/UDP [2001:0DB8:2345::5060]:5060;branch=z9hG4bK2d4790.1 Via: SIP/2.0/UDP [2001:0DB8:1234::10]:5060;branch=z9hG4bKnashds8 CSeq: 1 INVITE Contact: sip:[2001:0DB8:1234::10]:5060 Record-Route: Record-Route: Content-Type: application/sdp Content-Length: ... ■説明 REGISTERされている sip:bob@domain2.com のアドレスを取得し、リクエ ストURIを書きかえて 着信UA(bob)に送る。 F6 SIP/2.0 200 OK To: tel:012345;tag=893219 From: sip:alice@domain1.com;tag=456248 Call-ID: 843817637684230@998sdasdh09 Via: SIP/2.0/UDP [2001:0DB8:3456::5060]:5060;branch=z9hG4bK8924b.1 Via: SIP/2.0/UDP [2001:0DB8:2345::5060]:5060;branch=z9hG4bK2d4790.1 Via: SIP/2.0/UDP [2001:0DB8:1234::10]:5060;branch=z9hG4bKnashds8 CSeq: 1 INVITE Contact: sip:[2001:0DB8:1234::10]:5060 Record-Route: Record-Route: Content-Type: application/sdp Content-Length: ... ■説明 INVITEを受諾し、200 OK 応答を返す。Viaヘッダに従って発信UA(alice) に転送(F7,F8)される。 F7 200 OK F8 200 OK F9 ACK sip:[2001:0DB8:4567::10]:5060 SIP/2.0 To: tel:012345;tag=893219 From: sip:alice@domain1.com;tag=456248 Call-ID: 843817637684230@998sdasdh09 Via: SIP/2.0/UDP [2001:0DB8:1234::10]:5060;branch=z9hG4bKnashds8 CSeq: 1 ACK Contact: sip:[2001:0DB8:1234::10]:5060 Route: Route: Content-Length: 0 ■説明 200 OKを受け取ったことを通知するためにACKを送る。Routeヘッダに従い 着信UA に配送(F10,F11)される。このときはENUMによる解決は不要であり 行なわれない。 F10 ACK F11 ACK F12 BYE sip:[2001:0DB8:4567::10]:5060 SIP/2.0 To: tel:012345;tag=893219 From: sip:alice@domain1.com;tag=456248 Call-ID: 843817637684230@998sdasdh09 Via: SIP/2.0/UDP [2001:0DB8:1234::10]:5060;branch=z9hG4bKnashds8 CSeq: 2 BYE Contact: sip:[2001:0DB8:1234::10]:5060 Route: Route: Content-Length: 0 ■説明 通話を終了するためにBYEを送る。Routeヘッダに従い着信UAに配送 (F13,F14)される。このときはENUMによる解決は不要であり行なわ れない。 F13 BYE F14 BYE F15 SIP/2.0 200 OK To: tel:012345;tag=893219 From: sip:alice@domain1.com;tag=456248 Call-ID: 843817637684230@998sdasdh09 Via: SIP/2.0/UDP [2001:0DB8:3456::5060]:5060;branch=z9hG4bK8924b.1 Via: SIP/2.0/UDP [2001:0DB8:2345::5060]:5060;branch=z9hG4bK2d4790.1 Via: SIP/2.0/UDP [2001:0DB8:1234::10]:5060;branch=z9hG4bKnashds8 CSeq: 2 BYE Contact: sip:[2001:0DB8:1234::10]:5060 Content-Length: 0 ■説明 着信UAから200 OK応答が返されViaヘッダに従い発信UAに向けて配送され る(F16-F17)。 F16 200 OK F17 200 OK 5. WIDEにおける運用実験 このENUM対応機能を持つSIPサーバをENUM WG内で運用実験を行なった。 ENUM WGのMLにて2003/8/23にアナウンスを行ない、利用可能なSIP端末を持っ ている有志に利用してもらった。 5.1 SIPサーバの設定概要 運用したSIPサーバは、IPv4/IPv6 の両方利用可能とした。トランスポート はUDPのみを利用可能とし、TCP/TLSによる利用はディセーブルした。 SIPサーバの管理するSIP URIのドメインは、特に限定せずに、いかなるドメ インも収容可能な設定とした。これはどのようなSIPクライアントが接続し てくるか予想がつかないため、なるべく接続を可能とするようにしたためで ある。また、ドメインを限定しないことから、単一のサーバにすべてのSIP クライアントを収容するモデルでの利用に限定される。 悪意のあるアクセスを防止するために、パスワードによる認証を行なうこと とした。REGISTERによる登録の際と、INVITEによる発信の際の両方について、 SIPサーバによる認証を行なうこととした。 ENUMによる解決を有効に設定したが、ENUM機能を利用せずに通常のSIPサー バとして利用することも可能である。 5.2 SIPサーバの利用状況 このサーバの半年にわたる利用状況を簡単にまとめた。 運用期間: 2003/8/23 - (2004/1月現在 運用継続中) 利用端末数(一意な登録SIP URI数): 48個 使用された発信先番号数: 46個 2003年 8月 9月 10月 11月 12月 1月 REGISTER回数*1 5376 14982 6924 5395 7047 6741 INVITE回数*1 13 936 45 0 2 0 ENUM検索回数 6 556 4 0 1 0 *1 REGISTER/INVITE回数は認証処理のため少なくとも実数の倍カウ ントされている。また認証に失敗しているものも含まれている。 日別ENUM検索回数 5傑 2003-09-09 260回 2003-09-27 62回 2003-09-03 40回 2003-09-11 32回 2003-09-16 27回 アナウンス直後の一カ月ほどが主な利用期間であった。半年経過後も運用は 継続しているものの、ほぼ利用停止状態である。 もっとも利用が多かったのが、WIDE合宿の期間中である9月9日に一日あたり 最大利用回数260回(ENUM検索回数)を記録している。そのほかの利用としては、 ETJPのデモのために利用されたことがあった。 REGISTERの回数の多さが際だつが、SIP端末が動作中電話をしなかったとし ても定期的にREGISTERを送信するためである。最近は利用はほぼ停止状態に もかかわらずREGISTERだけが継続されているのは電源が入れたままになって いる端末が存在すると思われる。 5.3 運用から判明した知見 本サーバの運用では、単一のサーバにすべての端末を収容することを前提と し、サーバがカバーするドメインを定めることをしなかった。また、 REGISTER とINVITEについてパスワードによる認証を行なった。しかし、利用 者側で独自に設置したサーバを経由して、本サーバへのアクセスを行なった 事例があり、この際に認証を要求してしまうという問題が生じた。本来想定 していなかったケースではあるが、今後の複数のサーバによる運用に向けて 参考になる知見であると考えられるので紹介する。 ドメイン内のUAがプロキシを使用する場合には、そのドメインで有効なパス ワードを使用して認証することができる。これはREGISTERによる登録や INVITEによる発信どちらにもあてはまる。ところが、ドメイン外のUAがプロ キシを経由してドメイン内のUAに発信しようとした場合には、INVITEに対し てプロキシは認証を要求してはならない。なぜならドメイン外のUAは、プロ キシのドメイン内で有効なパスワードは知らないはずだからである。このよ うに複数のドメインが連係するような運用では、単純にINVITEに対して認証 を行なうことができない。 単純にドメイン外からのリクエストについて認証を行なわないとすると、悪 意のあるアクセスを防ぐことができない。そのために、ドメイン外からのリ クエストを受けとる際には、なんらかの方法で信用できる相手(SIPサーバ)を 識別し、信用できる相手からのみ認証無しにリクエストを受けとることがで きなければならない。相手を識別するためには、簡易的な方法ではあるがIP アドレスを使用することが考えられる。その他にはTLS接続を用いて証明書に よるサーバ間の認証を行なう方法も考えられる。これらの方法によって、SIP サーバ間の信頼関係を一つ一つ設定していくことが、安全なSIPサーバ網を構 築するためには必要であると考えられる。 6. おわりに ソフトフロントのSIPサーバとそのENUM機能についての紹介をした。SIPサー バによるENUMの処理を解説し、そのシーケンスを示した。またENUM WGにおい て設置したサーバとその利用状況と得られた知見を紹介した。 Appendix 4節のシーケンスの説明図。 発信端末(alice) 着信端末(bob) +-----+ +-----+ | | __ F6 200 OK / | | +-----+\ \ //| +-----+ /_____/ \ \F8 200 OK |// /_____/ \ \______ ______/ F5 INVITE F1 INVITE ~~ / /| F7 200 OK / /|sip:[2001:db8:4567::1] tel:012345 +-----+ | /__________________ +-----+ | _____________ | === | | ____________________ | === | | | SIP Proxy | | === | | / | === | | ___________ | domain1.com | | |/ F4 INVITE | |/ | SIP Proxy | |(ENUM Client)| +-----+ __ sip:bob@domain2.com +-----+ |domain2.com| ~~~~~~~~~~~~~ \ \ ~~~~~~~~~~~ \ \ F3 DNS Answer F2 DNS Query \ \ \ \ NAPTR 100 10 "u" "E2U+sip" 5.4.3.2.1.0.e164.wide.ad.jp. \ \ "!^.*$!sip:bob@domain2.com!" NAPTR ? ~~ ______ / /| +-----+ | | === | | | === | | ___________________ | |/ | ENUM (DNS) Server | +-----+ ~~~~~~~~~~~~~~~~~~~ Copyright Notice Copyright (C) WIDE Project (2004). All Rights Reserved.