Sonata – SIP kiépítési kiszolgáló

Nem tudom mihez hasonlítani az ellátást. Talán macskával? Enélkül is lehetségesnek tűnik, de vele egy kicsit jobb. Főleg ha működik))

A probléma megfogalmazása:

  1. SIP telefonokat szeretnék gyorsan, egyszerűen és biztonságosan beállítani. Telefon telepítésekor, és még inkább újrakonfigurálásakor.
  2. Sok gyártó saját konfigurációs formátummal, saját segédprogramokkal rendelkezik a konfigurációk létrehozásához, és saját módszerekkel védi a konfigurációkat. És nem igazán akarok mindenkivel foglalkozni.
  3. Sok kiépítési megoldás, a) egy gyártóra vagy egy telefonrendszerre összpontosít, b) meglehetősen nehézkes a megvalósítása, sok szkript, paraméter, brrr...

A 3. ponttal kapcsolatban megjegyzem, hogy vannak kiváló szolgáltató rendszerek FreePBX-hez, a Fusion PBX számára, Kazoo számára, ahol nyilvánosan elérhetők a különböző gyártók telefonjaihoz készült sablonok. Vannak olyan kereskedelmi megoldások, ahol különböző gyártók telefonjainak működését is konfigurálhatja a kiépítési modulban, ilyen például a Yeastar PBX.

A Habré tele van receptekkel is a különféle gyártók eszközeinek beállításához: idő, два. De ahogy mondják, minden rendszernek van egy végzetes hibája. Tehát mi magunk készítjük el a kerékpárunkat.

a formátumod

Ahogy az xkcd-ben mondják, ha nem akarsz 14 formátummal foglalkozni - jöjjön fel a 15. Ezért minden telefonhoz általános beállításokat használunk, és saját json konfigurációs formátumot készítünk.

Valami ilyesmi:

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

Tehát minden telefonban konfigurálnia kell a helyi időt és a SIP-vonalakat. Itt minden egyszerű. További példákat láthat itt.

saját szerver-kiépítés

A gyártói kézikönyvekben általában van egy pont, ahol ez áll: vegyél egy csv-t, írd le a bejelentkezési jelszavadat-mac-címedet, generálj fájlokat a saját szkriptünkkel, tedd az Apache webszerver alá, és minden rendben lesz.

A kézikönyv következő bekezdése általában azt mondja, hogy a generált konfigurációs fájlt is titkosíthatja.

De ezek mind klasszikusok. A turmixok és a Twitter modern megközelítése azt mondja, hogy egy kész webszervert kell készíteni, amely nem lesz olyan erős, mint az Apache, de csak egy apróságot fog megtenni. Konfigurációk létrehozása és küldése hivatkozás segítségével.

Álljunk meg itt, és ne feledjük, hogy ma már szinte minden SIP telefon képes fogadni a konfigurációkat a http/https protokollon keresztül, így nem veszünk fontolóra más megvalósításokat (ftp, tftp, ftps). Ezután minden telefon tudja a saját MAC-címét. Ezért két linket készítünk: az egyik személyes - az eszközkulcs alapján, a második az általános, amely egy közös token és egy MAC-cím kombinációjával működik.

Illetve nem fogok rágódni a zero-confignál, pl. a telefon beállítása a nulláról, azaz. bedugtad a hálózatra és működni kezdett. Nem, az én forgatókönyvem szerint csatlakoztatja a hálózathoz, elvégzi az előzetes beállítást (beállítja, hogy megkapja a konfigurációt a kiépítési kiszolgálótól), majd megissza a pina coladát, és szükség szerint újrakonfigurálja a telefont a kiépítésen keresztül. A 66-os terjesztési lehetőség a DHCP-kiszolgáló felelőssége.

Amúgy teljesen elegem van a „provisioning” mondásból, ezért a szó lerövidült „provision”-ra, kérlek ne rúgj be.

És még valami: a szolgáltató szerverünknek nincs felhasználói felülete, pl. felhasználói felület. Egyelőre talán, de nem biztos, mert... nincs rá szükségem. De van API a beállítások mentésére/törlésére, a támogatott gyártók, modellek listájának lekérésére, minden a swagger specifikáció kánonjai szerint le van írva.

Miért API és nem UI? Mert Már van saját telefonrendszerem, akkor van egy hitelesítő adatforrásom, ahonnan csak ezeket az adatokat kell vinnem, össze kell fordítanom a szükséges json-t és közzé kell tenni a provizórikus szerveren. A kiépítési szerver pedig a json fájlban megadott szabályok szerint megadja a kívánt eszköznek a konfigurációját, vagy nem adja meg, ha az eszköz nem megfelelő, vagy nem felel meg a szintén ebben a json-ban megadott feltételeknek.

Sonata – SIP kiépítési kiszolgáló

Így alakult a kiépítési mikroszolgáltatás. Hívott szonáta, a forráskód elérhető a GitHubon, ott is van kész docker kép, docker használati példa itt.

Főbb jellemzők:

  • mindenesetre korlátozott hozzáférés a konfigurációhoz idő szerint, alapértelmezés szerint 10 perc. Ha újra elérhetővé szeretné tenni a konfigurációt, tegye újra közzé a konfigurációt.

  • egyetlen formátum az összes szállító számára, minden beállítás eltávolításra kerül a szonátában, szabványos json-fájlt küld, konfigurálja az elérhető berendezéseket.

  • Az eszközöknek kiadott összes konfiguráció naplózásra kerül, az összes problémás terület megtekinthető a naplóban és a hibák láthatók

  • Lehetőség van egy közös hivatkozás használatára egy tokennel, minden telefon megkapja a saját konfigurációját a Mac-cím megadásával. Vagy személyes link kulcson keresztül.

  • A telefonok konfigurációinak kezeléséhez (kezeléséhez) és kiépítéséhez (provisioning) szolgáló API-k portokra vannak osztva

  • Tesztek. Nagyon fontos volt számomra, hogy a kiadott konfig formátumát javítsam, és tesztekkel lefedjem a konfig kiadásának minden szokásos helyzetét. Hogy mindez egyértelműen működjön.

Hátrányok:

Eddig a Sonata-n belül semmilyen módon nem használták a titkosítást. Azok. természetesen elkezdheti használni a https-t, ha például az nginx-et a szonáta elé teszed. De szabadalmaztatott módszereket még nem alkalmaztak. Miért? A projekt még fiatal, piacra dobta első száz készülékét. És persze gyűjtök ötleteket, visszajelzéseket. Továbbá, hogy minden biztonságos legyen, hogy a konfigokat ne lehessen szippantani a hálózaton, valószínűleg érdemes a titkosítási kulcsokkal, tls-ekkel és velük a sündisznóval bajlódni, de ez lesz a folytatás.

UI hiánya. Talán ez jelentős hátrány a végfelhasználó számára, de a rendszergazdának a konzolos segédprogram fontosabb, mint egy teljes értékű alkalmazás. Tervezték egy konzolos segédprogram elkészítését, de nem tudom, hogy szükség van-e rá?

Az eredmény?

Kicsi és egyszerű webszerver több telefonmodell kiépítéséhez API-val a felügyelethez.

Mégegyszer, hogy kell ennek működnie?

  1. Szonáta telepítése.
  2. Létrehozunk egy json konfigurációt, és közzétesszük szonátában.
  3. Ezután kapunk egy létesítési hivatkozást a szonátától.
  4. Akkor ezt a linket jelezzük telefonon.
  5. Az eszköz betölti a konfigurációt

A következő műveletnek csak két lépése van:

  1. Létrehozunk egy json konfigurációt, és közzétesszük szonátában
  2. Az eszköz betölti a konfigurációt

Mely telefonok kerülnek reklámozásra?

Eladók: Grandstream, Fanvil, Yealink. A gyártón belüli konfigurációk többé-kevésbé azonosak, de a firmware-től függően eltérőek lehetnek – szükség lehet további tesztelésre.

Milyen szabályokat állíthat fel?

Idővel. Megadhatja azt az időt, ameddig a konfiguráció elérhető lesz.
Mac cím alapján. Amikor a konfigurációt az eszköz személyes linkjén keresztül küldi el, a mac-cím is ellenőrzésre kerül.
ip által. IP-cím alapján, ahonnan a kérés érkezett.

Hogyan kommunikáljunk a szonátával?

API-n keresztül, http kérések készítése. Az API elérhető lesz a telepítésben. Mert Az API támogatja a swagger specifikációt, használhatja online segédprogram az API-hoz intézett tesztkérésekhez.

Jólvan szuper. Klassz cucc, mit szólnál, ha kipróbálnád?

A legegyszerűbb módja a docker-lemezkép telepítése lerakat alapján szonáta-minta. A tároló tartalmazza a telepítési utasításokat.

Mi van, ha ismerem a node.js fájlt?

Ha van tapasztalata a JavaScript használatában, akkor gyorsan rájön, hogyan működik itt minden.

Lesz Sonata fejlesztés?

Részben elértem a céljaimat. A további fejlesztés a telefonbeállítás automatizálása témakörben a feladataim kérdése. Lehetőség van a konfigurációk bővítésére is a telefon gombjainak konfigurálására, címjegyzék-kiépítés hozzáadására, esetleg valami másra, írja meg a megjegyzésekben.

Összegzés és köszönetnyilvánítás

Építő jellegű javaslatokat/kifogásokat/megjegyzéseket és kérdéseket szívesen fogadok, mert... Könnyen lehet, hogy valamit értetlenül írt le.

Köszönetemet fejezem ki minden kollégámnak, aki segített, tanácsot adott, tesztelt, telefont biztosított/adományozott a tesztekhez. Valójában sok ember, akivel a munkahelyemen kommunikáltam, különböző mértékben vesz részt a projektben, AsterConfchatekben és e-mailekben. Köszönöm az ötleteket, gondolatokat.

Forrás: will.com

Hozzászólás