Sonata: server di provisioning SIP

Non so con cosa confrontare il provisioning. Magari con un gatto? Sembra possibile senza, ma con esso è un po’ meglio. Soprattutto se funziona))

Formulazione del problema:

  1. Desidero configurare i telefoni SIP in modo rapido, semplice e sicuro. Quando si installa un telefono e ancora di più quando lo si riconfigura.
  2. Molti fornitori hanno i propri formati di configurazione, le proprie utilità per generare configurazioni e i propri modi per proteggere le configurazioni. E non voglio davvero avere a che fare con tutti.
  3. Molte soluzioni di provisioning, a) si concentrano su un fornitore o un sistema telefonico, b) sono piuttosto complicate da implementare, molti script, parametri, brrr...

Per quanto riguarda il punto 3, farò un commento sul fatto che esistono ottimi sistemi di provisioning per PBX gratuito, per FusionPBX, per Kazoo, dove i modelli per telefoni di vari fornitori sono disponibili pubblicamente. Esistono soluzioni commerciali in cui è possibile configurare anche il funzionamento di telefoni di diversi produttori nel modulo di provisioning, ad esempio il centralino Yeastar.

Habré è anche pieno di ricette su come configurare dispositivi di vari fornitori: tempo, два. Ma come si suol dire, tutti i sistemi hanno un difetto fatale. Quindi costruiremo la nostra bicicletta.

il tuo formato

Come si dice in xkcd, se non vuoi avere a che fare con 14 formati - vieni con il 15. Pertanto, utilizziamo le impostazioni generali per qualsiasi telefono e creiamo il nostro formato di configurazione json.

Qualcosa come questo:

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

Quindi, in qualsiasi telefono è necessario configurare l'ora locale e le linee SIP. Tutto è semplice qui. Puoi vedere più esempi qui.

il provisioning del tuo server

Nei manuali del produttore di solito c'è un punto in cui si dice: prendi un CSV, scrivi il tuo login-password-indirizzo mac, genera file usando il nostro script proprietario, inseriscili nel server web Apache e tutto andrà bene.

Il paragrafo successivo del manuale di solito ti dice che puoi anche crittografare il file di configurazione generato.

Ma questi sono tutti classici. L'approccio moderno con frullati e Twitter afferma che è necessario creare un server Web già pronto che non sarà potente come Apache, ma farà solo una piccola cosa. Genera e invia configurazioni utilizzando un collegamento.

Fermiamoci qui e ricordiamo che ormai quasi tutti i telefoni SIP possono ricevere configurazioni tramite http/https, quindi non consideriamo altre implementazioni (ftp, tftp, ftps). Quindi, ogni telefono conosce il proprio indirizzo MAC. Pertanto, creeremo due collegamenti: uno personale, basato sulla chiave del dispositivo, il secondo generale, che funziona utilizzando una combinazione di un token comune e un indirizzo MAC.

Inoltre, non mi soffermerò su zero-config, ad es. configurare il telefono da zero, ad es. l'hai collegato alla rete e ha iniziato a funzionare. No, nel mio scenario, lo colleghi alla rete, esegui la configurazione preliminare (configuralo per ricevere la configurazione dal server di provisioning), quindi bevi pina colada e riconfigura il telefono secondo necessità durante il provisioning. La distribuzione dell'Opzione 66 è responsabilità del server DHCP.

A proposito, sono completamente stanco di dire “provisioning”, quindi la parola è stata abbreviata in “provisioning”, per favore non prendetemi a calci.

E ancora una cosa: il nostro server di provisioning non ha un'interfaccia utente, ad es. interfaccia utente. Forse per ora, ma non ne sono sicuro, perché... Non ne ho bisogno. Ma esiste un'API per salvare/eliminare le impostazioni, ottenere un elenco di fornitori e modelli supportati, tutto è descritto secondo i canoni delle specifiche swagger.

Perché API e non UI? Perché Ho già un mio sistema telefonico, poi ho una fonte di credenziali, dove mi basta prendere questi dati, compilare il json necessario e pubblicarlo sul server di provisioning. E il server di provisioning, secondo le regole specificate nel file json, fornirà al dispositivo richiesto la sua configurazione o non la fornirà se il dispositivo non è corretto o non soddisfa i criteri specificati anche in questo json.

Sonata: server di provisioning SIP

Ecco come è risultato il microservizio di provisioning. Chiamato sonata, il codice sorgente è disponibile su GitHub, c'è anche immagine della finestra mobile pronta, esempio di utilizzo della finestra mobile qui.

Caratteristiche principali:

  • in ogni caso accesso limitato alla configurazione per tempo, per impostazione predefinita 10 minuti. Se desideri rendere nuovamente disponibile la configurazione, ripubblicala nuovamente.

  • un formato per tutti i fornitori, tutte le modifiche vengono rimosse in Sonata, si invia JSON standardizzato, si configura qualsiasi apparecchiatura disponibile.

  • tutte le configurazioni inviate ai dispositivi vengono registrate, tutte le aree problematiche possono essere visualizzate nel registro e gli errori possono essere visualizzati

  • È possibile utilizzare un collegamento comune con un token; ogni telefono riceve la propria configurazione specificando l'indirizzo mac. Oppure un collegamento personale tramite chiave.

  • Le API per la gestione (gestione) e il provisioning delle configurazioni sui telefoni (provisioning) sono divise per porte

  • Test. Per me è stato molto importante correggere il formato della configurazione emessa e coprire tutte le solite situazioni di emissione di una configurazione con test. In modo che tutto funzioni chiaramente.

contro:

Finora, la crittografia non è stata utilizzata in alcun modo all'interno di Sonata. Quelli. ovviamente puoi iniziare a usare https mettendo, ad esempio, nginx davanti a sonata. Ma i metodi proprietari non sono ancora stati utilizzati. Perché? Il progetto è ancora giovane, ha lanciato i suoi primi cento dispositivi. E, naturalmente, raccolgo idee e feedback. Inoltre, per rendere tutto sicuro, in modo che le configurazioni non possano essere sniffate sulla rete, probabilmente vale la pena preoccuparsi delle chiavi di crittografia, tls e il riccio con esse, ma questa sarà una continuazione.

Mancanza di interfaccia utente. Forse questo è uno svantaggio significativo per l'utente finale, ma per un amministratore di sistema l'utilità della console è più importante di un'applicazione a tutti gli effetti. C'erano piani per creare un'utilità per la console, ma non sono sicuro che sia necessaria?

Il risultato?

Un piccolo e semplice server web per il provisioning di diversi modelli di telefoni con un'API per la gestione.

Ancora una volta, come dovrebbe funzionare?

  1. Installazione di sonata.
  2. Creiamo una configurazione json e la pubblichiamo in sonata.
  3. Quindi riceviamo un collegamento di provisioning da sonata.
  4. Quindi indichiamo questo collegamento nel telefono.
  5. Il dispositivo sta caricando la configurazione

Ci sono solo due passaggi nell'operazione successiva:

  1. Creiamo una configurazione json e la pubblichiamo in sonata
  2. Il dispositivo sta caricando la configurazione

Quali telefoni verranno promossi?

Fornitori Grandstream, Fanvil, Yealink. Le configurazioni del fornitore sono più o meno le stesse, ma potrebbero differire a seconda del firmware: potrebbe essere necessario eseguire ulteriori test.

Quali regole puoi impostare?

Col tempo. È possibile specificare l'orario fino al quale la configurazione sarà disponibile.
Per indirizzo mac. Quando si invia la configurazione tramite il collegamento personale del dispositivo, verrà controllato anche l'indirizzo mac.
Di ip. Per indirizzo IP da cui è stata effettuata la richiesta.

Come interagire con la sonata?

Tramite API, effettuando richieste http. L'API sarà disponibile nella tua installazione. Perché L'API supporta la specifica spavalderia che puoi utilizzare utilità in linea per richieste di test all'API.

Ok fantastico. Roba interessante, che ne dici di provarla?

Il modo più semplice è distribuire un'immagine docker basata su un repository campione-sonata. Il repository contiene le istruzioni di installazione.

Cosa succede se conosco node.js?

Se hai esperienza nell'uso di JavaScript, capirai rapidamente come funziona tutto qui.

Ci sarà uno sviluppo di Sonata?

Ho parzialmente raggiunto i miei obiettivi. L'ulteriore sviluppo è una questione dei miei compiti sul tema dell'automazione della configurazione del telefono. C'è anche la possibilità di espandere le configurazioni per configurare i pulsanti del telefono, aggiungere il provisioning della rubrica, forse qualcos'altro, scrivi nei commenti.

Sintesi e ringraziamenti

Sarò felice di avere suggerimenti/obiezioni/commenti e domande costruttive, perché... Può darsi che abbia descritto qualcosa di incomprensibile.

Esprimo inoltre la mia gratitudine a tutti i miei colleghi che hanno aiutato, consigliato, testato e fornito/donato telefoni per i test. In realtà molte persone con cui ho comunicato al lavoro sono coinvolte a vario titolo nel progetto, AsterConf'e, nelle chat e nelle e-mail. Grazie per le idee e i pensieri.

Fonte: habr.com

Aggiungi un commento