Sonata - pelayan peruntukan SIP

Saya tidak tahu hendak membandingkan peruntukan dengan apa. Mungkin dengan kucing? Nampaknya mungkin tanpanya, tetapi dengannya ia lebih baik sedikit. Terutama jika ia berfungsi))

Rumusan masalah:

  1. Saya mahu menyediakan telefon SIP dengan cepat, mudah dan selamat. Apabila memasang telefon, dan lebih-lebih lagi apabila mengkonfigurasinya semula.
  2. Banyak vendor mempunyai format konfigurasi mereka sendiri, utiliti mereka sendiri untuk menjana konfigurasi, dan cara mereka sendiri untuk melindungi konfigurasi. Dan saya sebenarnya tidak mahu berurusan dengan semua orang.
  3. Banyak penyelesaian peruntukan, a) tertumpu pada satu vendor atau satu sistem telefon, b) agak menyusahkan untuk dilaksanakan, banyak skrip, parameter, brrr...

Mengenai perkara 3, saya akan membuat ulasan bahawa terdapat sistem peruntukan yang sangat baik untuk FreePBX, untuk FusionPBX, untuk Kazoo, di mana templat untuk telefon daripada pelbagai vendor tersedia secara terbuka. Terdapat penyelesaian komersial di mana anda juga boleh mengkonfigurasi operasi telefon daripada pengeluar yang berbeza dalam modul peruntukan, contohnya, Yeastar PBX.

HabrΓ© juga penuh dengan resipi tentang cara menyediakan peranti daripada pelbagai vendor: masa, Π΄Π²Π°. Tetapi seperti yang mereka katakan, semua sistem mempunyai kecacatan yang membawa maut. Jadi kami akan membuat basikal kami sendiri.

format anda sendiri

Seperti yang mereka katakan dalam xkcd, jika anda tidak mahu berurusan dengan 14 format - datang dengan 15hb. Oleh itu, kami menggunakan tetapan umum untuk mana-mana telefon dan membuat format konfigurasi json kami sendiri.

Sesuatu seperti ini:

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

Jadi, dalam mana-mana telefon anda perlu mengkonfigurasi masa tempatan dan talian SIP. Semuanya mudah di sini. Anda boleh melihat lebih banyak contoh di sini.

peruntukan pelayan anda sendiri

Dalam manual pengilang biasanya terdapat satu titik di mana ia berkata: ambil csv, tuliskan alamat log masuk-kata laluan-mac-anda, hasilkan fail menggunakan skrip proprietari kami, letakkannya di bawah pelayan web Apache dan semuanya akan baik-baik saja.

Perenggan seterusnya manual biasanya memberitahu anda bahawa anda juga boleh menyulitkan fail konfigurasi yang dijana.

Tetapi ini semua klasik. Pendekatan moden dengan smoothie dan Twitter mengatakan bahawa anda perlu membuat pelayan web siap pakai yang tidak akan sekuat Apache, tetapi hanya akan melakukan satu perkara kecil. Hasilkan dan hantar konfigurasi menggunakan pautan.

Mari berhenti di sini dan ingat bahawa hampir semua telefon SIP kini boleh menerima konfigurasi melalui http/https, jadi kami tidak mempertimbangkan pelaksanaan lain (ftp, tftp, ftps). Kemudian, setiap telefon mengetahui alamat MACnya sendiri. Oleh itu, kami akan membuat dua pautan: satu peribadi - berdasarkan kunci peranti, umum kedua, yang berfungsi menggunakan gabungan token biasa dan alamat MAC.

Juga, saya tidak akan memikirkan sifar-config, i.e. menyediakan telefon dari awal, i.e. anda memasukkannya ke dalam rangkaian dan ia mula berfungsi. Tidak, dalam senario saya, anda pasangkannya ke dalam rangkaian, lakukan persediaan awal (sediakannya untuk menerima konfigurasi daripada pelayan peruntukan), dan kemudian minum pina colada dan konfigurasi semula telefon seperti yang diperlukan melalui peruntukan. Mengedarkan Pilihan 66 adalah tanggungjawab pelayan DHCP.

Ngomong-ngomong, saya benar-benar bosan untuk menyebut "peruntukan", jadi perkataan itu dipendekkan kepada "peruntukan", tolong jangan tendang saya.

Dan satu perkara lagi: pelayan peruntukan kami tidak mempunyai UI, i.e. antaramuka pengguna. Mungkin, buat masa ini, tetapi tidak pasti, kerana... Saya tidak memerlukannya. Tetapi terdapat API untuk menyimpan/memadam tetapan, mendapatkan senarai vendor yang disokong, model, semuanya diterangkan mengikut kanun spesifikasi kesombongan.

Mengapa API dan bukan UI? Kerana Saya sudah mempunyai sistem telefon saya sendiri, kemudian saya mempunyai sumber bukti kelayakan, di mana saya hanya perlu mengambil data ini, menyusun json yang diperlukan dan menerbitkannya pada pelayan peruntukan. Dan pelayan peruntukan, mengikut peraturan yang dinyatakan dalam fail json, akan memberikan peranti yang diperlukan konfigurasinya atau tidak akan memberikannya jika peranti itu tidak betul atau tidak memenuhi kriteria yang juga dinyatakan dalam json ini.

Sonata - pelayan peruntukan SIP

Beginilah rupa perkhidmatan mikro peruntukan itu. Dipanggil sonata, kod sumber tersedia di GitHub, ada juga siap gambar docker, contoh penggunaan buruh pelabuhan di sini.

Ciri-ciri utama:

  • dalam apa jua keadaan, akses terhad kepada konfigurasi mengikut masa, secara lalai 10 minit. Jika anda ingin menjadikan konfigurasi tersedia semula, terbitkan semula konfigurasi itu sekali lagi.

  • satu format untuk semua vendor, semua pelarasan dialih keluar dalam sonata, anda menghantar json standard, mengkonfigurasi sebarang peralatan yang tersedia.

  • semua konfigurasi yang dikeluarkan kepada peranti dilog, semua kawasan masalah boleh dilihat dalam log dan ralat dapat dilihat

  • Anda boleh menggunakan satu pautan biasa dengan token; setiap telefon menerima konfigurasinya sendiri dengan menyatakan alamat mac. Atau pautan peribadi melalui kunci.

  • API untuk pengurusan (pengurusan) dan peruntukan konfigurasi kepada telefon (peruntukan) dibahagikan mengikut port

  • Ujian. Adalah sangat penting bagi saya untuk membetulkan format konfigurasi yang dikeluarkan dan meliputi semua situasi biasa untuk mengeluarkan konfigurasi dengan ujian. Supaya ini semua berfungsi dengan jelas.

Cons:

Setakat ini, penyulitan tidak digunakan dalam apa-apa cara dalam Sonata. Itu. anda sudah tentu boleh mula menggunakan https dengan meletakkan nginx di hadapan sonata sebagai contoh. Tetapi kaedah proprietari masih belum digunakan. kenapa? Projek ini masih muda, ia telah melancarkan seratus peranti pertamanya. Dan, sudah tentu, saya mengumpul idea dan maklum balas. Selanjutnya, untuk memastikan segala-galanya selamat, supaya konfigurasi tidak dapat dihidu pada rangkaian, mungkin perlu diganggu dengan kunci penyulitan, tls dan landak dengannya, tetapi ini akan menjadi kesinambungan.

Kekurangan UI. Mungkin ini adalah kelemahan yang ketara untuk pengguna akhir, tetapi bagi pentadbir sistem, utiliti konsol adalah lebih penting daripada aplikasi sepenuhnya. Terdapat rancangan untuk membuat utiliti konsol, tetapi saya tidak pasti sama ada ia diperlukan?

Hasilnya?

Pelayan web yang kecil dan ringkas untuk menyediakan beberapa model telefon dengan API untuk pengurusan.

Sekali lagi, bagaimana ini sepatutnya berfungsi?

  1. Memasang sonata.
  2. Kami mencipta konfigurasi json dan menerbitkannya dalam sonata.
  3. Kemudian kami menerima pautan peruntukan daripada sonata.
  4. Kemudian kami menunjukkan pautan ini dalam telefon.
  5. Peranti sedang memuatkan konfigurasi

Terdapat hanya dua langkah dalam operasi seterusnya:

  1. Kami mencipta konfigurasi json dan menerbitkannya dalam sonata
  2. Peranti sedang memuatkan konfigurasi

Telefon mana yang akan dipromosikan?

Vendor Grandstream, Fanvil, Yealink. Konfigurasi dalam vendor adalah lebih kurang sama, tetapi mungkin berbeza bergantung pada perisian tegar - mungkin perlu untuk menguji tambahan.

Apakah peraturan yang boleh anda tetapkan?

Pada masa. Anda boleh menentukan masa sehingga konfigurasi akan tersedia.
Mengikut alamat mac. Apabila menyerahkan konfigurasi melalui pautan peribadi peranti, alamat mac juga akan diperiksa.
Oleh ip. Mengikut alamat IP dari mana permintaan dibuat.

Bagaimana untuk berinteraksi dengan Sonata?

Melalui API, membuat permintaan http. API akan tersedia dalam pemasangan anda. Kerana API menyokong spesifikasi kesombongan, anda boleh gunakan utiliti dalam talian untuk permintaan ujian kepada API.

Baik bagus. Perkara yang menarik, bagaimana jika anda mencubanya?

Cara paling mudah ialah menggunakan imej docker berdasarkan repositori sampel sonata. Repositori mengandungi arahan pemasangan.

Bagaimana jika saya tahu node.js?

Jika anda mempunyai pengalaman menggunakan JavaScript, maka anda akan dengan cepat mengetahui cara semuanya berfungsi di sini.

Adakah akan ada pembangunan Sonata?

Saya mencapai sebahagian matlamat saya. Pembangunan selanjutnya adalah soal tugas saya mengenai topik mengautomasikan persediaan telefon. Terdapat juga peluang untuk mengembangkan konfigurasi untuk mengkonfigurasi butang telefon, menambah peruntukan buku alamat, mungkin sesuatu yang lain, tulis dalam ulasan.

Ringkasan dan pengiktirafan

Saya berbesar hati untuk mempunyai cadangan/bantahan/komen dan soalan yang membina, kerana... Boleh jadi dia menggambarkan sesuatu yang tidak dapat difahami.

Saya juga mengucapkan terima kasih kepada semua rakan sekerja saya yang membantu, menasihati, menguji, dan menyediakan/menderma telefon untuk ujian. Pada hakikatnya, ramai orang yang saya ajak berkomunikasi di tempat kerja terlibat dalam projek itu pada tahap yang berbeza-beza, AsterConf'e, dalam sembang dan e-mel. Terima kasih atas idea dan pemikiran.

Sumber: www.habr.com

Tambah komen