Sonata - SIP provisioning server

Hindi ko alam kung ano ang ihahambing sa provisioning. Baka may pusa? Mukhang posible kung wala siya, ngunit sa kanya ay medyo mas mahusay. Lalo na kung ito ay gumagana

Pagbubuo ng problema:

  1. Gusto kong mag-set up ng mga SIP phone nang mabilis, simple, at ligtas. Kapag ini-install ang telepono, at higit pa sa pag-configure nito.
  2. Maraming mga vendor ang may sariling mga format ng config, kanilang sariling mga utility para sa pagbuo ng mga config, kanilang sariling mga paraan upang maprotektahan ang mga config. At ayokong makitungo sa lahat.
  3. Maraming mga solusyon sa provisioning ay a) nakatutok sa isang vendor o isang sistema ng telepono, b) medyo mahirap ipatupad, isang grupo ng mga script, parameter, br-r...

Sa punto 3, gagawa ako ng komento na mayroong mahusay na sistema ng pagbibigay para sa FreePBX, para sa FusionPBX, para kay Kazoo, kung saan may mga template para sa mga telepono ng iba't ibang vendor sa pampublikong domain. May mga komersyal na solusyon kung saan maaari mo ring i-configure ang gawain ng mga telepono mula sa iba't ibang mga tagagawa sa provisioning module, halimbawa, Yeastar PBX.

Ang HabrΓ© ay puno rin ng mga recipe para sa pag-set up ng mga device mula sa iba't ibang vendor: oras, Π΄Π²Π°. Ngunit tulad ng sinasabi nila, ang lahat ng mga sistema ay may isang nakamamatay na kapintasan. Kaya gawin natin ang ating bike.

sariling format

Tulad ng sinabi ng xkcd, kung ayaw mong makitungo sa 14 na mga format - dumating sa ika-15. Samakatuwid, ginagamit namin ang pangkalahatang mga setting para sa anumang telepono at gumawa ng sarili naming json config na format.

Halos ganito:

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

Kaya, sa anumang telepono kailangan mong mag-set up ng lokal na oras, mga sip-line. Simple lang ang lahat dito. Marami pang mga halimbawa ang makikita dito.

naka-provision ang iyong server

Ang mga manwal ng tagagawa ay karaniwang may talata na nagsasabing: kumuha ng csv, isulat ang login-password-mac-address doon, bumuo ng mga file gamit ang aming pagmamay-ari na script, ilagay ang mga ito sa ilalim ng Apache web server at magiging maayos ito.

Ang susunod na talata ng manual ay karaniwang nagsasabi sa iyo kung ano pa ang maaari mong gawin at i-encrypt ang nabuong config file.

Ngunit lahat ng ito ay klasiko. Ang makabagong smoothie at twitter approach ay ang gumawa ng isang handa na web server na hindi kasing lakas ng Apache at gumagawa ng isang maliit na bagay. Bumuo at magpadala ng mga config sa pamamagitan ng sanggunian.

Huminto tayo dito at tandaan na halos lahat ng mga SIP phone ay maaari na ngayong makakuha ng mga config sa pamamagitan ng http/https, kaya hindi namin isinasaalang-alang ang iba pang mga pagpapatupad (ftp, tftp, ftps). Pagkatapos, alam ng bawat telepono ang sarili nitong MAC address. Samakatuwid, gagawa kami ng dalawang link: ang isa ay personal - sa pamamagitan ng key ng device, ang pangalawa ay pangkalahatan, na gumagana sa pamamagitan ng pag-link ng isang karaniwang token at isang poppy address.

Gayundin, hindi ako magtatagal sa zero-config, i.e. pag-set up ng telepono mula sa simula, i.e. sinaksak mo ito sa network at kumita siya ng hop. Hindi, sa aking senaryo, sinaksak mo ito sa network, gumawa ng paunang pagsasaayos (na-configure ito upang makatanggap ng isang config mula sa server ng probisyon), at pagkatapos ay uminom ng pinocolade at muling i-configure ang telepono ayon sa nararapat sa pamamagitan ng probisyon. Ang pamimigay ng Opsyon 66 ay nasa DHCP server.

Siyanga pala, pagod na pagod na akong magsabi ng "provisioning", kaya ang salita ay binawasan ng "provisioning", mangyaring huwag sipa gamit ang iyong mga paa.

At isa pang bagay: ang aming proxy server ay walang UI, ibig sabihin. user interface. Malamang, pero hindi ako sigurado, kasi. hindi ko kailangan. Ngunit mayroong isang API para sa pag-save / pagtanggal ng mga setting, pagkuha ng isang listahan ng mga suportadong vendor, mga modelo, lahat ay inilarawan ayon sa mga canon ng pagtutukoy ng swagger.

Bakit API at hindi UI? kasi Mayroon na akong sariling sistema ng telepono, pagkatapos ay mayroon akong pinagmumulan ng mga kredensyal, kung saan kailangan ko lang kunin ang data na ito, isulat ang kinakailangang json at i-publish ito sa provisioning server. At ang server na, ayon sa mga patakarang tinukoy sa json file, ay magbibigay sa kinakailangang device ng config nito o hindi, kung ang device ay hindi tama, o hindi nakakatugon sa pamantayang tinukoy din sa json na ito.

Sonata - SIP provisioning server

Narito ang isang probisyon ng microservice na lumabas. tinawag sonata, available ang source code sa github, meron din tapos na larawan ng docker, isang halimbawa ng paggamit ng docker dito.

Pangunahing tampok:

  • sa anumang kaso, limitado ang access sa config ayon sa oras, bilang default ay 10 minuto. Kung gusto mong gawing available muli ang config, muling i-publish muli ang config.

  • isang format para sa lahat ng mga vendor, ang lahat ng pagpapasadya ay tinanggal sa sonata, nagpadala ka ng standardized na json, na-configure mo ang anumang magagamit na kagamitan.

  • lahat ng inisyu na config ay naka-log sa mga device, lahat ng problemang lugar ay maaaring tingnan sa log at makita ang mga error

  • posibleng gumamit ng isang karaniwang link na may token, ang bawat telepono ay tumatanggap ng sarili nitong config sa pamamagitan ng pagtukoy sa mac-address. O isang personal na link sa pamamagitan ng susi.

  • Ang API para sa pamamahala (pamamahala) at pag-isyu ng mga config sa mga telepono (provisioning) ay hinati sa mga port

  • Mga pagsubok. Para sa akin, napakahalagang ayusin ang format ng ibinigay na config at saklawin ang lahat ng karaniwang sitwasyon ng pag-isyu ng config na may mga pagsubok. Para masiguradong gumagana ang lahat.

Cons:

Sa ngayon, walang encryption na ginagamit sa balangkas ng sonata. Yung. Maaari mo siyempre simulan ang paggamit ng https sa pamamagitan ng paglalagay ng nginx bago ang sonata halimbawa. Ngunit ang mga branded na pamamaraan ay hindi pa kasali. Bakit? Ang proyekto ay bata pa, inilunsad lamang nito ang unang daang mga aparato. At, siyempre, nangongolekta ako ng mga ideya at feedback. Dagdag pa, upang maging ligtas ang lahat upang hindi ma-sniff ang mga config sa network, marahil ay sulit na malito sa mga encryption key, tls at kanilang mga hedgehog, ngunit ito ay magpapatuloy.

Kakulangan ng UI. Marahil ito ay isang makabuluhang kawalan para sa end user, ngunit para sa isang system administrator, ang isang console utility ay mas mahalaga kaysa sa isang ganap na application. May mga planong gumawa ng console utility, ngunit hindi ako sigurado kung kailangan ito?

Ang resulta?

Isang maliit at simpleng web server para sa pagbibigay ng ilang modelo ng telepono na may API para sa pamamahala.

Muli, paano ito gagana?

  1. Mag-install ng sonata.
  2. Bumubuo kami ng json config at inilathala ito sa sonata.
  3. Pagkatapos ay makakakuha tayo ng isang link para sa probisyon mula sa sonata.
  4. Pagkatapos ay ipinapahiwatig namin ang link na ito sa set ng telepono.
  5. Hinihigpitan ng device ang config

sa kasunod na operasyon, dalawang hakbang lamang:

  1. Bumubuo kami ng json config at i-publish ito sa sonata
  2. Hinihigpitan ng device ang config

Anong mga telepono ang pino-promote?

Vendor Grandstream, Fanvil, Yealink. Ang mga config sa loob ng vendor ay halos pareho, ngunit maaaring mag-iba depende sa firmware - maaaring kailanganin pang subukan.

Anong mga tuntunin ang maaaring itakda?

Sa oras. Maaari mong tukuyin ang oras hanggang sa magiging available ang config.
Sa pamamagitan ng mac address. Kapag nag-upload ng config sa pamamagitan ng personal na link ng device, susuriin din ang mac-address.
sa pamamagitan ng ip. Sa pamamagitan ng ip address kung saan ginawa ang kahilingan.

Paano makipag-ugnayan sa sonata?

Sa pamamagitan ng API, paggawa ng mga kahilingan sa http. Magiging available ang API sa iyong pag-install. kasi Sinusuportahan ng API ang detalye ng swagger, maaari mong gamitin online na utility para sa mga kahilingan sa pagsubok ng API.

OK, mahusay. Ang bagay ay cool, paano subukan?

Ang pinakamadaling paraan upang mag-deploy ng isang docker na imahe batay sa isang repository sample ng sonata. Ang repository ay naglalaman ng mga tagubilin sa pag-install.

Paano kung alam ko ang node.js?

Kung mayroon kang karanasan sa paggamit ng JavaScript, mabilis mong malalaman kung paano gumagana ang lahat dito.

Magkakaroon ba ng development ng sonata?

Bahagyang nakamit ko ang aking mga layunin. Ang karagdagang pag-unlad ay isang bagay sa aking mga gawain sa paksa ng pag-automate ng mga setting ng telepono. Mayroon ding pagkakataon na palawakin ang mga config upang i-customize ang mga pindutan ng telepono, magdagdag ng mga provisioning address book, maaaring iba pa, isulat sa mga komento.

Buod at Pagkilala

Ako ay natutuwa sa mga nakabubuo na mungkahi / pagtutol / komento at mga katanungan, dahil Maaaring ito ay isang bagay na hindi malinaw na inilarawan.

Ipinapahayag ko rin ang aking pasasalamat sa lahat ng mga kasamahan na tumulong, nagpayo, sumubok, nagbigay / nag-donate ng mga telepono para sa mga pagsubok. Sa katunayan, ang proyekto na kasangkot sa iba't ibang antas, maraming mga tao na nakausap ko sa trabaho, sa AsterConf'e, sa mga chat at email. Salamat sa mga ideya at kaisipan.

Pinagmulan: www.habr.com

Magdagdag ng komento