Sonata - Server penyediaan SIP

Saya tidak tahu harus membandingkan penyediaan dengan apa. Mungkin dengan kucing? Tampaknya mungkin tanpanya, tetapi dengan itu akan sedikit lebih baik. Apalagi jika berhasil))

Rumusan masalah:

  1. Saya ingin mengatur telepon SIP dengan cepat, mudah, dan aman. Saat memasang telepon, dan terlebih lagi saat mengkonfigurasi ulang.
  2. Banyak vendor memiliki format konfigurasinya sendiri, utilitasnya sendiri untuk menghasilkan konfigurasi, dan cara mereka sendiri untuk melindungi konfigurasi. Dan saya tidak benar-benar ingin berurusan dengan semua orang.
  3. Banyak solusi penyediaan, a) terfokus pada satu vendor atau satu sistem telepon, b) cukup rumit untuk diterapkan, banyak skrip, parameter, brrr...

Mengenai poin 3, saya akan berkomentar bahwa ada sistem penyediaan yang sangat baik untuk FreePBX, untuk FusionPBX, untuk Kazoo, tempat templat ponsel dari berbagai vendor tersedia untuk umum. Ada solusi komersial di mana Anda juga dapat mengonfigurasi pengoperasian ponsel dari produsen berbeda dalam modul penyediaan, misalnya, Yeastar PBX.

HabrΓ© juga penuh dengan resep cara mengatur perangkat dari berbagai vendor: waktu, Π΄Π²Π°. Namun seperti yang mereka katakan, semua sistem memiliki kelemahan fatal. Jadi kita akan membuat sepeda kita sendiri.

format Anda sendiri

Seperti yang mereka katakan di xkcd, jika Anda tidak ingin berurusan dengan 14 format - datanglah tanggal 15. Oleh karena itu, kami menggunakan pengaturan umum untuk ponsel apa pun 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, di telepon mana pun Anda perlu mengkonfigurasi waktu lokal dan jalur SIP. Semuanya sederhana di sini. Anda dapat melihat lebih banyak contoh di sini.

penyediaan server Anda sendiri

Dalam manual pabrikan biasanya ada paragraf yang mengatakan: ambil csv, tuliskan kata sandi-login-alamat mac Anda, buat file menggunakan skrip milik kami, letakkan di bawah server web Apache dan semuanya akan baik-baik saja.

Paragraf berikutnya dari manual biasanya memberitahu Anda bahwa Anda juga dapat mengenkripsi file konfigurasi yang dihasilkan.

Tapi ini semua klasik. Pendekatan modern dengan smoothies dan Twitter mengatakan bahwa Anda perlu membuat server web siap pakai yang tidak sekuat Apache, tetapi hanya akan melakukan satu hal kecil. Hasilkan dan kirim konfigurasi menggunakan tautan.

Mari kita berhenti di sini dan ingat bahwa hampir semua telepon SIP sekarang dapat menerima konfigurasi melalui http/https, jadi kami tidak mempertimbangkan implementasi lainnya (ftp, tftp, ftps). Kemudian, setiap ponsel mengetahui alamat MAC-nya sendiri. Oleh karena itu, kami akan membuat dua tautan: satu pribadi - berdasarkan kunci perangkat, yang kedua umum, yang berfungsi menggunakan kombinasi token umum dan alamat MAC.

Juga, saya tidak akan memikirkan konfigurasi nol, mis. mengatur telepon dari awal, mis. Anda menyambungkannya ke jaringan dan mulai berfungsi. Tidak, dalam skenario saya, Anda menyambungkannya ke jaringan, melakukan pengaturan awal (mengaturnya untuk menerima konfigurasi dari server penyediaan), lalu meminum pina colada dan mengkonfigurasi ulang telepon sesuai kebutuhan melalui penyediaan. Mendistribusikan Opsi 66 adalah tanggung jawab server DHCP.

Ngomong-ngomong, saya capek banget bilang "penyediaan", jadi kata itu disingkat menjadi "penyediaan", tolong jangan tendang saya.

Dan satu hal lagi: server penyediaan kami tidak memiliki UI, mis. antarmuka pengguna. Mungkin, untuk saat ini, tapi belum yakin, karena... Saya tidak membutuhkannya. Tetapi ada API untuk menyimpan/menghapus pengaturan, mendapatkan daftar vendor yang didukung, model, semuanya dijelaskan sesuai dengan aturan spesifikasi kesombongan.

Mengapa API dan bukan UI? Karena Saya sudah memiliki sistem telepon sendiri, kemudian saya memiliki sumber kredensial, di mana saya hanya perlu mengambil data ini, mengkompilasi json yang diperlukan dan mempublikasikannya di server penyediaan. Dan server penyediaan, sesuai dengan aturan yang ditentukan dalam file json, akan memberikan konfigurasinya kepada perangkat yang diperlukan atau tidak akan memberikannya jika perangkat tidak benar atau tidak memenuhi kriteria yang juga ditentukan dalam json ini.

Sonata - Server penyediaan SIP

Beginilah hasil layanan mikro penyediaan. Ditelepon sonata, source codenya ada di GitHub, ada juga gambar buruh pelabuhan siap, contoh penggunaan buruh pelabuhan di sini.

Fitur utama:

  • dalam hal apa pun, akses terbatas ke konfigurasi berdasarkan waktu, secara default 10 menit. Jika Anda ingin membuat konfigurasi tersedia lagi, publikasikan ulang konfigurasi tersebut.

  • satu format untuk semua vendor, semua penyesuaian dihapus di sonata, Anda mengirim json standar, mengkonfigurasi peralatan apa pun yang tersedia.

  • semua konfigurasi yang dikeluarkan untuk perangkat dicatat, semua area masalah dapat dilihat di log dan kesalahan dapat dilihat

  • Dimungkinkan untuk menggunakan satu tautan umum dengan token; setiap telepon menerima konfigurasinya sendiri dengan menentukan alamat mac. Atau tautan pribadi melalui kunci.

  • API untuk pengelolaan (management) dan penyediaan konfigurasi ke ponsel (provisioning) dibagi berdasarkan port

  • Tes. Sangat penting bagi saya untuk memperbaiki format konfigurasi yang dikeluarkan dan mencakup semua situasi biasa dalam mengeluarkan konfigurasi dengan pengujian. Agar semua ini berjalan dengan jelas.

Cons:

Sejauh ini, enkripsi tidak digunakan dengan cara apa pun di Sonata. Itu. Anda tentu saja dapat mulai menggunakan https dengan meletakkan nginx di depan sonata misalnya. Namun metode kepemilikan belum digunakan. Mengapa? Proyek ini masih muda, telah meluncurkan seratus perangkat pertamanya. Dan, tentu saja, saya mengumpulkan ide dan masukan. Selanjutnya, untuk membuat semuanya aman, sehingga konfigurasi tidak dapat diendus di jaringan, mungkin ada baiknya menggunakan kunci enkripsi, tls, dan landak yang bersamanya, tetapi ini akan menjadi kelanjutan.

Kurangnya UI. Mungkin ini merupakan kerugian yang signifikan bagi pengguna akhir, tetapi bagi administrator sistem, utilitas konsol lebih penting daripada aplikasi lengkap. Ada rencana untuk membuat utilitas konsol, tapi saya tidak yakin apakah itu diperlukan?

Hasilnya?

Server web kecil dan sederhana untuk menyediakan beberapa model telepon dengan API untuk manajemen.

Sekali lagi, bagaimana cara kerjanya?

  1. Memasang sonata.
  2. Kami membuat konfigurasi json dan mempublikasikannya di sonata.
  3. Kemudian kami menerima tautan penyediaan dari sonata.
  4. Kemudian kami menunjukkan tautan ini di telepon.
  5. Perangkat sedang memuat konfigurasi

Hanya ada dua langkah dalam operasi selanjutnya:

  1. Kami membuat konfigurasi json dan mempublikasikannya di sonata
  2. Perangkat sedang memuat konfigurasi

Ponsel mana yang akan dipromosikan?

Vendor Grandstream, Fanvil, Yealink. Konfigurasi dalam vendor kurang lebih sama, tetapi mungkin berbeda tergantung pada firmware - mungkin perlu dilakukan pengujian tambahan.

Aturan apa yang bisa Anda tetapkan?

Oleh waktu. Anda dapat menentukan waktu hingga konfigurasi akan tersedia.
Berdasarkan alamat mac. Saat mengirimkan konfigurasi melalui tautan pribadi perangkat, alamat mac juga akan diperiksa.
Oleh IP. Berdasarkan alamat IP tempat permintaan dibuat.

Bagaimana cara berinteraksi dengan Sonata?

Melalui API, membuat permintaan http. API akan tersedia di instalasi Anda. Karena API mendukung spesifikasi angkuh, yang dapat Anda gunakan utilitas daring untuk permintaan pengujian ke API.

OK bagus. Barang keren, bagaimana kalau mencobanya?

Cara termudah adalah dengan menyebarkan image buruh pelabuhan berdasarkan repositori sampel sonata. Repositori berisi instruksi instalasi.

Bagaimana jika saya mengetahui node.js?

Jika Anda memiliki pengalaman menggunakan JavaScript, Anda akan segera mengetahui cara kerja semuanya di sini.

Akankah ada pengembangan Sonata?

Saya mencapai sebagian tujuan saya. Perkembangan lebih lanjut adalah masalah tugas saya pada topik mengotomatisasi pengaturan telepon. Ada juga peluang untuk memperluas konfigurasi untuk mengonfigurasi tombol telepon, menambahkan penyediaan buku alamat, mungkin yang lain, tulis di komentar.

Ringkasan dan ucapan terima kasih

Saya akan dengan senang hati memberikan saran/keberatan/komentar dan pertanyaan yang membangun, karena... Mungkin saja dia menggambarkan sesuatu yang tidak bisa dimengerti.

Saya juga mengucapkan terima kasih kepada seluruh rekan-rekan saya yang telah membantu, memberi nasehat, melakukan tes, dan memberikan/mendonasikan ponsel untuk tes. Kenyataannya, banyak orang yang berkomunikasi dengan saya di tempat kerja terlibat dalam proyek ini pada tingkat yang berbeda-beda, AsterConfmisalnya, dalam obrolan dan email. Terima kasih atas ide dan pemikirannya.

Sumber: www.habr.com

Tambah komentar