Sonata - SIP-hallintapalvelin

En tiedä mihin verrata tarjontaa. Ehkä kissan kanssa? Se näyttää mahdolliselta ilman sitä, mutta sen kanssa se on vähän parempi. Varsinkin jos se toimii))

Ongelman muotoilu:

  1. Haluan määrittää SIP-puhelimet nopeasti, helposti ja turvallisesti. Kun asennat puhelinta, ja vielä enemmän, kun määrität sen uudelleen.
  2. Monilla toimittajilla on omat konfigurointimuotonsa, omat apuohjelmansa asetusten luomiseen ja omat tapansa suojata asetuksia. Ja en todellakaan halua olla kaikkien kanssa tekemisissä.
  3. Monet provisiointiratkaisut, a) keskittyvät yhteen toimittajaan tai yhteen puhelinjärjestelmään, b) ovat melko hankalia toteuttaa, paljon komentosarjoja, parametreja, brrr...

Kohdan 3 osalta kommentoin, että on olemassa erinomaisia ​​provisiointijärjestelmiä FreePBX:lle, FusionPBX:lle, kasoolle, jossa eri valmistajien puhelimien mallit ovat julkisesti saatavilla. On kaupallisia ratkaisuja, joissa provisiointimoduulissa voi myös konfiguroida eri valmistajien puhelimien toimintaa, esimerkiksi Yeastar PBX.

Habré on myös täynnä reseptejä eri valmistajien laitteiden asentamiseen: aika, два. Mutta kuten sanotaan, kaikissa järjestelmissä on kohtalokas virhe. Teemme siis oman pyörämme.

omaa muotoa

Kuten xkcd:ssä sanotaan, jos et halua käsitellä 14 formaattia - keksiä 15. Siksi käytämme yleisiä asetuksia mille tahansa puhelimelle ja teemme oman json-konfigurointimuodon.

Jotain tällaista:

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

Joten missä tahansa puhelimessa sinun on määritettävä paikallinen aika ja SIP-linjat. Täällä kaikki on yksinkertaista. Voit nähdä lisää esimerkkejä täällä.

oman palvelimesi provisiointi

Valmistajan käsikirjoissa on yleensä kohta, jossa lukee: ota csv, kirjoita sisäänkirjautumissalasana-mac-osoitteesi, luo tiedostot omalla skriptillämme, laita ne Apache-verkkopalvelimen alle ja kaikki on hyvin.

Käyttöoppaan seuraavassa kappaleessa kerrotaan yleensä, että voit myös salata luodun konfigurointitiedoston.

Mutta nämä ovat kaikki klassikoita. Moderni lähestymistapa smoothien ja Twitterin kanssa sanoo, että sinun on tehtävä valmis web-palvelin, joka ei ole yhtä tehokas kuin Apache, mutta tekee vain yhden pienen asian. Luo ja lähetä määrityksiä linkin avulla.

Pysähdytään tähän ja muistetaan, että melkein kaikki SIP-puhelimet voivat nyt vastaanottaa konfiguraatioita http/https:n kautta, joten emme harkitse muita toteutuksia (ftp, tftp, ftps). Sitten jokainen puhelin tietää oman MAC-osoitteensa. Siksi teemme kaksi linkkiä: yhden henkilökohtaisen - laiteavaimen perusteella, toisen yleisen, joka toimii yhteisen tunnuksen ja MAC-osoitteen yhdistelmällä.

En myöskään viivyttele zero-configissa, ts. puhelimen asentaminen tyhjästä, ts. liitit sen verkkoon ja se alkoi toimia. Ei, minun skenaariossani liität sen verkkoon, suoritat alustavat asetukset (asetat sen vastaanottamaan asetukset provisiointipalvelimelta) ja juot sitten pina coladaa ja määrität puhelimen tarvittaessa uudelleen provisioinnin kautta. Jakeluvaihtoehto 66 on DHCP-palvelimen vastuulla.

Muuten, olen täysin kyllästynyt sanomiseen "varmistaminen", joten sana lyhennettiin sanaksi "provision", älä potki minua.

Ja vielä yksi asia: provisiointipalvelimellamme ei ole käyttöliittymää, ts. käyttöliittymä. Ehkä toistaiseksi, mutta en ole varma, koska... En tarvitse sitä. Mutta on API asetusten tallentamiseen/poistamiseen, luettelon saamiseen tuetuista toimittajista, malleista, kaikki on kuvattu swagger-määrittelyn kanonien mukaan.

Miksi API eikä käyttöliittymä? Koska Minulla on jo oma puhelinjärjestelmä, sitten minulla on tunnistetietolähde, josta minun tarvitsee vain ottaa nämä tiedot, koota tarvittava json ja julkaista se provisiointipalvelimella. Ja provisiointipalvelin json-tiedostossa määritettyjen sääntöjen mukaan antaa vaaditulle laitteelle määrityksensä tai ei anna sitä, jos laite ei ole oikea tai ei täytä tässä jsonissa määritettyjä ehtoja.

Sonata - SIP-hallintapalvelin

Näin provisiointimikropalvelusta tuli. Nimeltään sonaatti, lähdekoodi on saatavilla GitHubissa, siellä on myös valmis telakointikuva, telakkakäyttöesimerkki täällä.

Avainominaisuudet:

  • joka tapauksessa rajoitettu pääsy konfiguraatioon ajan mukaan, oletusarvoisesti 10 minuuttia. Jos haluat asettaa asetukset uudelleen saataville, julkaise kokoonpano uudelleen.

  • yksi muoto kaikille toimittajille, kaikki säädöt poistetaan sonaatista, lähetät standardoidun json-tiedoston, määrität saatavilla olevat laitteet.

  • kaikki laitteille annetut konfiguraatiot kirjataan lokiin, kaikki ongelma-alueet voidaan tarkastella lokissa ja virheet näkyvät

  • On mahdollista käyttää yhtä yhteistä linkkiä tunnuksella, jokainen puhelin saa oman konfigurointinsa määrittämällä Mac-osoitteen. Tai henkilökohtainen linkki avaimen kautta.

  • API:t puhelimien hallintaan (hallintaan) ja asetusten hallintaan (provisioning) on ​​jaettu porttien mukaan

  • Testit. Minulle oli erittäin tärkeää korjata julkaistun konfiguraation muoto ja kattaa kaikki tavanomaiset konfiguraation antamisen tilanteet testeillä. Jotta tämä kaikki toimii selkeästi.

Miinukset:

Toistaiseksi salausta ei ole käytetty millään tavalla Sonatassa. Nuo. Voit tietysti aloittaa https:n käytön asettamalla nginxin esimerkiksi sonaatin eteen. Mutta patentoituja menetelmiä ei ole vielä käytetty. Miksi? Projekti on vielä nuori, se on julkaissut ensimmäiset sata laitetta. Ja tietysti kerään ideoita ja palautetta. Edelleen, jotta kaikki olisi turvallista, jotta konfiguraatioita ei pääse haistelemaan verkossa, kannattaa luultavasti vaivautua salausavaimiin, tls:iin ja siiliin niiden kanssa, mutta tämä on jatkoa.

Käyttöliittymän puute. Ehkä tämä on merkittävä haitta loppukäyttäjälle, mutta järjestelmänvalvojalle konsoliapuohjelma on tärkeämpi kuin täysimittainen sovellus. Suunnitelmissa oli tehdä konsoliapuohjelma, mutta en ole varma, tarvitaanko sitä?

Tulos?

Pieni ja yksinkertainen verkkopalvelin useiden puhelinmallien hallintaan API:lla.

Vielä kerran, miten tämän pitäisi toimia?

  1. Sonaatin asennus.
  2. Luomme json-konfiguraation ja julkaisemme sen sonaattina.
  3. Sitten saamme provisiointilinkin Sonatasta.
  4. Ilmoitamme sitten tämän linkin puhelimessa.
  5. Laite lataa asetusta

Seuraavassa toiminnassa on vain kaksi vaihetta:

  1. Luomme json-konfiguraation ja julkaisemme sen sonaattina
  2. Laite lataa asetusta

Mitä puhelimia mainostetaan?

Toimittajat Grandstream, Fanvil, Yealink. Valmistajan konfiguraatiot ovat suurin piirtein samat, mutta voivat vaihdella laiteohjelmiston mukaan - saattaa olla tarpeen testata lisätestauksia.

Mitä sääntöjä voit asettaa?

Ajan kanssa. Voit määrittää ajan, johon asti konfiguraatio on käytettävissä.
mac-osoitteen mukaan. Kun konfigurointi lähetetään laitteen henkilökohtaisen linkin kautta, myös mac-osoite tarkistetaan.
ip:llä IP-osoitteen mukaan, josta pyyntö tehtiin.

Kuinka olla vuorovaikutuksessa sonaatin kanssa?

API:n kautta http-pyyntöjen tekeminen. API on käytettävissä asennuksessasi. Koska API tukee swagger-spesifikaatiota, jota voit käyttää online-apuohjelma API:lle lähetettäviin testipyyntöihin.

OK, hienoa. Hieno juttu, mitä jos kokeilisit?

Helpoin tapa on ottaa käyttöön arkistoon perustuva Docker-kuva sonaatti-näyte. Arkisto sisältää asennusohjeet.

Entä jos tiedän node.js:n?

Jos sinulla on kokemusta JavaScriptin käytöstä, saat nopeasti selville, kuinka kaikki toimii täällä.

Tuleeko Sonata-kehitys?

Saavutin tavoitteeni osittain. Jatkokehitys kuuluu tehtäviini puhelimen asetusten automatisoinnissa. On myös mahdollisuus laajentaa konfiguraatioita puhelimen painikkeiden konfiguroimiseksi, lisätä osoitekirjan tarjontaa, ehkä jotain muuta, kirjoita kommentteihin.

Yhteenveto ja tunnustukset

Otan mielelläni vastaan ​​rakentavia ehdotuksia/vastalauseita/kommentteja ja kysymyksiä, koska... Saattaa hyvinkin olla, että hän kuvaili jotain käsittämättömästi.

Kiitän myös kaikkia kollegoitani, jotka auttoivat, neuvoivat, testasivat ja toimittivat/lahjoittivat puhelimia testeihin. Todellisuudessa monet ihmiset, joiden kanssa kommunikoin työssäni, ovat mukana projektissa vaihtelevasti, AsterConf'e, chateissa ja sähköposteissa. Kiitos ideoista ja ajatuksista.

Lähde: will.com

Lisää kommentti