Yateを使用してSIP-I / SIP-Tトランクを構成する

画像



こんにちは、同僚。



私は自分の考えを文章で表現するのは得意ではありません(ロシア語の母国語ではありません)が、このタイプのトランクの設定方法について説明しようと思います。



そのため、ローカルテレコムがSIP-Iプロトコルを介してのみ、他のVoIPプロバイダーにPSTNへのアクセスを許可し始めました。 E1 / SS7を介して接続することができた人は幸運でした(またはそうでないかもしれません)が、新しい人はどういうわけかそれから抜け出す必要があります:高価なソフトスイッチを買う人もいれば、より安価なオプションを探している人、または無料でさえもです。 2番目の方法を使用しました。 どうして終わったのかと思ったら、猫にようこそ。







はじめに





SIP-IとSIP-Tは、ISUPネットワークとSIPネットワーク間の相互運用性のための2つの非常によく似たテクノロジーです。 特に、ISUPネットワークで開始および終了されたコールが情報を失うことなくSIPネットワークを簡単に通過できるように、SIPベースのネットワークを介して特定のISUPパラメーターを転送する方法を提供します。



SIP-Tは、SIP自体を開発したのと同じオフィスであるIETFによって開発されました。 ほぼ同時期に、SIPの最新バージョンが開発されました(2002年半ば)。 このプロトコルは、RFC 3372、RFC 3398、RFC 3578、およびRFC 3204で説明されています。



SIP-Iは、2004年にITUのメンバーによって開発され、SIP-Tで定義されているほとんどの設計を使用しています。 ITU-T Q.1912.5で説明されています。



どちらのプロトコルも、SIPとISUPの間でメッセージ、パラメーター、エラーコードをマッピングする方法を説明しています。 また、従来のSIPベースのネットワークと完全に互換性があります。



SIP-Iは、多くのIETF標準とドラフトを使用する点でSIP-Tと異なり、転送できるパラメータがはるかに豊富です。 SIP-Iには、コールの基本パラメーターだけでなく、CLIPやCLIRなどの追加サービスのパラメーターを使用することもできます。



現時点では、通信オプションSoftSwitch-SoftSwitchでは、SIP-Tがより一般的です。 たとえば、CDMA2000では、MSC間の相互作用に使用されます。 SIP-Iは、SoftSwitchと3GPPの通常のネットワーク間の相互作用のオプションと見なされます。



乾燥した理論に煩わされないように、このような呼び出しのダンプがWireSharkでどのように見えるかを示します。







メッセージ本文でわかるように、すべてのISUPフィールドがカプセル化されたセクション「application / isup」が追加されました。



カスタマイズ





インターネット上では、これらのプロトコルの設定方法に関する情報はほとんどありませんが、午後には火災のある実際の例は見つかりません。 このビジネスにかなり徹底的に取り組み、 Yateに出会いました。



Yateは、次世代の電話エンジンとしての地位を確立しています。 それはすべてを知っているので、クラスによってそれを何らかの形で区別することは困難です。 Null Teamのルーマニアのプログラマーによって書かれました。 彼に関するhabrに関する記事はいくつかありますが、彼は他のソリューションで使用されています。



長所:

1. C ++で書かれています。

2.モジュラー構造。

3.あらゆる場面に対応するモジュールがあります

4.さまざまなプログラミング言語(php、perl、python、javascript)で構成を記述できます。



短所:

1.ドキュメントはほとんどありません。 たとえば、ソースコードを完全に読んで、その動作の原理を完全に理解する必要がありました。 ちなみに、人々はメーリングリストでこれについて文句を言いますが、ある賢明な人が言ったように、「Yateにはドキュメントがあり、C ++で書かれているだけで非常に良いです。」



インストールプロセスと初期セットアップについては説明しません。 それらはプロジェクトのウェブサイトとHabrにあります。 ソフトスイッチがSIP-I / SIP-Tを理解するための主要なポイントのみを説明します。



そして、Yateが「application / isup」からフィールドをエンコードおよびデコードできるように、ysipchan.confファイルに次のパラメーターを含める必要があります。



[sip-t] isup=enable
      
      







その後、テレコムからの着信コールでは、以下の例のように、標準のYateメッセージにisupフィールドが表示されます。 これらのフィールドはルーティングと請求に既に使用できます。



 Sniffed 'call.preroute' time=1350892372.716302 thread=0x7f017c011600 'Call Router' data=(nil) retval='(null)' param['id'] = 'sip/4' param['module'] = 'sip' param['status'] = 'incoming' param['address'] = '172.xxx.xxx.xxx:5060' param['billid'] = '1350892357-3' param['answered'] = 'false' param['callid'] = 'sip/SBCxdl85tuup8zxylqx8xbcdp5pcvtbtpw8@SoftX3000/zxzlwuzt-CC-23/' param['message-prefix'] = 'isup.' param['isup.protocol-type'] = 'itu-t92+' param['isup.protocol-type'] = 'itu-t' param['isup.message-type'] = 'IAM' param['isup.NatureOfConnectionIndicators'] = '0sat,cont-check-none,echodev' param['isup.ForwardCallIndicators'] = 'national,e2e-none,interworking,isup-notreq,sccp-none' param['isup.CallingPartyCategory'] = 'ordinary' param['isup.TransmissionMediumRequirement'] = '3.1khz-audio' param['isup.CalledPartyNumber'] = 'xxxxxxxxx' param['isup.CalledPartyNumber.nature'] = 'subscriber' param['isup.CalledPartyNumber.plan'] = 'isdn' param['isup.CalledPartyNumber.inn'] = 'false' param['isup.OptionalForwardCallIndicators'] = 'non-CUG' param['isup.CallingPartyNumber'] = 'xxxxxxxxx' param['isup.CallingPartyNumber.nature'] = 'national' param['isup.CallingPartyNumber.plan'] = 'isdn' param['isup.CallingPartyNumber.complete'] = 'true' param['isup.CallingPartyNumber.restrict'] = 'allowed' param['isup.CallingPartyNumber.screened'] = 'network-provided' param['isup.PropagationDelayCounter'] = '0' param['isup.LocationNumber'] = '' param['isup.LocationNumber.nature'] = '0' param['isup.LocationNumber.plan'] = 'unknown' param['isup.LocationNumber.inn'] = 'true' param['isup.LocationNumber.restrict'] = 'unavailable' param['isup.LocationNumber.screened'] = 'network-provided' param['isup.ParameterCompatInformation.PropagationDelayCounter'] = 'transit,cnf,discard-param,nopass-param' param['isup.ParameterCompatInformation.EchoControlInformation'] = 'transit,nopass-param' param['isup.ParameterCompatInformation'] = '31 d4 37 c0' param['isup.parameters-unhandled-cnf'] = 'PropagationDelayCounter' param['caller'] = 'xxxxxxxxx' param['called'] = 'xxxxxxxxx' param['ip_transport'] = 'UDP' param['newcall'] = 'true' param['domain'] = '172.xxx.xxx.xxx' param['device'] = 'Huawei SoftX3000 V300R010' param['username'] = '' param['xsip_nonce_age'] = '0' param['antiloop'] = '19' param['ip_host'] = '172.xxx.xxx.xxx' param['ip_port'] = '5060' param['ip_transport'] = 'UDP' param['sip_uri'] = 'sip:xxxxxxxxx@172.xxx.xxx.xxx:5060;user=phone' param['sip_from'] = 'sip:xxxxxxxxx@172.xxx.xxx.xxx;user=phone' param['sip_to'] = '<sip:xxxxxxxxx@172.xxx.xxx.xxx;user=phone>' param['sip_callid'] = 'SBCxdl85tuup8zxylqx8xbcdp5pcvtbtpw8@SoftX3000' param['device'] = 'Huawei SoftX3000 V300R010' param['sip_allow'] = 'INVITE,ACK,OPTIONS,BYE,CANCEL,REGISTER,INFO,PRACK,SUBSCRIBE,NOTIFY,UPDATE,MESSAGE,REFER' param['sip_supported'] = '100rel' param['sip_user-agent'] = 'Huawei SoftX3000 V300R010' param['sip_privacy'] = 'none' param['sip_p-charging-vector'] = 'icid-value=0a.0a.00.0a-2012102210555100;orig-ioi=www.huawei.com;icid-generated-at=172.xxx.xxx.xxx' param['sip_p-asserted-identity'] = '<sip:xxxxxxxxx@172.xxx.xxx.xxx;user=phone>' param['sip_contact'] = '<sip:xxxxxxxxx@172.xxx.xxx.xxx:5060;user=phone>' param['sip_content-type'] = 'multipart/mixed;boundary=ssboundary-1_' param['rtp_addr'] = '172.xxx.xxx.xxx' param['media'] = 'yes' param['formats'] = 'alaw,mulaw' param['transport'] = 'RTP/AVP' param['rtp_rfc2833'] = 'false' param['rtp_port'] = '40016' param['rtp_forward'] = 'possible'
      
      







私たちからの発信コールは次のようになります(regexroute.conf):



 ;     preroute [PSTN] ;         . .*=;osip_P-Asserted-Identity=<sip:${caller}@172.xxx.xxx.xxx:5060$()user=phone>;\ message-prefix=isup.;\ isup.message-type=IAM;\ isup.protocol-type=itu-t92+;\ isup.NatureOfConnectionIndicators=echodev;\ isup.CallingPartyCategory=ordinary;\ isup.ForwardCallIndicators=national,e2e-none,interworking,isup-notreq,sccp-none;\ isup.TransmissionMediumRequirement=3.1khz-audio;\ isup.CalledPartyNumber=${called};\ isup.CalledPartyNumber.nature=national;\ isup.CalledPartyNumber.plan=isdn;\ isup.CalledPartyNumber.inn=false;\ isup.CallingPartyNumber=${caller};\ isup.CallingPartyNumber.nature=national;\ isup.CallingPartyNumber.plan=isdn;\ isup.CallingPartyNumber.complete=true;\ isup.CallingPartyNumber.restrict=allowed;\ isup.CallingPartyNumber.screened=network-provided ;    .*=sip/sip:${called}@172.xxx.xxx.xxx
      
      







以上です。 現在、私たちからのすべてのSIP招待には、メッセージ本文にISUPフィールドが含まれています。



評判の良いコミュニティに質問がある場合は、喜んでお答えします。 Yateで犬を食べて、ニュアンスの多くを理解することができました。



All Articles