Sonata - сървър за осигуряване на SIP

Не знам с какво да сравня осигуряването. Може би с котка? Изглежда възможно без него, но с него е малко по-добре. Особено ако работи))

Формулиране на проблема:

  1. Искам да настроя SIP телефони бързо, лесно и безопасно. При инсталиране на телефон и още повече при преконфигурирането му.
  2. Много доставчици имат свои собствени конфигурационни формати, собствени помощни програми за генериране на конфигурации и свои собствени начини за защита на конфигурации. И наистина не искам да се занимавам с всички.
  3. Много решения за осигуряване, а) са фокусирани върху един доставчик или една телефонна система, б) са доста тромави за внедряване, много скриптове, параметри, brrr...

Относно точка 3 ще направя коментар, че има отлични системи за осигуряване за FreePBX, за FusionPBX, за Kazoo, където шаблоните за телефони от различни доставчици са публично достъпни. Има търговски решения, при които можете също да конфигурирате работата на телефони от различни производители в модула за осигуряване, например Yeastar PBX.

Habré също е пълен с рецепти как да настроите устройства от различни доставчици: път, два. Но както се казва, всички системи имат фатален недостатък. Така че ще направим наш собствен велосипед.

вашият собствен формат

Както се казва в xkcd, ако не искате да се занимавате с 14 формата - излезе с 15-то. Затова използваме общи настройки за всеки телефон и създаваме наш собствен json конфигурационен формат.

Нещо като това:

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

Така че във всеки телефон трябва да конфигурирате местно време и SIP линии. Тук всичко е просто. Можете да видите още примери тук.

вашето собствено обезпечаване на сървъра

В ръководствата на производителя обикновено има точка, където се казва: вземете csv, запишете вашия вход-парола-mac-адрес, генерирайте файлове с помощта на нашия собствен скрипт, поставете ги под уеб сървъра на Apache и всичко ще бъде наред.

Следващият параграф от ръководството обикновено ви казва, че можете също да шифровате генерирания конфигурационен файл.

Но това са всички класики. Модерният подход със смутитата и Twitter казва, че трябва да направите готов уеб сървър, който няма да е толкова мощен, колкото Apache, а ще прави само едно малко нещо. Генериране и изпращане на конфигурации чрез връзка.

Нека спрем до тук и не забравяйте, че почти всички SIP телефони вече могат да получават конфигурации чрез http/https, така че не обмисляме други реализации (ftp, tftp, ftps). След това всеки телефон знае своя MAC адрес. Затова ще направим две връзки: една лична - въз основа на ключа на устройството, втората обща, която работи с помощта на комбинация от общ токен и MAC адрес.

Също така няма да се спирам на zero-config, т.е. настройка на телефона от нулата, т.е. включихте го в мрежата и той започна да работи. Не, в моя сценарий го включвате в мрежата, правите предварителната настройка (настройвате го да получава конфигурацията от сървъра за осигуряване), след което пиете пина колада и преконфигурирате телефона според нуждите чрез осигуряването. Опция 66 за разпространение е отговорност на DHCP сървъра.

Между другото, напълно ми омръзна да казвам „осигуряване“, така че думата беше съкратена на „осигуряване“, моля, не ме ритайте.

И още нещо: нашият сървър за осигуряване няма потребителски интерфейс, т.е. потребителски интерфейс. Може би засега, но не съм сигурен, защото... не ми трябва. Но има API за запазване/изтриване на настройки, получаване на списък с поддържани доставчици, модели, всичко е описано според каноните на спецификацията на swagger.

Защо API, а не UI? защото Вече имам собствена телефонна система, след това имам източник на идентификационни данни, където просто трябва да взема тези данни, да компилирам необходимия json и да го публикувам на сървъра за осигуряване. И сървърът за осигуряване, съгласно правилата, посочени в json файла, ще даде на необходимото устройство неговата конфигурация или няма да я даде, ако устройството не е правилно или не отговаря на критериите, посочени също в този json.

Sonata - сървър за осигуряване на SIP

Ето как се оказа микроуслугата за осигуряване. Наречен соната, изходният код е наличен в GitHub, има също готов докер образ, пример за използване на докер тук.

Основни функции:

  • във всеки случай, ограничен достъп до конфигурацията по време, по подразбиране 10 минути. Ако искате отново да направите конфигурацията достъпна, публикувайте отново конфигурацията.

  • един формат за всички доставчици, всички настройки се премахват в sonata, изпращате стандартизиран json, конфигурирате всяко налично оборудване.

  • всички конфигурации, издадени на устройства, се регистрират, всички проблемни области могат да се видят в журнала и могат да се видят грешки

  • Възможно е да се използва една обща връзка с токен; всеки телефон получава своя собствена конфигурация чрез посочване на mac адреса. Или лична връзка чрез ключ.

  • API за управление (управление) и осигуряване на конфигурации към телефони (осигуряване) са разделени по портове

  • Тестове. За мен беше много важно да коригирам формата на издадената конфигурация и да покрия всички обичайни ситуации на издаване на конфигурация с тестове. Така че всичко това да работи ясно.

против:

Досега криптирането не се използва по никакъв начин в Sonata. Тези. можете, разбира се, да започнете да използвате https, като поставите nginx пред sonata например. Но патентованите методи все още не са използвани. Защо? Проектът е все още млад, той пусна първите си сто устройства. И, разбира се, събирам идеи и отзиви. Освен това, за да бъде всичко сигурно, така че конфигурациите да не могат да бъдат надушени в мрежата, вероятно си струва да се занимавате с ключове за криптиране, tls и таралежа с тях, но това ще бъде продължение.

Липса на потребителски интерфейс. Може би това е значителен недостатък за крайния потребител, но за системния администратор конзолната помощна програма е по-важна от пълноценно приложение. Имаше планове да се направи помощна програма за конзола, но не съм сигурен дали е необходима?

Какъв е резултатът?

Малък и прост уеб сървър за осигуряване на няколко модела телефони с API за управление.

Още веднъж, как трябва да работи това?

  1. Инсталиране на соната.
  2. Ние създаваме json конфигурация и я публикуваме в sonata.
  3. След това получаваме връзка за осигуряване от sonata.
  4. След това посочваме тази връзка в телефона.
  5. Устройството зарежда конфигурацията

Има само две стъпки в последващата операция:

  1. Създаваме json конфигурация и я публикуваме в sonata
  2. Устройството зарежда конфигурацията

Кои телефони ще бъдат рекламирани?

Доставчици Grandstream, Fanvil, Yealink. Конфигурациите в рамките на доставчика са повече или по-малко еднакви, но може да се различават в зависимост от фърмуера - може да е необходимо да се тества допълнително.

Какви правила можете да зададете?

По време. Можете да посочите времето, до което конфигурацията ще бъде достъпна.
По mac адрес. При изпращане на конфигурацията чрез личната връзка на устройството, mac адресът също ще бъде проверен.
По ip. По IP адрес, от който е направена заявката.

Как да взаимодействаме със Sonata?

Чрез API, правейки http заявки. API ще бъде наличен във вашата инсталация. защото API поддържа спецификацията на swagger, можете да използвате онлайн помощна програма за тестови заявки към API.

ОК страхотно. Готини неща, какво ще кажете да опитате?

Най-лесният начин е да разположите докер изображение, базирано на хранилище соната-образец. Хранилището съдържа инструкции за инсталиране.

Ами ако знам node.js?

Ако имате опит с използването на JavaScript, тогава бързо ще разберете как работи всичко тук.

Ще има ли развитие на Sonata?

Отчасти постигнах целите си. По-нататъшното развитие е въпрос на моите задачи по темата за автоматизиране на настройката на телефона. Има и възможност за разширяване на конфигурациите, за да конфигурирате бутоните на телефона, да добавите предоставяне на адресна книга, може би нещо друго, напишете в коментарите.

Резюме и благодарности

Ще се радвам на градивни предложения/възражения/коментари и въпроси, защото... Може да се окаже, че е описал нещо неразбираемо.

Изказвам благодарност и на всички колеги, които помогнаха, посъветваха, тестваха и предоставиха/дариха телефони за тестове. В действителност много хора, с които общувах по време на работа, участват в проекта в различна степен, AsterConf'e, в чатове и имейли. Благодаря за идеите и мислите.

Източник: www.habr.com

Добавяне на нов коментар