Sonata - SIP 設定伺服器

我不知道該將配置與什麼進行比較。 也許是和一隻貓一起? 沒有它似乎也是可以的,但是有了它就更好了。 特別是如果它有效的話))

問題的表述:

  1. 我想要快速、輕鬆且安全地設定 SIP 電話。 安裝手機時,尤其是重新配置手機時。
  2. 許多供應商都有自己的配置格式、產生配置的實用程式以及保護配置的方法。 而且我真的不想和每個人打交道。
  3. 許多配置解決方案,a) 專注於一個供應商或一個電話系統,b) 實施起來相當麻煩,有很多腳本、參數,brrr...

關於第3點,我會評論說有優秀的供應系統 適用於 FreePBX, 用於 FusionPBX, 卡祖笛,其中來自不同供應商的手機模板是公開可用的。 有一些商業解決方案,您也可以在設定模組中配置來自不同製造商的電話的操作,例如Yeastar PBX。

Habré 也提供了許多有關如何設定不同供應商的設備的方法: 時間, 。 但正如他們所說,所有系統都有一個致命的缺陷。 所以我們將製造我們自己的自行車。

你自己的格式

正如 xkcd 中所說,如果你不想處理 14 種格式 - 提出第15個。 因此,我們使用任何手機的常規設定並製作我們自己的 json 配置格式。

像這樣的東西:

{
   "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"
      }
   ]
}

因此,在任何電話中您都需要設定本地時間和 SIP 線路。 這裡一切都很簡單。 你可以看更多例子 這裡.

您自己的伺服器配置

在製造商的手冊中,通常會有這樣一句話:獲取csv,寫下您的登入密碼-mac 地址,使用我們的專有腳本生成文件,將它們放在Apache Web 伺服器下,一切都會好起來的。

手冊的下一段通常會告訴您也可以加密產生的設定檔。

但這些都是經典。 使用 Smoothies 和 Twitter 的現代方法表明,您需要製作現成的 Web 伺服器,它不會像 Apache 那樣強大,但只能做一件小事。 使用連結產生並發送配置。

讓我們在此停下來,請記住,幾乎所有 SIP 電話現在都可以透過 http/https 接收配置,因此我們不考慮其他實作(ftp、tftp、ftps)。 然後,每部電話都知道自己的 MAC 位址。 因此,我們將創建兩個鏈接:一個是個人鏈接 - 基於設備密鑰,第二個是通用鏈接,它使用通用令牌和 MAC 地址的組合來工作。

另外,我不會詳細討論零配置,即從頭開始設定手機,即你把它插入網絡,它就開始工作了。 不,在我的場景中,您將其插入網絡,進行初步設置(將其設置為從配置伺服器接收配置),然後喝冰鎮果汁朗姆酒並根據需要通過配置重新配置手機。 分發 Option 66 由 DHCP 伺服器負責。

順便說一句,我已經厭倦了說“供應”,所以這個詞被縮寫為“供應”,請不要踢我。

還有一件事:我們的配置伺服器沒有 UI,即使用者介面. 也許,現在,但不確定,因為… 我不需要它。 但是有一個 API 用於保存/刪除設置,獲​​取支援的供應商、型號的列表,一切都是根據 swagger 規範的規範進行描述的。

為什麼是 API 而不是 UI? 因為我已經擁有自己的電話系統,然後我有一個憑證來源,我只需要獲取這些數據,編譯必要的 json 並將其發佈到配置伺服器上。 配置伺服器根據 json 檔案中指定的規則,為所需設備提供其配置,如果設備不正確或不符合此 json 中指定的條件,則不會提供配置。

Sonata - SIP 設定伺服器

這就是配置微服務的結果。 被稱為 奏鳴曲,原始碼可以在GitHub上找到,還有 準備好docker映像、docker使用範例 這裡.

主要特徵:

  • 無論如何,按時間限制對配置的訪問,預設為 10 分鐘。 如果您想讓配置再次可用,請再次重新發布配置。

  • 適用於所有供應商的一種格式,所有調整都在奏鳴曲中刪除,您發送標準化的 json,配置任何可用的設備。

  • 記錄向設備發出的所有配置,可以在日誌中查看所有問題區域並看到錯誤

  • 可以使用一個帶有令牌的公共連結;每部手機透過指定 MAC 位址來接收自己的配置。 或透過密鑰的個人連結。

  • 用於管理(管理)和向電話配置配置(配置)的 API 按連接埠劃分

  • 測試。 對我來說,修復已發布配置的格式並涵蓋通過測試發布配置的所有常見情況非常重要。 這樣這一切就清楚了。

缺點:

到目前為止,Sonata 中還沒有以任何方式使用加密。 那些。 例如,您當然可以將 nginx 放在 sonata 前面來開始使用 https。 但專有方法尚未被使用。 為什麼? 該專案還很年輕,已經推出了前一百台設備。 當然,我也會收集想法和回饋。 此外,為了確保一切安全,以便配置無法在網路上被嗅探,可能值得使用加密金鑰、TLS 和刺猬,但這將是一個延續。

缺乏使用者介面。 也許這對最終用戶來說是一個重大缺點,但對於系統管理員來說,控制台實用程式比成熟的應用程式更重要。 有計劃製作一個控制台實用程序,但我不確定是否需要?

結果如何呢?

一個小型且簡單的 Web 伺服器,用於透過 API 來配置多種手機型號以進行管理。

再說一次,這應該如何運作?

  1. 安裝奏鳴曲。
  2. 我們建立一個 json 配置並將其發佈在 sonata 中。
  3. 然後我們收到來自奏鳴曲的配置連結。
  4. 然後我們在電話中註明此連結。
  5. 設備正在載入配置

後續操作只需兩步驟:

  1. 我們創建一個 json 配置並在 sonata 中發布它
  2. 設備正在載入配置

哪些手機將被推廣?

供應商潮流、方位、億聯。 供應商內的配置或多或少相同,但可能因韌體而異 - 可能需要額外測試。

你可以製定什麼規則?

按時間。 您可以指定配置可用的時間。
透過mac位址。 透過裝置的個人連結提交配置時,也會檢查 MAC 位址。
透過ip。 透過發出請求的 IP 位址。

如何與奏鳴曲互動?

透過API,發出http請求。 該 API 將在您的安裝中可用。 因為API支援swagger規範,可以使用 線上實用程式 用於對 API 的測試請求。

太好了。 很酷的東西,嘗試一下怎麼樣?

最簡單的方法是基於儲存庫部署 docker 映像 奏鳴曲樣本。 該存儲庫包含安裝說明。

如果我了解 Node.js 怎麼辦?

如果您有使用 JavaScript 的經驗,那麼您很快就會弄清楚這裡的一切是如何運作的。

會有索納塔開發嗎?

我部分達成了我的目標。 進一步的開發是我關於自動化電話設定主題的任務。 還有機會擴展配置來配置電話按鈕,添加地址簿配置,也許還有其他東西,請寫在評論中。

總結和致謝

我很高興收到建設性的建議/反對/意見和問題,因為… 他很可能描述了一些難以理解的事情。

我還要向所有提供幫助、建議、測試和提供/捐贈手機進行測試的同事表示感謝。 事實上,我在工作中交流過的許多人不同程度地參與了這個項目, 紫苑會議'e,在聊天和電子郵件中。 感謝您的想法和想法。

來源: www.habr.com

添加評論