Въведение
Веднъж ръководството одобри експеримент по внедряване на IP телефония в нашата компания. Тъй като опитът ми в тази област беше минимален, задачата предизвикваше огромен интерес у мен и се потопих в изучаването на различни аспекти на въпросa. В края на проучването реших да споделя придобитите знания — в надеждата, че те ще са полезни на някого. И така…
Изходни данни
За IP-АТС беше избран и разгръщан Asterisk. Паркът от телефони се състои от устройства Cisco 7906g, Panasonic UT-KX123B, Grandstream GXP1400 и Dlink DPH-150S(E)/F3, Yealink T19 и T21. Такъв разнолик набор е обусловен от решението в рамките на експеримента да опитаме по малко от всичко, за да съставим собствено мнение относно съотношението цена/качество/удобство.
Задача
Максимално да опростим и унифицираме процеса на настройка на новите устройства. Всички телефони трябва да бъдат синхронизирани по време, да имат телефонен указател, зареждан от сървър и да предоставят достъп до настройките за администратора.
Решението на тази задача е просто — да се реализира автоматична настройка на телефоните, т.н. Provisioning. Всъщност, това е темата на моята реализация на тази забележителна функция.
Настройка на tftpd, dhcpd
За предоставяне на настройките на телефоните избрах tftp като универсален вариант, поддържан от всички платформи, лек за настройка и управление.
Специфични настройки за tftp не бяха необходими. Инсталирах стандартния tftpd и разположих всички необходими файлове в кореновата му директория.
Файловете с настройки разположих в каталози в съответствие с производителя на телефона. Обаче, устройството от Cisco не влезе в своята папка, така че се наложи да го съхраня в корена.
За да укажа на телефоните местоположението на tftp сървъра, използвах option-66. Освен това ги разделих на отделни класове според производителя. Всеки клас получи собствен сегмент адреси и индивидуална папка за конфигурационни файлове. Между другото, устройствата от D-link трябваше да бъдат идентифицирани по MAC адреси, тъй като информация за производителя те не предоставят в dhcp заявката.
Фрагмент 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/";
}
Телефоните трябваше да бъдат принудително изключени от общия пул. Иначе не искаха да отидат в своя 'лягушатник'.
Пример за настройки на подмрежа
подмрежа 10.1.1.0 маска 255.255.255.0 {
опция рутери 10.1.1.1;
пул {
забрани членове на "cisco";
забрани членове на "panasonic";
забрани членове на "dlink";
обхват 10.1.1.230 10.1.1.240;
}
пул {
разреши членове на "cisco";
обхват 10.1.1.65 10.1.1.69;
}
пул {
разреши членове на "panasonic";
обхват 10.1.1.60 10.1.1.64;
}
пул {
разреши членове на "dlink";
обхват 10.1.1.55 10.1.1.59;
}
}
След рестартиране на всички ангажирани услуги, телефоните уверено се насочиха към настройките на указания tftp-сървър. Оставаше само да ги разположа там.
Cisco 7906
Тези устройства получих в заводска опаковка. Трябваше да ги пренапиша, за да ги свържа с asterisk. Но това е отделна история. В конкретния случай, за да настроя устройството, създадох в корена на tftp-сървъра файла SEPAABBCCDDEEFF.cnf.xml. Където AABBCCDDEEFF е MAC-адресът на устройството.
За настройката на телефоните от Cisco вече е писано многократно, затова просто ще оставя работния файл с настройките.
Настройки за cisco
true
SIP
root
ADMIN_PWD
D-M-Y
Централна пацифична стандартна часова зона
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
Потребител #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
Български_България
bg_BG
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
Ако предстои да закупите телефон от тази серия, имайте предвид, че автоматичната настройка се поддържа само в устройствата 150S/F3. В телефона 150S/F2, който попадна в ръцете ми, не намерих такава функционалност.
Конфигурационният файл може да бъде в xml формат или обикновен текстов. За xml има едно изискване: етикетът трябва да бъде в началото на реда, в противен случай парсерът ще го игнорира и стойността на съответния параметър няма да се промени.
За настройка на телефона се използват два файла. f0D00580000.cfg — за съхранение на настройките на всички телефони и 00112233aabb.cfg (MAC адрес в малки букви) за индивидуални настройки. Индивидуалните настройки, разбира се, имат по-висок приоритет.
Целият набор от настройки включва повече от хиляда реда, за да не претоварвам статията, ще опиша минималния необходим набор от настройки.
Задължителни са кореновият узел VOIP_CONFIG_FILE и вложеният в него узел version. Настройките ще се приложат само ако версията на файла е по-висока от текущите настройки в устройството. Тази стойност може да се открие чрез уеб интерфейса на телефона в секцията поддръжка (системно управление). За телефони с фабрични настройки в двата случая това е 2.0002. Освен това, версията на индивидуалния файл трябва да е по-висока от версията на общия файл.
Първо представям файла с общата конфигурация за всички телефони. Всъщност, той съхранява всички настройки, индивидуалният файл ще отговаря само за телефонния номер и надписа на екрана.
В двата блока, приведени по-долу, се задават параметрите на времевата зона и синхронизацията на времето, начален порт за RTP и се включва мрежов мост между WAN и LAN портовете на устройството.
Фрагмент№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
Тези устройства получават настройки по малко различна схема. Конфигурацията се съхранява в текстови файлове. Максималният размер на конфигурационния файл е 120 KB. Независимо от количеството файлове техният общ размер не трябва да надвишава 120 KB.
Конфигурационният файл се състои от набор от редове, на които се налагат посочените по-долу условия:
- Първият ред винаги е коментар, включващ следната последователност от символи (44 байта):
# Panasonic SIP Phone Standard Format File #
Шестнадесетичното представяне на тази последователност:
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
За предотвратяване на случайна промяна на установената последователност от символи се препоръчва конфигурационният файл да започва с ред:
# Panasonic SIP Phone Standard Format File # DO NOT CHANGE THIS LINE! - Конфигурационните файлове трябва да завършват с празен ред.
- Всеки ред трябва да завършва с последователност "".
- Максималната дължина на реда е 537 байта, включително последователността "".
- Следните редове се игнорират:
- редове, които надвишават ограничението от 537 байта;
- празни редове;
- редове с коментари, започващи с символа "#";
- Редът на всеки параметър се записва под формата XXX="yyy" (XXX: име на параметъра, yyy: неговата стойност). Стойността трябва да бъде в двойни кавички.
- Разделянето на реда на параметри на няколко реда не е разрешено. Това ще доведе до грешка при обработката на конфигурационния файл и в резултат на това — до неуспех на инициализацията.
- Стойностите на някои параметри трябва да се задават отделно за всеки ред. Параметър с суфикс "_1" в името означава параметър за линия 1; "_2" — за линия 2 и т.н.
- Максималната дължина на името на параметъра е 32 символа.
- Максималната дължина на стойността на параметъра е 500 символа, с изключение на символите на двойните кавички.
- Пробелите в реда не са разрешени, освен в случаите, когато стойността включва символ за интервал.
- Стойностите на някои параметри могат да се задават „празни“, за да се установи празна стойност на параметъра.
- Параметрите се задават без конкретен ред.
- Ако един и същи параметър е посочен в конфигурационния файл повече от веднъж, става валидна стойността, указана първа.
Този сериозен набор от изисквания за конфигурационния файл ме разочарова откровено. Според мен реализацията на взаимодействието с сървър управлението на телефоните Panasonic е много неудобна. По този параметър телефонът значително отстъпва на другите.
При първото включване на устройството (или след нулиране до фабричните настройки) то опитва да зареди така наречения продуктен файл (в този случай KX-UT123RU.cfg), в който трябва да се съдържат пътищата към останалите конфигурационни файлове.
Продуктен файл# 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»
След това телефонът ще изведе на екрана съобщение за успешно завършване на подготовката и ще очаква да бъде рестартиран. А след рестартиране той ще започне да обработва съответните конфигурационни файлове.
В master.cfg се препоръчва да се посочат общи настройки за всички телефони. Както при Dlink, ще посоча само някои параметри. Имената на останалите параметри и техните стойности могат да бъдат намерени в документацията на сайта на производителя.
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=""
В индивидуален конфигурационен файл на устройството, по традиция, остават само настройките на абоната.
aabbccddeeff.cfgDISPLAY_NAME_1=«Потребител #168»
PHONE_NUMBER_1=«168»
SIP_URI_1=«168»
LINE_ENABLE_1=«Активирано»
PROFILE_ENABLE_1=«Активирано»
SIP_AUTHID_1=«168»
SIP_PASS_1=«SIP_PWD»
Grandstream GXP-1400
Параметрите на тези телефони се съхраняват в един xml файл с име cfg{mac}.xml. Или в обикновен текстов файл с име cfg{mac}. Този телефон запрашва само индивидуален конфигурационен файл, така че оптимизиране на настройките чрез изваждане на тях в общ файл не е възможно. Още една особеност в настройките на Grandstream е именуването на параметрите. Всички те са номерирани и се обозначават с P###. Например:
P1650 – отговаря за уеб интерфейса за управление на телефона (0 – HTTPS, 1 – HTTP)
P47 – адрес на SIP сървъра за свързване.
Ако конфигурацията е съхранена в текстов файл, параметрите не изискват никаква групировка и могат да бъдат представени в произволен ред. Структури, започващи с #, се считат за коментари.
В случай, че настройките са представени във формат xml, те трябва да бъдат вложени в възел , който от своя страна трябва да бъде вложен в . Всички параметри се записват под формата на съответстващи тагове със стойността на параметъра отвътре.
Пример за настройка
1
109
109
109
SIP_PWD
Потребител# 109
10.1.1.50
2
10.1.1.50
0
ADMIN_PWD
USER_PWD
bg
0
10.1.1.50/grandstream
1
TZc-11
10.1.1.4
1
http://10.1.1.50/provisioning/grandstream
30
Yealink T19 и T21
Устройствата от тези модели поддържат индивидуални конфигурационни файлове за устройства и общи за моделите. В моя случай, трябваше да поставя общите параметри в файловете y000000000031.cfg и y000000000034.cfg съответно. Индивидуалните конфигурационни файлове са именувани според MAC-адреса: 00112233aabb.cfg.
Настройките за Yealink устройствата се съхраняват в текстов формат. Единственото задължително изискване е първият ред да съдържа версия на файла, в формат #!version:1.0.0.1.
Всички параметри са записани във формат параметър = стойност. Коментарите трябва да започват със символа "#". Имената на параметрите и техните стойности могат да бъдат намерени в документацията на сайта на производителя.
общи настройки#!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 = Руски
#Specify the LCD language, the valid values are: English (default), Chinese_S, Chinese_T, German, French, Turkish, Italian, Polish, Spanish and Portuguese.
lang.gui = Руски
#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 = Владивосток
#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 = Телефонен указател
features.remote_phonebook.flash_time = 3600
индивидуални настройки#!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 = Тестово телефон
#Configure the display name of account1.
account.1.display_name = Потребител 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
В резултат на отличната функция auto-provision, предвидена в споменатите от мен телефони, свързването на нови устройства в мрежата не предизвика никакви проблеми. Всичко се свеждаше до установяване на MAC-адреса на телефона и генериране на конфигурационен файл по шаблона.
Надявам се, че сте прочели до края и извлекли полза от прочетеното.
Благодаря за вниманието.
Източник: habr.com
