VoIP зоологическа градина — Provisioning

Въведение

Веднъж ръководството одобри експеримент по внедряване на IP телефония в нашата кантора. Тъй като моята опитност в тази област беше минимална, задачата предизвика у мен огромен интерес и аз се потопих в изучаването на различни аспекти на въпроса. След завършването на проучването реших да споделя придобитите знания — с надеждата, че те ще бъдат полезни на някого. И така...

Изходни данни

Избрана и внедрена е 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. Но това е отделна история. В конкретния случай за настройка на устройството създадох, в съответствие с инструкциите, файл SEPAABBCCDDEEFF.cnf.xml в корена на tftp-сървъра. Където 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
 

 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

 Руски_Русия
 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

Ако само сега планирате да закупите телефон от тази серия, имайте предвид, че автоматичната настройка се поддържа само при устройствата 150S/F3. При устройството 150S/F2, което попадна в ръцете ми, такава функционалност не открих.

Конфигурационният файл може да бъде както в XML формат, така и в обикновен текстов. За XML има едно изискване: тагът трябва да бъде в началото на реда, в противен случай парсерът ще го игнорира и стойността на съответния параметър няма да се промени.

За настройката на телефона се използват два файла. f0D00580000.cfg — за съхранение на настройките на всички телефони и 00112233aabb.cfg (MAC-адрес в малки букви) за индивидуални настройки. Индивидуалните настройки, естествено, имат по-висок приоритет.

Целият набор от настройки включва над хиляда реда; за да не се пренасища статията, ще опиша минимално необходимия набор от настройки.

Задължителни са кореновият възел VOIP_CONFIG_FILE и вложеният в него възел version. Настройките ще бъдат приложени само ако версията на файла е по-висока от текущите настройки в устройството. Можете да разберете тази стойност чрез уеб интерфейса на телефона в раздела maintenance (системно управление). За телефони с фабрични настройки в двата случая това е 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
Потребител #117
117
5060
117
SIP_PWD
3600
1
5060
117
SIP_PWD

Panasonic UT-KX123B

Тези устройства получават настройки по малко по-различен начин. Конфигурацията се съхранява в текстови файлове. Максималният размер на конфигурационния файл е 120 КБ. Независимо от количеството файлове, общият им размер не трябва да надвишава 120 КБ.
Конфигурационният файл се състои от набор от редове, на които се налагат посочените по-долу условия:

  • Първият винаги трябва да е ред с коментар, включващ следната последователност от символи (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=«User #168»

PHONE_NUMBER_1=«168»
SIP_URI_1=«168»
LINE_ENABLE_1=«Enabled»
PROFILE_ENABLE_1=«Enabled»
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 сървъра за свързване.

Ако конфигурацията се съхранява в текстов файл, параметрите не изискват никаква групировка и могат да бъдат в произволен ред. Стрings, започващи с #, се разглеждат като коментари.

В случай, че настройките са представени във формат xml, те трябва да бъдат вложени в възел , който от своя страна трябва да бъде вложен в . Всички параметри се записват под формата на съответстващи тагове с стойността на параметъра вътре.
Пример за настройка

1
    
    109
    
    109
    
    109
    
    SIP_PWD
    
    User# 109

        10.1.1.50
        2
   10.1.1.50
   0
   ADMIN_PWD
   USER_PWD
   ru
        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