Sonata-SIPプロビジョニングサーバー

プロビジョニングと比較するものがわかりません。 たぶん猫と? 彼がいなくても可能だと思われますが、彼のほうが少し良くなります。 特にそれが機能する場合))







問題文:







  1. SIP電話をすばやく、簡単に、安全に構成したい。 電話をインストールするとき、さらに再構成するとき。
  2. 多くのベンダーには、独自の構成形式、構成を生成するためのユーティリティ、構成を保護する独自の方法があります。 しかし、私は本当にみんなに対処したくありません。
  3. 多くのプロビジョニングソリューションは、a)1つのベンダーまたは1つの電話システムに焦点を当てています。b)実装がやや面倒で、多数のスクリプト、パラメーター、...


ポイント3で、 FreePBXFusionPBXKazooには優れたシステムがあり、さまざまなベンダーの電話用のテンプレートが公開されているとコメントします。 PBX Yeastarなど、さまざまなメーカーの電話のパフォーマンスをモジュールで設定できる商用ソリューションもあります。







Habréには、さまざまなベンダーのデバイスを構成する方法がいっぱいです: onetwo 。 しかし、彼らが言うように、すべてのシステムには致命的な欠陥があります。 自転車を作りましょう。







独自の形式



彼らがxkcdで言うように、14のフォーマットを扱いたくない-15を考えてみてください 。 したがって、すべての電話の一般設定を使用して、独自のjson-format configを作成します。







このようなもの:







{ "key": "sdgjdeu9443908", "token": "590sfdsf8u984", "model": "gxp1620", "vendor": "grandstream", "mac": "001565113af8", "timezone_offset": "GMT+03", "ntp_server": "pool.ntp.org", "status": true, "accounts": [ { "name": "", "line": 1, "sip_register": "sip.mobilonsip.ru", "sip_name": "sip102", "sip_user": "sip102", "sip_password": "4321", "sip_auth": "sip102" } ] }
      
      





したがって、どの電話でも、現地時間を設定して、回線を一口飲む必要があります。 ここではすべてが簡単です。 その他の例については、 こちらをご覧ください







自身のサーバー



メーカーのマニュアルには、通常、csvを取得し、そこにlogin-password-poppy-addressを記述し、会社のスクリプトでファイルを生成し、Apache Webサーバーの下に配置するというポイントがあります。







マニュアルの次の段落では、通常、生成された構成ファイルを暗号化できる他の方法について説明します。







しかし、これはすべて古典です。 スムージーとtwitterを使用した最新のアプローチでは、Apacheほど強力ではなく、たった1つのことを行うだけの既製のWebサーバーを作成する必要があります。 参照によって構成を作成および提供します。







ここで、ほとんどすべてのSIP電話機がhttp / httpsを介して設定を受信できるようになったことを思い出して、他の実装(ftp、tftp、ftps)を考慮しないようにします。 その後、各電話は独自のポピーアドレスを認識します。 したがって、2つのリンクを作成します。1つはデバイスのキー上に、もう1つは一般的なトークンとポピーアドレスの束に対して機能する2つ目の一般用です。







また、zero-config、つまり 電話をゼロからセットアップする、つまり あなたはそれをネットワークに貼り付けて、ホップを獲得しました。 いいえ、私のシナリオでは、それをネットワークに固定し、予備設定を行い(サーバーから設定を受信するように設定し)、チョコレートを飲んで、サービスを通じて必要に応じて電話を再設定しました。 オプション66の配布は、DHCPサーバーの懸念事項です。







ところで、私は「プロビジョニング」と言うのは完全に拷問されているので、言葉は「プロビジョニング」に縮小されました。足で蹴らないでください。







そしてもう1つ:サーバーにはUIがありません。 ユーザーインターフェース。 おそらく今のところ、しかし確かではない、なぜなら 必要ありません。 しかし、設定を保存/削除し、サポートされているベンダー、モデルのリストを取得するためのAPIがあり、すべてがswagger仕様の標準に従って記述されています。







UIではなくAPIなのはなぜですか? なぜなら 私はすでに自分の電話システムを持っているので、資格情報のソースがあり、このデータを取得し、必要なjsonを作成してサーバーに公開するだけです。 そして、サーバーはすでにjson-fileで指定されたルールに従って安全です。必要なデバイスに設定を提供するか、デバイスが間違っている場合、またはこのjsonで指定された基準を満たしていない場合は提供しません。













そのようなマイクロサービスの提供が判明しました。 これはSonataと呼ばれ、ソースコードはgithubで入手できます。また、 既製のdockerイメージもあります 。これはdockerの使用例です







主な機能:





短所:



これまでのところ、ソナタ暗号化は使用されていません。 つまり もちろん、sonataの前にnginxを置くことでhttpsの使用を開始できます。 しかし、ここにはまだ関係のない独自の方法があります。 なんで? プロジェクトはまだ若く、最初の100台のデバイスをほぼ覆しました。 そして、もちろん、私はアイデア、フィードバックを収集します。 さらに、ネットワーク上で設定を盗聴できないようにすべてを安全にするために、おそらく暗号化キー、tls、およびそれらとハリネズミを悩ませる価値がありますが、これは継続です。







UIの欠如。 おそらく、これはエンドユーザーにとって大きなマイナスですが、システム管理者にとって、コンソールユーティリティは本格的なアプリケーションよりも重要です。 コンソールユーティリティを作成する計画はありましたが、必要かどうかはわかりませんか?







結果は何ですか?



管理APIを使用して複数の電話モデルをプロビジョニングするための小型でシンプルなWebサーバー。







繰り返しますが、これはどのように機能しますか?



  1. ソナタをインストールします。
  2. json configを作成し、sonataで公開します。
  3. 次に、ソナタからプロビジョニング用のリンクを取得します。
  4. 次に、電話機でこのリンクを示します。
  5. デバイスは構成を強化します


後続の操作には2つのステップのみがあります。







  1. json configを作成し、sonataで公開します
  2. デバイスは構成を強化します


どんな種類の電話がアップロードされていますか?



ベンダーGrandstream、Fanvil、Yealink。 ベンダー内の構成はほぼ同じですが、ファームウェアによって異なる場合があります-追加でテストする必要がある場合があります。







どのようなルールを設定できますか?



時間によって。 設定が利用可能になるまでの時間を指定できます。

MACアドレス別。 デバイスの個人リンクを介して構成を返すと、MACアドレスもチェックされます。

IPで 要求が行われたIPアドレスによる。







ソナタとやり取りする方法は?



APIを介して、httpリクエストを作成します。 APIはインストールで使用可能になります。 なぜなら APIはswagger仕様をサポートしているため、APIへのテストリクエストにオンラインユーティリティを使用できます。







いいですね クールなこと、試してみませんか?



最も簡単な方法は、 sonata-sampleリポジトリに基づいてdockerイメージをデプロイすることです。 リポジトリにはインストール手順が含まれています。







そして、node.jsを知っている場合は?



JavaScriptの使用経験がある場合は、ここですべてがどのように機能するかをすぐに理解できます。







ソナタは発達しますか?



目標を部分的に達成しました。 さらなる開発は、電話の構成を自動化するというトピックに関する私のタスクの問題です。 電話ボタンをカスタマイズするための設定を拡張し、アドレス帳の機能を追加するか、他の何かをコメントするための機会がまだあります。







まとめと謝辞



私は建設的な提案/異議/コメントと質問に喜んでいます。 それは理解できないほど説明されたものかもしれません。







また、テストのために電話を助け、助言し、テストし、提供/寄付してくれたすべての同僚に感謝します。 実際、仕事で、チャットルームやメールで話をした多くの人々が、このプロジェクトにさまざまな程度で関与していました。 アイデアと考えをありがとう。








All Articles