Uvod
Enkrat je vodstvo odobrilo eksperiment z uvedbo IP telefonije v našem podjetju. Ker sem imel malo izkušenj na tem področju, me je naloga zelo pritegnila in se potopil sem v raziskovanje različnih aspektov vprašanja. Po zaključku raziskovanja sem se odločil deliti pridobljeno znanje — upajoč, da bo komu v pomoč. Torej…
Izvorni podatki
Kot IP-telefon centralni sistem je bil izbran in implementiran Asterisk. Park telefonov sestavljajo naprave Cisco 7906g, Panasonic UT-KX123B, Grandstream GXP1400 in Dlink DPH-150S(E)/F3, Yealink T19 in T21. Ta raznolikost je posledica odločitve, da v okviru eksperimenta preizkusimo vse po malo, da oblikujemo svoje mnenje o razmerju cena/kakovost/udobje.
Naloga
Maximalno poenostaviti in unificirati postopek nastavitev novih naprav. Vse telefonske naprave morajo biti sinhronizirane po času, imeti telefonski imenik, ki se naloži s strežnika in omogočiti dostop do nastavitev za administratorja.
Rešitev te naloge je preprosta — uvesti samodejno nastavitev telefonov, tako imenovano Provisioning. O moji izvedbi te čudovite funkcionalnosti bo tekla beseda.
Nastavitev tftpd, dhcpd
Za razdelitev nastavitev telefonom sem izbral tftp kot univerzalno rešitev, ki jo podpirajo vse platforme, enostavno za nastavitev in upravljanje.
Specifične nastavitve za tftp niso bile potrebne. Namestil sem standardni tftpd in vse potrebne datoteke postavil v njegovo korensko mapo.
Datoteke z nastavitvami sem razporedil po mapah glede na proizvajalca telefona. Vendar pa naprava Cisco ni želela dostopati do svoje mape, zato sem jo moral hraniti v korenu.
Da bi telefonov obvestil o lokaciji tftp strežnika, sem uporabil option-66. Poleg tega sem jih razdelil v ločene razrede glede na proizvajalca. Vsak razred je prejel svoj segment naslovov in individualno mapo za konfiguracijske datoteke. Mimogrede, naprave D-link sem moral določiti po MAC-naslovih, saj informacije o proizvajalcu v dhcp-povpraševanju ne ponujajo.
Fragment 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/";
}
Telefonske naprave sem moral prisilno izključiti iz skupnega bazena. Drugače niso želele zapustiti svojega "žabjega bazena".
Primer nastavitev podomrežja
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;
}
}
Po ponovnem zagonu vseh vpletenih storitev so se telefoni samostojno usmerili po nastavitvah na dodeljen tftp strežnik. Zdaj jih je le še potrebno tam namestiti.
Cisco 7906
Te naprave so mi prišle v tovarniški embalaži. Morala sem jih preprogramirati, da sem jih povezala z Asteriskom. A to je že druga zgodba. V tem primeru sem za nastavitev naprave, v skladu z navodili, v korenu tftp strežnika ustvarila datoteko SEPAABBCCDDEEFF.cnf.xml. Kjer je AABBCCDDEEFF - MAC naslov naprave.
O nastavitvi telefonov Cisco je bilo že večkrat napisano, zato preprosto pustim delovno datoteko z nastavitvami.
Nastavitve za 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
Slovenian_Slovenia
sl_SI
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
Če se odločate za nakup telefona te serije, bodite previdni, saj samodejna nastavitev deluje le pri napravah 150S/F3. Pri napravi 150S/F2, ki sem jo imel v rokah, takšne funkcionalnosti nisem našel.
Konfiguracijska datoteka je lahko v formatu xml ali v običajnem besedilnem formatu. Za xml velja eno pravilo: oznaka mora biti na začetku vrstice, sicer jo parser ignorira in vrednost ustreznega parametra se ne bo spremenila.
Za nastavitev telefona se uporabljata dve datoteki. f0D00580000.cfg — za shranjevanje nastavitev vseh telefonov in 00112233aabb.cfg (MAC-naslov v majhnih črkah) za individualne nastavitve. Individualne nastavitve imajo večjo prioriteto.
Celoten sklop nastavitev obsega več kot tisoč vrstic; da ne bi zagušili članka, bom opisal minimalen nabor potrebnih nastavitev.
Obvezna sta osrednji vozlišče VOIP_CONFIG_FILE in v njem vdelano vozlišče version. Nastavitve bodo uporabljene le, če bo različica datoteke višja od trenutnih nastavitev v napravi. To vrednost lahko preverite preko .web-vmesnika telefona v razdelku maintenance (sistemskega upravljanja). Za telefone z tovarniškimi nastavitvami je v obeh primerih to 2.0002. Poleg tega mora biti različica individualne datoteke višja od različice skupne datoteke.
Najprej predstavim datoteko s skupno konfiguracijo za vse telefone. V osnovi hrani vse nastavitve, individualna datoteka pa bo odgovorna le za številko telefona in napis na zaslonu.
V dveh blokih, predstavljenih spodaj, se nastavijo parametri časovne cone in sinhronizacije časa, začetni vrata za RTP in omogoči se omrežni most med WAN in LAN priključki naprave.
Fragment№1
DHCP 2 1 1 0 VOIP 10000 200 10.1.1.4 1 0 60 12 1500 1 1
Названия параметров конфигурации достаточно ясны, чтобы не требовать подробного описания.
SIP для одной линии
5060 SIP1 10.1.1.50 5060 3600 1 10.1.1.50 1 0 G711A,G711U,G722
Настройки удаленного управления
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
Настройки телефона
123 0 112 Компания 5 1 30 0 1 0,,1 0 0 1 XML-PBook1 Телефонная книга http://10.1.1.50/provisioning/dlink-phonebook.xml : 0 0 друг,дом,работа,бизнес,одноклассник,коллега
Все остальные настройки останутся по умолчанию. Теперь любой телефон Dlink, подключённый к сети, сразу примет общий для всех набор параметров. Для задания индивидуальных параметров аппарата нужен отдельный файл, в котором указаны необходимые настройки для отдельного абонента.
настройки абонента
2.0006 SIP1 User #117 117 5060 117 SIP_PWD 3600 1 5060 117 SIP_PWD
Panasonic UT-KX123B
Ti aparati dobivaju postavke prema nešto drugačijem obrascu. Konfiguracija se pohranjuje u tekstualne datoteke. Maksimalna veličina konfiguracijske datoteke iznosi 120 KB. Neovisno o broju datoteka, ukupna njihova veličina ne smije prelaziti 120 KB.
Konfiguracijska datoteka sastoji se od niza redaka, na koje se primjenjuju u sljedećim uvjetima:
- Prvi redak uvijek mora biti komentar koji uključuje sljedeću sekvencu znakova (44 bajta):
# Panasonic SIP Phone Standard Format File #
Šesnaestodnevni prikaz ove sekvencije:
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
Kako biste spriječili slučajno mijenjanje utvrđene sekvence znakova, preporučuje se da konfiguracijsku datoteku započnete redkom:
# Panasonic SIP Phone Standard Format File # DO NOT CHANGE THIS LINE! - Konfiguracijske datoteke moraju se završiti praznim redkom.
- Svaki redak mora završavati sekvencom "".
- Maksimalna duljina retka iznosi 537 bajta, uključujući sekvencu ""
- Sljedeći redovi se ignoriraju:
- redovi koji premašuju ograničenje od 537 bajta;
- prazni redovi;
- redovi komentara koji počinju simbolom "#";
- Redak svakog parametra zapisuje se u obliku XXX="yyy" (XXX: naziv parametra, yyy: njegova vrijednost). Vrijednost mora biti stavljena u dvostruke navodnike.
- Razbijanje retka parametara na više redaka nije dopušteno. To će izazvati grešku obrade konfiguracijske datoteke i, posljedično, doći će do kvara inicijalizacije.
- Vrijednosti nekih parametara potrebno je navesti odvojeno za svaku liniju. Parametar sa sufiksom "_1" u nazivu je parametar za liniju 1; "_2" — za liniju 2 i tako dalje.
- Maksimalna duljina naziva parametra iznosi 32 znaka.
- Maksimalna duljina vrijednosti parametra iznosi 500 znakova, osim znaka dvostrukih navodnika.
- V vrsti ne sme biti presledkov, razen če vrednost vsebuje simbol presledka.
- Vrednosti nekaterih parametrov je mogoče določiti kot 'prazne', da se nastavi prazna vrednost parametra.
- Parametri se določajo brez posebnega reda.
- Če je isti parameter v konfiguracijski datoteki naveden več kot enkrat, se uporabi vrednost, navedena prva.
Taka stroga zahteva za konfiguracijsko datoteko me je, odkrito rečeno, razočarala. Po mojem mnenju je implementacija interakcije z serverom upravljanjem telefonov Panasonic izjemno nepraktična. Po tem parametru telefon bistveno zaostaja za drugimi.
Ob prvem vklopu naprave (ali po ponastavitvi na tovarniške nastavitve) poskuša naložiti tako imenovano datoteko izdelka (v tem primeru je to KX-UT123RU.cfg), v kateri morajo biti navedene poti do drugih konfiguracijskih datotek.
Datoteka izdelka# 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"
Nato telefon prikaže sporočilo o uspešni pripravi in čaka, da ga ponovno zaženejo. Šele po ponovnem zagonu bo začel obdelovati ustrezne konfiguracijske datoteke.
V datoteki master.cfg se priporočajo skupne nastavitve za vse telefone. Tako kot pri Dlink, bom navedel le nekatere parametre. Imena ostalih parametrov in njihove vrednosti lahko najdete v dokumentaciji na spletni strani proizvajalca.
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=""
V individualnem konfiguracijskem datoteke naprave, po tradiciji, ostanejo samo nastavitve naročnika.
aabbccddeeff.cfgDISPLAY_NAME_1=«Uporabnik #168»
PHONE_NUMBER_1=«168»
SIP_URI_1=«168»
LINE_ENABLE_1=«Omogočeno»
PROFILE_ENABLE_1=«Omogočeno»
SIP_AUTHID_1=«168»
SIP_PASS_1=«SIP_PWD»
Grandstream GXP-1400
Parametri teh telefonov se shranjujejo v eni xml-datoteki z imenom cfg{mac}.xml. Ali v navadni besedilni datoteki z imenom cfg{mac}. Ta telefon zahteva samo individualno konfiguracijsko datoteko, zato optimiziranje nastavitev s prenosom v skupno datoteko ne bo delovalo. Še ena značilnost nastavitve Grandstreamov je poimenovanje parametrov. Vse so številčene in označene kot P###. Na primer:
P1650 - odgovarja za spletni vmesnik za upravljanje s telefonom (0 - HTTPS, 1 - HTTP)
P47 - naslov SIP strežnika za povezovanje.
Če se konfiguracija hrani v besedilni datoteki, parametri ne zahtevajo nobene skupine in gredo v katerem koli vrstnem redu. Vrstice, ki se začnejo z #, se obravnavajo kot komentarji.
V primeru, da so nastavitve predstavljene v formatu xml, morajo biti vgrajene v vozlišče , ki mora biti vgrajeno v . Vsi parametri se zapisujejo v obliki ustreznih oznak s vrednostjo parametra znotraj.
Primer nastavitev
1
109
109
109
SIP_PWD
Uporabnik# 109
10.1.1.50
2
10.1.1.50
0
ADMIN_PWD
USER_PWD
sl
0
10.1.1.50/grandstream
1
TZc-11
10.1.1.4
1
http://10.1.1.50/provisioning/grandstream
30
Yealink T19 in T21
Aparati tehniških modelov podpirajo individualne konfiguracijske datoteke za naprave in skupne za modele. V mojem primeru sem skupne parametre postavil v datoteke y000000000031.cfg in y000000000034.cfg. Individualne konfiguracijske datoteke se imenujejo v skladu z MAC-naslovom: 00112233aabb.cfg.
Nastavitve za yealink naprave se shranjujejo v tekstovnem formatu. Edina obvezna zahteva je, da prva vrstica vsebuje različico datoteke v formatu #!version:1.0.0.1.
Vsi parametri so zapisani v obliki parameter = vrednost. Komentarji se morajo začeti s simbolom "#". Imena parametrov in njihove vrednosti lahko najdete v dokumentaciji na spletni strani proizvajalca.
opšti parametri#!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 = Slovenian
#Specify the LCD language, the valid values are: English (default), Chinese_S, Chinese_T, German, French, Turkish, Italian, Polish, Spanish and Portuguese.
lang.gui = Slovenian
#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 = Telefonni imenik
features.remote_phonebook.flash_time = 3600
individualne nastavitve#!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 = Testni telefon
#Configure the display name of account1.
account.1.display_name = Uporabnik 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
Na koncu, zahvaljujoč odlični funkciji auto-provision, ki je predvidena v omenjenih telefonih, ni bilo težav pri povezovanju novih naprav v omrežje. Vse se je zmanjšalo na ugotavljanje MAC-naslova telefona in generiranje konfiguracijske datoteke po predlogi.
Upam, da ste prebrali do konca in izvlekli korist iz prebranega.
Hvala na pažnji.
Izvor: habr.com
