Zoo VoIP — Provisioning

Introduzione

Un giorno la direzione ha approvato un esperimento per l'introduzione della telefonia IP nella nostra azienda. Poiché la mia esperienza in questo campo era minima, il compito ha suscitato in me un enorme interesse e mi sono immerso nello studio di vari aspetti della questione. Alla fine di questo approfondimento, ho deciso di condividere le conoscenze acquisite, nella speranza che possano essere utili a qualcuno. Quindi…

Dati di origine

Come centrale telefonica IP è stato scelto e implementato Asterisk. Il parco telefoni è composto da dispositivi Cisco 7906g, Panasonic UT-KX123B, Grandstream GXP1400 e Dlink DPH-150S(E)/F3, Yealink T19 e T21. Tale varietà è dovuta al fatto che nell'ambito dell'esperimento è stata presa la decisione di provare un po' di tutto, per formare un'opinione sul rapporto qualità/prezzo/comodità.

Compito

Massimizzare la semplificazione e l'unificazione del processo di configurazione di nuovi dispositivi. Tutti i telefoni devono essere sincronizzati nel tempo, avere una rubrica telefonica, caricabile da сервера e fornire accesso alle impostazioni per l'amministratore.

La soluzione a questo problema è semplice: implementare la configurazione automatica dei telefoni, il cosiddetto Provisioning. Di fatto, parlerò della mia implementazione di questa meravigliosa funzione.

Configurazione di tftpd, dhcpd

Per la distribuzione delle impostazioni ai telefoni ho scelto tftp come opzione universale, supportata da tutte le piattaforme, facile da configurare e gestire.

Non è stata necessaria alcuna configurazione specifica per tftp. Ho installato tftpd di default e ho posizionato tutti i file necessari nella sua directory principale.
Ho posizionato i file di configurazione in cartelle in base al produttore del telefono. Tuttavia, il dispositivo Cisco non è mai riuscito ad accedere alla propria cartella, quindi ho dovuto conservarli nella radice.

Per indicare ai telefoni la posizione del server tftp, ho utilizzato l'opzione 66. Inoltre, li ho suddivisi in classi separate per produttore. Ogni classe ha ricevuto un proprio segmento di indirizzi e una cartella individuale per i file di configurazione. A proposito, per i dispositivi D-link ho dovuto calcolare gli indirizzi MAC, poiché non forniscono informazioni sul produttore nella richiesta dhcp.

Un frammento di dhcpd.conf

# Указываем необходимые опции 
option option-66 code 66 = text;

class "panasonic" {
	match if substring (option vendor-class-identifier,0,9) = "Panasonic";
	option option-66 "10.1.1.50/panasonic/";
}
class "cisco" {
	match if substring (option vendor-class-identifier,0,36) = "Cisco Systems, Inc. IP Phone CP-7906";
	option option-66 "10.1.1.50/cisco/";
}

class "grandstream" {
 match if substring (option vendor-class-identifier,0,11) = "Grandstream";
 option option-66 "10.1.1.50/grandstream/";
}

class "dlink" {
	match if (binary-to-ascii (16,8,":",substring(hardware,1,4)) = "c8:d3:a3:8d") or
	(binary-to-ascii (16,8,":",substring(hardware,1,4)) = "90:94:e4:72");
	option option-66 "10.1.1.50/dlink/";
}

class "yealink" {
                match if substring (option vendor-class-identifier,0,7) = "Yealink";
                option option-66 "10.1.1.50/yealink/";
        }

I telefoni hanno dovuto essere esclusi forzatamente dal pool generale. Altrimenti, non volevano assolutamente andare nel loro "stagno di rane".
Esempio di configurazione della sottorete

subnet 10.1.1.0 netmask 255.255.255.0 {
        option routers 10.1.1.1;
        pool {
                deny members of "cisco";
                deny members of "panasonic";
                deny members of "dlink";
                range 10.1.1.230 10.1.1.240;
        }
        pool {
                allow members of "cisco";
                range 10.1.1.65 10.1.1.69;
        }
        pool {
                allow members of "panasonic";
                range 10.1.1.60 10.1.1.64;
        }
        pool {
                allow members of "dlink";
                range 10.1.1.55 10.1.1.59;
        }
}

Dopo il riavvio di tutti i servizi coinvolti, i telefoni hanno iniziato a cercare con fiducia le impostazioni sul loro server TFTP. Mancava solo di posizionarli lì.

Cisco 7906

Questi dispositivi mi sono arrivati in confezione originale. Ho dovuto riprogrammarli per farli funzionare con Asterisk. Ma questa è un'altra storia. In questo caso, per configurare il dispositivo, ho creato nel root del server TFTP il file SEPAABBCCDDEEFF.cnf.xml, dove AABBCCDDEEFF è l'indirizzo MAC del dispositivo.

Di configurazioni per i telefoni Cisco se ne è già parlato più volte, quindi lascerò semplicemente il file di configurazione funzionante.
Impostazioni per cisco

true
 SIP
 root
 ADMIN_PWD

 
 D-M-Y
 Central Pacific Standard Time
     
         
             10.1.1.4
              Unicast
          
     
 

   
 10.1.1.50
 
 2000
 5060
 5061
 
 10.1.1.50
   
 

 Disable


120
 

 
 true
 x-cisco-serviceuri-cfwdall
 x-cisco-serviceuri-pickup
 x-cisco-serviceuri-opickup
 x-cisco-serviceuri-gpickup
 x-cisco-serviceuri-meetme
 x-cisco-serviceuri-abbrdial
 false
 2
 true
 true
 2
 2
 0
 true
 false
 
 
 6
 10
 180
 3600
 5
 120
 120
 5
 500
 4000
 70
 true
 None
 
1
 false
 true
 false
 false
 none
 101
 3
avt
 3
 false
 false
 Cisco Phone
 2
 false
 15000
10
 true
 false
 16384
 32766

 
 9
 10.1.1.50
 5060
  2 
 3
 false
 3
 
 4
 5
 
 true
 true
 false
 true
 

 User #103
 103
 103
 SIP_PWD
 
 
$num
5060
 184
 0
 dialplan.xml
 

 *0#
 true
 2
 


 false
 false
 1
 0
 1
 0
 0
 0
 1
 0
 1,7
 09:00
 12:00
 01:00
 1
 2
 10.1.1.50
 0
 100
 50
 
 0
 0
 5
 1
 10.1.1.50
 0
 0
 0
 0
 0
 0
 1
 1
 
1143565489-a3cbf294-7526-4c29-8791-c4fce4ce4c37

 Russian_Russian_Federation
 ru_RU
 
 utf-8
 

 
 
 
 
1
 0
 
 http://10.1.1.50/provisioning/cisco-services.xml
 
 
 
 
 http://10.1.1.50/provisioning/cisco-services.xml
 96
 0
 96
 2
 0
 0
 
 3804
 <!-- 10.1.1.50 -->
  

 false
 1

D-Link DPH-150S/F3

Se stai per acquistare un telefono di questa serie, fai attenzione, la configurazione automatica è supportata solo nei dispositivi 150S/F3. Nel dispositivo 150S/F2, che ho avuto in mano, non ho trovato questa funzionalità.

Il file di configurazione può essere sia nel formato xml che in formato testo standard. Per l'xml c'è un requisito: il tag deve essere all'inizio della riga, altrimenti il parser lo ignorerà e il valore del parametro corrispondente non verrà modificato.

Per la configurazione del telefono si utilizzano due file. f0D00580000.cfg — per memorizzare le impostazioni di tutti i telefoni e 00112233aabb.cfg (l'indirizzo MAC in minuscolo) per le impostazioni individuali. Le impostazioni individuali, ovviamente, hanno una priorità maggiore.

L'insieme completo delle impostazioni conta più di mille righe; per non appesantire l'articolo, descriverò il set minimo di impostazioni necessario.

Obbligatori sono il nodo radice VOIP_CONFIG_FILE e il nodo annidato version. Le impostazioni verranno applicate solo se la versione del file è superiore a quella delle attuali impostazioni nell'apparecchio. È possibile conoscere questo valore tramite l'interfaccia web del telefono nella sezione della manutenzione (gestione di sistema). Per i telefoni con impostazioni di fabbrica, in entrambi i casi, è 2.0002. Inoltre, la versione del file individuale deve essere superiore alla versione del file comune.

Per prima cosa, fornirò il file con la configurazione generale per tutti i telefoni. In sostanza, contiene tutte le impostazioni, mentre il file individuale risponderà solo al numero di telefono e alla scritta sullo schermo.

Nei due blocchi riportati sotto, si impostano i parametri del fuso orario e della sincronizzazione dell'orario, la porta iniziale per RTP e si attiva il bridge di rete tra le porte WAN e LAN dell'apparecchio.

Fragmento №1

DHCP
2
1
1
0
VOIP
10000
200
10.1.1.4
1


0
60
12
1500


1
1

I nomi dei parametri di configurazione sono abbastanza chiari da non richiedere una descrizione dettagliata.
SIP per una linea

5060


SIP1
10.1.1.50
5060
3600
1
10.1.1.50
1
0
G711A,G711U,G722

Impostazioni di gestione remota

23
80
0
443
1
0



Item1
10.1.1.152
10.1.1.160




Account1
admin
ADMIN_PWD
10


Account2
guest
GUEST_PWD
5

Impostazioni del telefono

123
123

0
112
Azienda
5
1
30
0

1
0,,1
0
0
1


XML-PBook1
Rubrica
http://10.1.1.50/provisioning/dlink-phonebook.xml
:
0
0


amico,casa,lavoro,affari,compagno,collega

Tutte le altre impostazioni rimarranno «di default». Ora qualsiasi telefono Dlink connesso alla rete assumerà immediatamente il set di parametri comune a tutti. Per impostare parametri individuali per il dispositivo è necessario un file separato. In esso è sufficiente indicare solo le impostazioni necessarie per il singolo abbonato.
impostazioni dell'abbonato

2.0006



SIP1
Utente #117
117
5060
117
SIP_PWD
3600
1
5060
117
SIP_PWD

Panasonic UT-KX123B

Questi dispositivi ricevono configurazioni in modo leggermente diverso. La configurazione è memorizzata in file di testo. La dimensione massima del file di configurazione è di 120 KB. Indipendentemente dal numero di file, la loro dimensione complessiva non deve superare i 120 KB.
Il file di configurazione è composto da un insieme di righe, su cui si applicano le seguenti condizioni:

  • La prima riga è sempre un commento, contenente la seguente sequenza di caratteri (44 byte):
    # Panasonic SIP Phone Standard Format File #
    Rappresentazione esadecimale di questa sequenza:
    23 20 50 61 6E 61 73 6F 6E 69 63 20 53 49 50 20 50 68 6F 6E 65 20 53 74 61 6E 64 61 72 64 20 46 6F 72 6D 61 74 20 46 69 6C 65 20 23
    Per evitare modifiche accidentali alla sequenza di caratteri impostata, si consiglia di iniziare il file di configurazione con la riga:
    # Panasonic SIP Phone Standard Format File # DO NOT CHANGE THIS LINE!
  • I file di configurazione devono terminare con una riga vuota.
  • Ogni riga deve terminare con la sequenza "".
  • La lunghezza massima di una riga è di 537 byte, compresa la sequenza "".
  • Le seguenti righe vengono ignorate:
    • righe che superano il limite di 537 byte;
    • righe vuote;
    • righe di commento che iniziano con il simbolo "#";
  • La riga di ogni parametro è registrata nella forma XXX="yyy" (XXX: nome del parametro, yyy: suo valore). Il valore deve essere racchiuso tra virgolette doppie.
  • La suddivisione di una riga di parametri in più righe non è consentita. Ciò porterà a un errore nell'elaborazione del file di configurazione e, di conseguenza, a un errore di inizializzazione.
  • I valori di alcuni parametri devono essere specificati separatamente per ogni linea. Un parametro con il suffisso "_1" nel nome è un parametro per la linea 1; "_2" è per la linea 2 e così via.
  • La lunghezza massima del nome del parametro è di 32 caratteri.
  • La lunghezza massima del valore del parametro è di 500 caratteri, escluse le virgolette.
  • Gli spazi nella stringa non sono consentiti, tranne nei casi in cui il valore include il carattere di spazio.
  • I valori di alcuni parametri possono essere specificati come "vuoti" per impostare un valore vuoto del parametro.
  • I parametri possono essere specificati in qualsiasi ordine.
  • Se lo stesso parametro è specificato nel file di configurazione più di una volta, viene utilizzato il valore specificato per primo.

Un insieme di requisiti così rigoroso per il file di configurazione mi ha sinceramente deluso. A mio avviso, l'interazione con server il sistema di gestione dei telefoni Panasonic è estremamente scomoda. In questo parametro, il telefono è significativamente inferiore agli altri.
Al primo avvio del dispositivo (o dopo un ripristino alle impostazioni di fabbrica), esso prova a caricare il cosiddetto file prodotto (in questo caso KX-UT123RU.cfg), che deve contenere i percorsi degli altri file di configurazione.
File prodotto# Panasonic SIP Phone Standard Format File # DO NOT CHANGE THIS LINE!

CFG_STANDARD_FILE_PATH="tftp://10.1.1.50/panasonic/{mac}.cfg"
CFG_PRODUCT_FILE_PATH="tftp://10.1.1.50/panasonic/KX-UT123RU.cfg"
CFG_MASTER_FILE_PATH="tftp://10.1.1.50/panasonic/master.cfg"

Dopo questo, il telefono visualizzerà un messaggio di successo e attenderà fino a quando non verrà riavviato. Solo dopo il riavvio inizierà a elaborare i file di configurazione assegnati.

Nel file master.cfg è consigliato specificare le impostazioni comuni per tutti i telefoni. Come nel caso di Dlink, indicherò solo alcuni parametri. I nomi degli altri parametri e i loro valori possono essere trovati nella documentazione sul sito del produttore.
master.cfg############################################################
# System Settings #
############################################################
## Login Account Settings
ADMIN_ID=«admin»
ADMIN_PASS=«ADMIN_PWD»
USER_ID=«user»
USER_PASS=«USER_PWD»

## System Time Settings
NTP_ADDR=«10.1.1.4»
TIME_ZONE=«660»
DST_ENABLE=«N»
DST_OFFSET=«60»
DST_START_MONTH=«3»
DST_START_ORDINAL_DAY=«2»
DST_START_DAY_OF_WEEK=«0»
DST_START_TIME=«120»
DST_STOP_MONTH=«10»
DST_STOP_ORDINAL_DAY=«2»
DST_STOP_DAY_OF_WEEK=«0»
DST_STOP_TIME=«120»
LOCAL_TIME_ZONE_POSIX=""

## Syslog Settings
SYSLOG_ADDR=«10.1.1.50»
SYSLOG_PORT=«514»
SYSLOG_EVENT_SIP=«6»
SYSLOG_EVENT_CFG=«6»
SYSLOG_EVENT_VOIP=«6»
SYSLOG_EVENT_TEL=«6»

## Provisioning Settings
OPTION66_ENABLE=«Y»
OPTION66_REBOOT=«N»
PROVISION_ENABLE=«Y»
CFG_STANDARD_FILE_PATH="tftp://10.1.1.50/panasonic/{mac}.cfg"
CFG_PRODUCT_FILE_PATH="tftp://10.1.1.50/panasonic/KX-UT123RU.cfg"
CFG_MASTER_FILE_PATH="tftp://10.1.1.50/panasonic/master.cfg"

############################################################
# Network Settings #
############################################################
## IP Settings
CONNECTION_TYPE=«1»
HOST_NAME=«UT123»
DHCP_DNS_ENABLE=«Y»
STATIC_IP_ADDRESS=""
STATIC_SUBNET=""
STATIC_GATEWAY=""
USER_DNS1_ADDR=""
USER_DNS2_ADDR=""

## DNS Settings
DNS_QRY_PRLL=«Y»
DNS_PRIORITY=«N»
DNS1_ADDR=«10.1.1.1»
DNS2_ADDR=""

## HTTP Settings
HTTPD_PORTOPEN_AUTO=«Y»
HTTP_VER=«1»
HTTP_USER_AGENT=«Panasonic_{MODEL}/{fwver} ({mac})»
HTTP_SSL_VERIFY=«0»
CFG_ROOT_CERTIFICATE_PATH=""

## XML Application Settings
XML_HTTPD_PORT=«6666»
XMLAPP_ENABLE=«Y»
XMLAPP_USERID=""
XMLAPP_USERPASS=""
XMLAPP_START_URL=""
XMLAPP_INITIAL_URL=" "
XMLAPP_INCOMING_URL=""
XMLAPP_TALKING_URL=""
XMLAPP_MAKECALL_URL=""
XMLAPP_CALLLOG_URL=""
XMLAPP_IDLING_URL=""
XMLAPP_LDAP_URL=«10.1.1.50/provisioning/panasonic-phonebook.xml»
XMLAPP_LDAP_USERID=""
XMLAPP_LDAP_USERPASS=""

Nel file di configurazione individuale del dispositivo, per tradizione, vengono mantenute solo le impostazioni dell'utente.
aabbccddeeff.cfgDISPLAY_NAME_1=«User #168»

PHONE_NUMBER_1=«168»
SIP_URI_1=«168»
LINE_ENABLE_1=«Abilitato»
PROFILE_ENABLE_1=«Abilitato»
SIP_AUTHID_1=«168»
SIP_PASS_1=«SIP_PWD»

Grandstream GXP-1400

Le impostazioni di questi telefoni sono memorizzate in un singolo file xml chiamato cfg{mac}.xml. Oppure in un normale file di testo chiamato cfg{mac}. Questo telefono richiede solo un file di configurazione individuale, quindi non è possibile ottimizzare le impostazioni estraendole in un file comune. Un'altra caratteristica della configurazione dei Grandstream è la denominazione dei parametri. Tutti sono numerati e contrassegnati come P###. Ad esempio:

P1650 – controlla l'interfaccia web per gestire il telefono (0 – HTTPS, 1 – HTTP)
P47 – indirizzo del server SIP per la connessione.

Se la configurazione è memorizzata in un file di testo, i parametri non richiedono alcun raggruppamento e possono essere disposti in qualsiasi ordine. Le righe che iniziano con # vengono considerate commenti.

Nel caso in cui le impostazioni siano in formato xml, devono essere annidate nel nodo , che a sua volta deve essere annidato in . Tutti i parametri sono registrati come tag corrispondenti con il valore del parametro all'interno.
Esempio di configurazione

1
    
    109
    
    109
    
    109
    
    SIP_PWD
    
    User# 109

        10.1.1.50
        2
   10.1.1.50
   0
   ADMIN_PWD
   USER_PWD
   it
        0
        10.1.1.50/grandstream
   1
   TZc-11
   10.1.1.4
        1
        http://10.1.1.50/provisioning/grandstream
        30

Yealink T19 e T21

I dispositivi di questi modelli supportano file di configurazione individuali per i dispositivi e file comuni per i modelli. Nel mio caso, ho dovuto posizionare i parametri comuni nei file y000000000031.cfg e y000000000034.cfg rispettivamente. I file di configurazione individuali sono denominati in base all'indirizzo MAC: 00112233aabb.cfg.

Le impostazioni per i Yealink sono memorizzate in formato di testo. L'unico requisito obbligatorio è la presenza nella prima riga della versione del file, nel formato #!version:1.0.0.1.

Tutti i parametri sono registrati nella forma parametro = valore. I commenti devono iniziare con il simbolo "#". I nomi dei parametri e i loro valori possono essere trovati nella documentazione sul sito del produttore.
impostazioni generali#!version:1.0.0.1
#Configure the WAN port type; 0-DHCP (default), 1-PPPoE, 2-Static IP Address;
network.internet_port.type = 0
#Configure the PC port type; 0-Router, 1-Bridge (default);
network.bridge_mode = 1
#Configure the access type of the web server; 0-Disabled, 1-HTTP & HTTPS(default), 2-HTTP Only, 3-HTTPS Only;
network.web_server_type = 3
#Configure the maximum local RTP port. It ranges from 0 to 65535, the default value is 11800.
network.port.max_rtpport = 10100
#Configure the minimum local RTP port. It ranges from 0 to 65535, the default value is 11780.
network.port.min_rtpport = 10000
security.user_name.admin = root
security.user_password = root:ADMIN_PWD
security.user_name.user = user
security.user_password = user:USER_PWD
#Specify the web language, the valid values are: English, Chinese_S, Turkish, Portuguese, Spanish, Italian, French, Russian, Deutsch and Czech.
lang.wui = Russo
#Specify the LCD language, the valid values are: English (default), Chinese_S, Chinese_T, German, French, Turkish, Italian, Polish, Spanish and Portuguese.
lang.gui = Russo
#Configure the time zone and time zone name. The time zone ranges from -11 to +12, the default value is +8.
#The default time zone name is China(Beijing).
#Refer to Yealink IP Phones User Guide for more available time zones and time zone names.
local_time.time_zone = +11
local_time.time_zone_name = Vladivostok
#Configure the domain name or the IP address of the NTP server. The default value is cn.pool.ntp.org.
local_time.ntp_server1 = 10.1.1.4
#Configure the logo mode of the LCD screen; 0-Disabled (default), 1-System logo, 2-Custom logo;
phone_setting.lcd_logo.mode = 1
#Configure the access URL and dispaly name of the remote phonebook. X ranges from 1 to 5.
remote_phonebook.data.1.url = 10.1.1.50/provisioning/yealink-phonebook.xml
remote_phonebook.data.1.name = Rubrica
features.remote_phonebook.flash_time = 3600

impostazioni individuali#!version:1.0.0.1
#Enable or disable the account1, 0-Disabled (default), 1-Enabled;
account.1.enable = 1
#Configure the label displayed on the LCD screen for account1.
account.1.label = Telefono di test
#Configure the display name of account1.
account.1.display_name = Utente 998
#Configure the username and password for register authentication.
account.1.auth_name = 998
account.1.password = 998
#Configure the register user name.
account.1.user_name = 998
#Configure the SIP server address.
account.1.sip_server_host = 10.1.1.50
#Specify the port for the SIP server. The default value is 5060.
account.1.sip_server_port = 5060

Alla fine, grazie alla straordinaria funzione di auto-provisioning prevista nei telefoni di cui ho parlato, non ci sono stati problemi nella connessione di nuovi dispositivi alla rete. Si è trattato solo di identificare l'indirizzo MAC del telefono e generare il file di configurazione secondo un modello.

Spero che abbiate letto fino alla fine e che abbiate tratto beneficio da quanto scritto.

Grazie per l'attenzione.

Fonte: habr.com

Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster