Introducere
Odată, conducerea a aprobat un experiment de implementare a telefoniei IP în compania noastră. Fiindcă experiența mea în acest domeniu era minimă, sarcina mi-a stârnit un interes imens și m-am adâncit în studiul diferitelor aspecte ale problemei. La finalul acestui studiu, am decis să împărtășesc cunoștințele acumulate - cu speranța că vor fi utile cuiva. Deci...
Datele originale
Pentru IP-PBX a fost ales și desfășurat Asterisk. Parcul de telefoane este format din dispozitive Cisco 7906g, Panasonic UT-KX123B, Grandstream GXP1400, Dlink DPH-150S(E)/F3, Yealink T19 și T21. Această diversitate se datorează faptului că, în cadrul experimentului, s-a decis să încercăm câte puțin din fiecare, pentru a forma o opinie despre raportul preț/calitate/confort.
Sarcină
Să simplificăm și să unificăm procesul de configurare a noilor dispozitive. Toate telefoanele trebuie să fie sincronizate în timp, să aibă un director de telefonu, încărcat de la server și să ofere acces la setări pentru administrator.
Soluția acestei probleme este simplă - implementarea configurării automate a telefoanelor, așa numitul Provisioning. De fapt, despre implementarea acestei funcții minunate va fi vorba.
Configurarea tftpd, dhcpd
Pentru distribuția setărilor telefonelor, am ales tftp ca o opțiune universală, compatibilă cu toate platformele, ușor de configurat și de gestionat.
Nu a fost nevoie de o configurare specifică pentru tftp. Am instalat tftpd-ul standard și am plasat toate fișierele necesare în directorul său rădăcină.
Am plasat fișierele de configurare în subdirectoare corespunzătoare producătorului telefonului. Cu toate acestea, dispozitivul de la Cisco nu a reușit să acceseze propriul folder, a trebuit să-l păstrez în rădăcină.
Pentru a indica telefoanelor locația serverului tftp, am folosit option-66. În plus, le-am împărțit în clase separate în funcție de producător. Fiecare clasă a primit un segment propriu de adrese și un folder individual pentru fișierele de configurare. Apropo, dispozitivele de la D-Link au fost necesar să fie identificate după adresele MAC, deoarece nu oferă informații despre producător în cererea DHCP.
Fragment din 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/";
}
Telefoanele au trebuit excluse forțat din pool-ul general. Altfel, nu voiau să plece în «casa lor».
Exemplu de configurări subnet
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;
}
}
După repornirea tuturor serviciilor implicate, telefoanele s-au îndreptat cu încredere către serverul tftp pentru a obține configurațiile. A fost doar necesar să le așez acolo.
Cisco 7906
Aceste aparate mi-au ajuns în ambalajul fabricei. A trebuit să le reconfigurez pentru a le face compatibile cu Asterisk. Dar aceasta este o altă poveste. În cazul concret, pentru a configura aparatul, am creat, conform instrucțiunilor, un fișier SEPAABBCCDDEEFF.cnf.xml în rădăcina serverului tftp. Acolo, AABBCCDDEEFF reprezintă adresa MAC a aparatului.
Despre configurarea telefoanelor Cisco s-a scris deja de mai multe ori, așa că voi lăsa doar fișierul de lucru cu setările.
Setările pentru 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
Romanian_Romania
ro_RO
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
Dacă intenționați să achiziționați un telefon din această serie, fiți atenți, auto-configurarea este suportată doar pe aparatele 150S/F3. Pe aparatul 150S/F2, pe care l-am avut, nu am găsit această funcționalitate.
Fișierul de configurare poate fi în format xml sau text obișnuit. Pentru xml există o cerință: eticheta trebuie să fie la începutul liniei, altfel parserul o va ignora și valoarea parametrului corespunzător nu se va schimba.
Pentru configurarea telefonului se folosesc două fișiere. f0D00580000.cfg - pentru stocarea setărilor tuturor telefoanelor și 00112233aabb.cfg (adresa MAC în litere mici) pentru setările individuale. Setările individuale au, desigur, o prioritate mai mare.
Setul complet de configurații cuprinde peste o mie de linii; pentru a nu aglomera articolul, voi descrie un set minim suficient de configurații.
Obligatorii sunt nodul rădăcină VOIP_CONFIG_FILE și nodul încorporat version. Setările vor fi aplicate doar dacă versiunea fișierului este mai mare decât cele actuale din aparat. Această valoare poate fi verificată prin interfața web a telefonului în secțiunea de întreținere (gestionare a sistemului). Pentru telefoanele cu setări din fabrică, în ambele cazuri, aceasta este 2.0002. De asemenea, versiunea fișierului individual trebuie să fie mai mare decât versiunea fișierului general.
În primul rând, voi prezenta fișierul cu configurația generală pentru toate telefoanele. Practic, acesta stochează toate setările, fișierul individual va răspunde doar pentru numărul de telefon și mesajul de pe ecran.
În cele două blocuri prezentate mai jos, se stabilesc parametrii pentru fusul orar și sincronizarea timpului, portul inițial pentru RTP și se activează puntea de rețea între porturile WAN și LAN ale aparatului.
Fragment№1
DHCP 2 1 1 0 VOIP 10000 200 10.1.1.4 1 0 60 12 1500 1 1
De fapt, denumirile parametrilor de configurare sunt suficient de "vorbitoare" pentru a nu necesita o descriere detaliată.
SIP pentru o singură linie
5060 SIP1 10.1.1.50 5060 3600 1 10.1.1.50 1 0 G711A,G711U,G722
Setările de control la distanță
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
Setările telefonului
123 0 112 Company 5 1 30 0 1 0,,1 0 0 1 XML-PBook1 Phonebook http://10.1.1.50/provisioning/dlink-phonebook.xml : 0 0 friend,home,work,business,classmate,colleague
Toate celelalte setări vor rămâne „implicite”. Acum, orice telefon Dlink conectat la rețea va prelua imediat setările comune. Pentru a seta parametrii individuali pentru un aparat este necesar un fișier separat. În acesta trebuie să specificați doar setările necesare pentru un anumit abonat.
setările abonatului
2.0006 SIP1 User #117 117 5060 117 SIP_PWD 3600 1 5060 117 SIP_PWD
Panasonic UT-KX123B
Aceste dispozitive primesc setările printr-un mecanism ușor diferit. Configurația este stocată în fișiere text. Dimensiunea maximă a fișierului de configurație este de 120 KB. Indiferent de numărul de fișiere, dimensiunea totală a acestora nu trebuie să depășească 120 KB.
Fișierul de configurație este format dintr-un set de linii, asupra cărora se aplică condițiile specificate mai jos:
- Prima linie este întotdeauna un comment care include următoarea secvență de caractere (44 de bytes):
# Panasonic SIP Phone Standard Format File #
Reprezentarea în hexazecimal a acestei secvențe:
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
Pentru a preveni modificarea accidentală a secvenței de caractere stabilite, se recomandă să începeți fișierul de configurație cu linia:
# Panasonic SIP Phone Standard Format File # DO NOT CHANGE THIS LINE! - Fișierele de configurație trebuie să se încheie cu o linie goală.
- Fiecare linie trebuie să se încheie cu secvența "".
- Lungimea maximă a unei linii este de 537 bytes, inclusiv secvența "".
- Următoarele linii sunt ignorate:
- liniile care depășesc limita de 537 bytes;
- liniile goale;
- liniile de comentarii care încep cu simbolul "#";
- Linia fiecărui parametru este scrisă sub forma XXX="yyy" (XXX: numele parametrului, yyy: valoarea acestuia). Valoarea trebuie să fie înconjurată de ghilimele.
- Împărțirea unei linii de parametri în mai multe linii nu este permisă. Acest lucru va duce la o eroare de procesare a fișierului de configurație și, ca urmare, la o eșec al inițializării.
- Valoarea unor parametri trebuie specificată separat pentru fiecare linie. Parametrul cu sufixul "_1" în nume este parametrul pentru linia 1; "_2" – pentru linia 2 etc.
- Lungimea maximă a numelui parametrului este de 32 de caractere.
- Lungimea maximă a valorii parametrului este de 500 de caractere, cu excepția caracterelor de ghilimele.
- Spațiile din linie nu sunt permise, cu excepția cazului în care valoarea include simbolul spațiu.
- Valorile unor parametri pot fi specificate ca fiind „goale”, pentru a seta o valoare goală a parametrului.
- Parametrii sunt specificați fără un anumit ordonare.
- Dacă același parametru este specificat de mai multe ori în fișierul de configurație, se aplică valoarea specificată prima dată.
Un astfel de set de cerințe pentru fișierul de configurație m-a întristat, sincer. Din punctul meu de vedere, implementarea interacțiunii cu serverul gestionarea telefonului Panasonic este extrem de incomodă. În ceea ce privește acest parametru, telefonul este semnificativ inferior altora.
La prima pornire a dispozitivului (sau după resetarea la setările din fabrică) acesta încearcă să încarce așa-numitul fișier de produs (în acest caz KX-UT123RU.cfg), care ar trebui să conțină căile către celelalte fișiere de configurație.
Fișierul de produs# 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”
După aceasta, telefonul va afișa un mesaj pe ecran despre finalizarea cu succes a pregătirii și va aștepta să fie repornit. După repornire, va începe să proceseze fișierele de configurație necesare.
În fișierul master.cfg, este recomandat să specificați setările generale pentru toate telefoanele. La fel ca în cazul Dlink, voi menționa doar câțiva parametri. Numele celorlalți parametri și valorile acestora pot fi găsite în documentația de pe site-ul producătorului.
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=„»
XMLAPP_LDAP_USERID=„”
XMLAPP_LDAP_USERPASS=„”
În fișierul de configurație individual al dispozitivului, rămân, conform tradiției, doar setările abonatului.
aabbccddeeff.cfgDISPLAY_NAME_1=„User #168”
PHONE_NUMBER_1=„168”
SIP_URI_1=„168”
LINE_ENABLE_1=„Activat”
PROFILE_ENABLE_1=„Activat”
SIP_AUTHID_1=„168”
SIP_PASS_1=„SIP_PWD”
Grandstream GXP-1400
Parametrii acestor telefoane sunt stocați într-un singur fișier xml numit cfg{mac}.xml. Fie într-un fișier text obișnuit numit cfg{mac}. Acest telefon solicită doar fișierul de configurație individual, astfel că optimizarea setărilor prin mutarea lor într-un fișier comun nu este posibilă. O altă particularitate a configurării Grandstream-urilor este denumirea parametrilor. Toți sunt numerotați și denumiți ca P###. De exemplu:
P1650 – răspunde de interfața web pentru gestionarea telefonului (0 – HTTPS, 1 – HTTP)
P47 – adresa serverului SIP pentru conectare.
Dacă configurația este păstrată într-un fișier text, parametrii nu necesită nicio grupare și pot fi în orice ordine. Linile care încep cu # sunt considerate comentarii.
În cazul în care setările sunt prezentate în format xml, acestea trebuie să fie încrustate într-un nod <config version=”1”>, care la rândul său trebuie să fie încrustat într-<gs_provision version=„1”>. Toți parametrii sunt înregistrați sub formă de etichete corespunzătoare cu valoarea parametrului în interior.
Exemplu de configurare
<?xml version="1.0" encoding="UTF-8" ?>
<gs_provision version="1">
<config version="1">
<P271>1<\/P271>
<!-- Nume Cont. Nu poate fi gol. -->
<P270>109<\/P270>
<!-- SIP User ID -->
<P35>109<\/P35>
<!-- ID de autentificare -->
<P36>109<\/P36>
<!-- Parola de autentificare -->
<P34>SIP_PWD<\/P34>
<!-- Nume afișat (John Doe) -->
<P3>User# 109<\/P3>
<!-- Setări comune -->
<P207>10.1.1.50<\/P207>
<P208>2<\/P208>
<P47>10.1.1.50<\/P47><!-- server sip linia 1 -->
<P401>0<\/P401><!-- Dezactivare linia 2 -->
<P2>ADMIN_PWD<\/P2><!-- parola de admin -->
<P196>USER_PWD<\/P196><!-- parola console utilizator -->
<P1362>ro<\/P1362><!-- limbaj afișat -->
<P212>0<\/P212><!-- Upgrade din TFTP -->
<P192>10.1.1.50/grandstream<\/P192>
<P1357>1<\/P1357><!-- blocare configurație prin telefon (doar basic)-->
<P64>TZc-11<\/P64><!-- fus orar -->
<P30>10.1.1.4<\/P30><!-- server NTP -->
<P330>1<\/P330><!-- Descărcare PB din HTTP -->
<P331>http:\/\/10.1.1.50\/provisioning\/grandstream<\/P331><!-- url de bază pentru lista de contacte -->
<P333>30<\/P333><!-- Actualizare automată PB în 30 de minute -->
<\/config>
<\/gs_provision>
Yealink T19 și T21
Dispozitivele acestor modele suportă fișiere de configurare individuale pentru dispozitive și fișiere comune pentru modele. În cazul meu, a trebuit să plasez parametrii comuni în fișierele y000000000031.cfg și y000000000034.cfg, respectiv. Fișierele de configurare individuale sunt denumite conform adresei MAC: 00112233aabb.cfg.
Setările pentru yealink-uri sunt stocate într-un format text. Cea mai strictă cerință este ca prima linie să conțină versiunea fișierului, în formatul #!version:1.0.0.1.
Toți parametrii sunt scriși în formatul parametru = valoare. Comentariile trebuie să înceapă cu simbolul "#". Numele parametrilor și valorile acestora pot fi găsite în documentația de pe site-ul producătorului.
setări generale#!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 = Rusă
#Specify the LCD language, the valid values are: English (default), Chinese_S, Chinese_T, German, French, Turkish, Italian, Polish, Spanish and Portuguese.
lang.gui = Rusă
#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 =
remote_phonebook.data.1.name = Agenda telefonică
features.remote_phonebook.flash_time = 3600
setări individuale#!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 = Telefon de test
#Configure the display name of account1.
account.1.display_name = Utilizator 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
În final, datorită funcției minunate de auto-provision, disponibile în telefoanele menționate, conectarea noilor dispozitive la rețea nu a prezentat probleme. Totul s-a redus la aflarea adresei MAC a telefonului și generarea fișierului de configurare pe baza modelului.
Sper că ați citit până la capăt și ați extras ceva util din cele citite.
Vă mulțumesc pentru atenție.
Sursa: habr.com
