VoIP зоопарк — Provisioning

Въведение

Веднъж ръководството одобри експеримент по внедряване на 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
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=«10.1.1.50/provisioning/panasonic-phonebook.xml»
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 = 10.1.1.50/provisioning/yealink-phonebook.xml
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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster