Sonata - SIP-klargøringsserver

Jeg ved ikke, hvad jeg skal sammenligne levering med. Måske med en kat? Det ser ud til at være muligt uden det, men med det er det lidt bedre. Især hvis det virker))

Formulering af problemet:

  1. Jeg vil konfigurere SIP-telefoner hurtigt, nemt og sikkert. Når du installerer en telefon, og endnu mere når du omkonfigurerer den.
  2. Mange leverandører har deres egne konfigurationsformater, deres egne hjælpeprogrammer til at generere konfigurationer og deres egne måder at beskytte konfigurationer på. Og jeg vil egentlig ikke have med alle at gøre.
  3. Mange leveringsløsninger, a) er fokuseret på én leverandør eller ét telefonsystem, b) er ret besværlige at implementere, en masse scripts, parametre, brrr...

Med hensyn til punkt 3 vil jeg komme med en kommentar om, at der er fremragende leveringssystemer til FreePBX, til FusionPBX, til Kazoo, hvor skabeloner til telefoner fra forskellige leverandører er offentligt tilgængelige. Der findes kommercielle løsninger, hvor du også kan konfigurere driften af ​​telefoner fra forskellige producenter i provisioneringsmodulet, for eksempel Yeastar PBX.

Habré er også fuld af opskrifter på, hvordan man opsætter enheder fra forskellige leverandører: tid, два. Men som de siger, alle systemer har en fatal fejl. Så vi laver vores egen cykel.

dit eget format

Som de siger i xkcd, hvis du ikke ønsker at håndtere 14 formater - kom med den 15. Derfor bruger vi generelle indstillinger for enhver telefon og laver vores eget json-konfigurationsformat.

Noget som dette:

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

Så i enhver telefon skal du konfigurere lokal tid og SIP-linjer. Alt er enkelt her. Du kan se flere eksempler her.

din egen serverprovisionering

I producentens manualer er der normalt et punkt, hvor der står: tag en csv, skriv din login-adgangskode-mac-adresse ned, generer filer ved hjælp af vores proprietære script, læg dem under Apache-webserveren, og alt vil være i orden.

Det næste afsnit i manualen fortæller dig normalt, at du også kan kryptere den genererede konfigurationsfil.

Men det er alle klassikere. Den moderne tilgang med smoothies og Twitter siger, at du skal lave en færdiglavet webserver, der ikke vil være så kraftfuld som Apache, men kun vil gøre en lille ting. Generer og send konfigurationer ved hjælp af et link.

Lad os stoppe her og huske, at næsten alle SIP-telefoner nu kan modtage konfigurationer via http/https, så vi overvejer ikke andre implementeringer (ftp, tftp, ftps). Derefter kender hver telefon sin egen MAC-adresse. Derfor vil vi lave to links: et personligt - baseret på enhedsnøglen, det andet generelt, som fungerer ved hjælp af en kombination af et fælles token og en MAC-adresse.

Jeg vil heller ikke dvæle ved zero-config, dvs. opsætning af telefonen fra bunden, dvs. du sluttede den til netværket, og den begyndte at virke. Nej, i mit scenarie tilslutter du den til netværket, laver den foreløbige opsætning (indstil den til at modtage konfigurationen fra klargøringsserveren) og drikker derefter pina colada og omkonfigurerer telefonen efter behov gennem klargøringen. Distributionsmulighed 66 er DHCP-serverens ansvar.

Jeg er i øvrigt helt træt af at sige "provisioning", så ordet blev forkortet til "provision", lad være med at sparke mig.

Og en ting mere: vores klargøringsserver har ikke en brugergrænseflade, dvs. brugergrænseflade. Måske lige nu, men ikke sikker, fordi... Jeg har ikke brug for det. Men der er en API til at gemme/slette indstillinger, få en liste over understøttede leverandører, modeller, alt er beskrevet i henhold til kanonerne i swagger-specifikationen.

Hvorfor API og ikke UI? Fordi Jeg har allerede mit eget telefonsystem, så har jeg en kilde til legitimationsoplysninger, hvor jeg bare skal tage disse data, kompilere den nødvendige json og publicere den på klargøringsserveren. Og klargøringsserveren vil i henhold til reglerne specificeret i json-filen give den påkrævede enhed sin konfiguration eller vil ikke give den, hvis enheden ikke er korrekt eller ikke opfylder kriterierne, der også er angivet i denne json.

Sonata - SIP-klargøringsserver

Sådan blev leveringsmikrotjenesten. Hedder sonate, kildekoden er tilgængelig på GitHub, der er også klar docker-billede, eksempel på dockerbrug her.

Nøglefunktioner:

  • under alle omstændigheder begrænset adgang til konfigurationen af ​​tid, som standard 10 minutter. Hvis du vil gøre konfigurationen tilgængelig igen, skal du genudgive konfigurationen igen.

  • ét format for alle leverandører, alle justeringer fjernes i sonata, du sender standardiseret json, konfigurerer eventuelt tilgængeligt udstyr.

  • alle konfigurationer udstedt til enheder logges, alle problemområder kan ses i loggen og fejl kan ses

  • Det er muligt at bruge ét fælles link med et token; hver telefon modtager sin egen konfiguration ved at angive mac-adressen. Eller et personligt link via nøgle.

  • API'er til administration (administration) og klargøring af konfigurationer til telefoner (provisioning) er opdelt efter porte

  • Tests. Det var meget vigtigt for mig at rette formatet på den udstedte konfiguration og dække alle de sædvanlige situationer med at udstede en konfiguration med tests. Så det hele fungerer klart.

Ulemper:

Indtil videre er kryptering ikke brugt på nogen måde i Sonata. De der. du kan selvfølgelig begynde at bruge https ved at sætte nginx foran sonata for eksempel. Men proprietære metoder er endnu ikke blevet brugt. Hvorfor? Projektet er stadig ungt, det har lanceret sine første hundrede enheder. Og jeg samler selvfølgelig på ideer og feedback. Ydermere, for at gøre alting sikkert, så konfigurationerne ikke kan sniffes på netværket, er det nok værd at bøvle med krypteringsnøgler, tls og pindsvinet med, men dette bliver en fortsættelse.

Mangel på UI. Måske er dette en betydelig ulempe for slutbrugeren, men for en systemadministrator er et konsolværktøj vigtigere end et fuldgyldigt program. Der var planer om at lave et konsolværktøj, men jeg er ikke sikker på, om det er nødvendigt?

Resultatet?

En lille og enkel webserver til at klargøre flere telefonmodeller med en API til administration.

Endnu en gang, hvordan skal det her fungere?

  1. Installation af sonate.
  2. Vi opretter en json-konfiguration og udgiver den i sonata.
  3. Så modtager vi et klargøringslink fra sonata.
  4. Så angiver vi dette link i telefonen.
  5. Enheden indlæser konfigurationen

Der er kun to trin i den efterfølgende drift:

  1. Vi opretter en json-konfiguration og udgiver den i sonata
  2. Enheden indlæser konfigurationen

Hvilke telefoner vil blive promoveret?

Leverandører Grandstream, Fanvil, Yealink. Konfigurationerne i leverandøren er mere eller mindre de samme, men kan variere afhængigt af firmwaren - det kan være nødvendigt at teste yderligere.

Hvilke regler kan du sætte?

Med tiden. Du kan angive det tidspunkt, indtil konfigurationen vil være tilgængelig.
Efter mac-adresse. Når du sender konfigurationen via enhedens personlige link, vil mac-adressen også blive kontrolleret.
Af ip. Efter IP-adresse, hvorfra anmodningen blev foretaget.

Hvordan interagerer man med Sonata?

Via API laver http-anmodninger. API'en vil være tilgængelig i din installation. Fordi API'et understøtter swagger-specifikationen, du kan bruge online værktøj for testanmodninger til API'en.

Ok godt. Fed ting, hvad med at prøve det?

Den nemmeste måde er at implementere et docker-image baseret på et lager sonate-eksempel. Depotet indeholder installationsinstruktioner.

Hvad hvis jeg kender node.js?

Hvis du har erfaring med at bruge JavaScript, så finder du hurtigt ud af, hvordan alt fungerer her.

Kommer der en Sonata-udvikling?

Jeg nåede delvist mine mål. Videreudvikling er et spørgsmål om mine opgaver om emnet automatisering af telefonopsætning. Der er også mulighed for at udvide konfigurationerne for at konfigurere telefonknapper, tilføje adressebogsforsyning, måske noget andet, skriv i kommentarerne.

Resumé og anerkendelser

Jeg vil med glæde have konstruktive forslag/indvendinger/kommentarer og spørgsmål, fordi... Det kan godt være, han beskrev noget uforståeligt.

Jeg udtrykker også min taknemmelighed til alle mine kolleger, som har hjulpet, rådgivet, testet og givet/doneret telefoner til test. I virkeligheden er mange mennesker, som jeg kommunikerede med på arbejdet, involveret i projektet i forskellig grad, AsterConfi chats og e-mails. Tak for ideerne og tankerne.

Kilde: www.habr.com

Tilføj en kommentar