Nem tudom, mivel hasonlítsam össze a provisioningot. Talán egy macskával? Úgy tűnik, el lehet nélküle is, de vele kicsit jobb. Különösen, ha dolgozik. ))
A probléma felvetése:
- Szeretném gyorsan, egyszerűen és biztonságosan beállítani a SIP telefonokat. Telefon telepítésekor és különösen annak újrakonfigurálásakor.
- Sok szállítónak megvannak a saját konfigurációs formátumai, a saját konfigurációgeneráló eszközei és a saját védelmi módszerei. De nem nagyon szeretnék mindegyikkel foglalkozni.
- Sok provisioning megoldás a) egyetlen szállítóra vagy egy telefonrendszerre van orientálva, b) elég terjengősen valósul meg, sok szkripttel, paraméterrel, brr…
A 3. ponthoz fűznék egy megjegyzést, hogy léteznek nagyszerű provisioning rendszerek , , , ahol az interneten elérhető sablonok vannak különböző szállítók telefonjaihoz. Léteznek kereskedelmi megoldások is, ahol a provisioning modulban beállítható a különböző gyártók telefonjainak működése, például a Yeastar PBX.
A Habrén is rengeteg recept található arról, hogyan kell beállítani a különböző szállítók készülékeit: , . De ahogy mondják, minden rendszernek van egy végzetes hibája. Ezért készítünk egy saját kerékpárt.
saját formátum
Ahogy az xkcd mondja, ha nem akarsz 14 formátummal foglalkozni — . Ezért általános beállításokat használunk bármely telefonhoz, é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": "Mobilon",
"line": 1,
"sip_register": "sip.mobilonsip.ru",
"sip_name": "sip102",
"sip_user": "sip102",
"sip_password": "4321",
"sip_auth": "sip102"
}
]
}Szóval, bármely telefonban szükséges beállítani a helyi időt, a SIP vonalakat. Itt minden egyszerű. További példákat is megnézhetsz .
saját provisioning szerveredet
A gyártó kézikönyvében általában szerepel egy pont, ahol azt mondják: vegyél egy CSV-t, írd be a bejelentkezési nevet, jelszót, MAC-címet, a saját szkripteinkkel generálj fájlokat, helyezd azokat Apache webszerver alá, és minden rendben lesz.
A kézikönyv következő pontjában általában arról is szó esik, hogy a generált konfigurációs fájl titkosítható.
De ez mind klasszikus. A modern megközelítés a smoothie-kal és a Twitterrel azt mondja, hogy készíteni kell egy egyszerű webszervert, amely nem olyan erőteljes, mint az Apache, hanem csak egy apró feladatot fog végezni: konfigurációk létrehozása és szolgáltatása link alapján.
Itt álljunk meg, és emlékezzünk arra, hogy szinte minden SIP-telefon most már képes HTTP/HTTPS-en keresztül beszerezni a konfigurációkat, ezért más megvalósításokat (FTP, TFTP, FTPS) nem vizsgálunk. Emellett minden telefon ismeri a saját MAC-címét. Így két hivatkozást készítünk: egy személyeset — az eszköz kulcsa alapján, a másik egy általános, amely a közös token és a MAC-cím kombinációján működik.
A nullakonfigurációval, azaz a telefon "nulláról" történő beállításával nem fogok foglalkozni, azaz csak bedugtad a hálózatba, és már működik. Nem, az én forgatókönyvemben először bedugod a hálózatba, elvégezheted az előzetes beállítást (beállítottad, hogy a konfigurációt a provisioning szervertől kérje), majd iszogatsz egy piña coladát, és úgy állítod be a telefont, ahogyan szükséges a provisioning segítségével. Az Option 66 kiadása a DHCP-szerver feladata.
Egyébként nagyon belefáradtam a "provisioning" szót mondani, így ezt a szót lerövidítettem "provizs”-ra, kérlek, ne rugdossátok.
A provisioning szerverünknek nincs UI-ja, azaz felhasználói felülete. Lehet, hogy lesz, de nem biztos, mivel nekem erre nincs szükségem. Viszont van API a beállítások mentésére/törlésére, a támogatott gyártók és modellek listájának megszerzésére, minden a swagger specifikáció szerint van leírva.
Miért API, és nem UI? Mivel már van saját telefonos rendszerem, van egy hitelesítési adatok forrásom, ahonnan elegendő ezeket az adatokat összegyűjteni, a szükséges JSON-t összerakni és közzétenni a provisioning szerveren. A provisioning szerver pedig a JSON-fájlban megadott szabályok szerint adja ki a megfelelő eszköz konfigurációját, vagy nem adja ki, ha az eszköz nem megfelelő vagy nem felel meg a megadott kritériumoknak szintén ebben a JSON-ban.

Ilyen lett a provisioning mikroszolgáltatásunk. A neve , a forráskód elérhető a GitHubon, emellett van egy , példa a Docker használatára .
Kulcsfontosságú jellemzők:
bármilyen esetben időkorlátos hozzáférés a konfigurációhoz, alapértelmezés szerint 10 perc. Ha még egyszer el szeretnéd érni a konfigurációt — újra kell közzétenni a konfigurációt.
egyforma formátum minden gyártó számára, minden beállítás a sonata-ban van, és egy szabványosított JSON-t küldesz, amellyel bármilyen elérhető berendezést beállíthatsz.
minden kiadott konfiguráció az eszközök számára naplózva van, minden problémás helyet meg lehet nézni a naplóban és láthatók a hibák.
Egy közös link tokennel használható, minden telefon megkapja a saját konfigurációját, ha a MAC-címet megadjuk. Vagy egy személyre szabott linket a kulcs alapján.
Az API a telefonok konfigurációjának kezelésére (management) és kiadására (provisioning) portok szerint van elválasztva.
Tesztelés. Számomra nagyon fontos volt rögzíteni a kiadott konfiguráció formátumát, és minden szokásos konfigurálási helyzetet tesztekkel lefedni. Hogy minden világosan működjön.
Hátrányok:
Jelenleg nincs titkosítás a sonata keretein belül. Tehát természetesen elkezdheti használni a https-t, például az nginx telepítésével a sonata elé. De a hivatalos módszerek egyelőre még nincsenek alkalmazva. Miért? A projekt még fiatal, alig az első száz eszköz került beüzemelésre. És természetesen gyűjtöm az ötleteket, a visszajelzéseket. Továbbá, hogy mindent biztonságosan csináljunk, hogy a konfigurációk ne legyenek lehallgathatók a hálózaton, valószínűleg érdemes lenne kulcsokkal, tls-sel és hasonlókkal foglalkozni, de ez egy folytatás.
UI hiánya. Ez talán jelentős hátrány a végfelhasználó számára, de a rendszergazda számára inkább a konzolos eszköz fontos, mint egy teljes értékű alkalmazás. A konzolos eszköz készítése a tervben volt, de nem vagyok benne biztos, hogy szükséges-e?
Mi az összefoglaló?
Kis és egyszerű webszerver több telefonmodell provisioningjára API-val a kezeléshez.
Még egyszer, hogyan kellene ennek működnie?
- Telepítjük a sonata-t.
- Létrehozzuk a json konfigurációt, és közzétesszük a sonata-n.
- Ezután kapunk a sonata-tól egy linket a provisioninghoz.
- Ezt a linket megadjuk a telefonkészüléken.
- A készülék letölti a konfigurációt.
A későbbi használat során csak két lépés:
- Létrehozzuk a json konfigurációt, és közzétesszük a sonata-n.
- A készülék letölti a konfigurációt.
Milyen telefonokat provizionálunk?
A Grandstream, Fanvil és Yealink gyártók. A konfigurációk ezen gyártók számára többé-kevésbé azonosak, de eltérhetnek a firmware-től függően — lehet, hogy további tesztelés szükséges.
Milyen szabályokat lehet beállítani?
Idő alapján. Megadhatja az időt, ameddig a konfiguráció elérhető lesz.
MAC-cím alapján. Személyre szabott link alapján a konfiguráció átadása során a készülék MAC-címét is ellenőrzik.
IP cím alapján. Az IP-címre, ahonnan a kérést tették.
Hogyan lépjünk kapcsolatba a sonata-val?
API-n keresztül, http kérések végrehajtásával. Az API elérhető lesz az Ön telepítésében. Mivel az API támogatja a swagger specifikációt, érdemes használni a tesztkérésekhez az API-hoz.
Oké, nagyszerű. Jól néz ki, hogyan próbálhatom ki?
A legkönnyebb docker képet telepíteni egy repository alapjaira . A repository tartalmazza a telepítési útmutatót.
А если знаю node.js?
Ha van tapasztalata a JavaScript használatában, gyorsan megérti, hogyan működik itt minden.
Lesz fejlesztés a sonata-n?
Részben elértem a céljaimat. A további fejlesztés a telefonok beállításának automatizálásával kapcsolatos feladataim kérdése. Még van lehetőség a telefon gombok beállításának konfigurációinak bővítésére, címjegyzékek provisioning címek hozzáadására, esetleg még valami másra, írjon a megjegyzésekbe.
Összegzés és köszönetnyilvánítás
Örömmel várom a konstruktív javaslatokat/visszajelzéseket/megjegyzéseket és kérdéseket, mivel lehet, hogy van valami, amit nem érthetően írtam le.
Köszönetet mondok minden kollégának, aki segített, tanácsolt, tesztelt, telefonokat biztosított/ajándékozott a teszteléshez. Valóban, a projekthez számos ember kapcsolódik különböző mértékben, akikkel munkám során, a ‘e, csevegésekben és e-mailekben beszélgettem. Köszönöm az ötleteket és gondolatokat.
Forrás: habr.com
