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/"; }

Телефони довелося примусово виключати із загального пулу. Інакше вони ніяк не хотіли йти у свій «жабник».
Приклад налаштувань підмережі

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; } }

Після перезапуску всіх залучених служб телефони впевнено попрямували за налаштуваннями на встановлений ним tftp-сервер. Залишилося лише їх там розмістити.

Cisco 7906

Ці апарати дісталися мені у заводській упаковці. Довелося перешивати, щоб подружити з астеріском. Але це окрема історія. У конкретному випадку для налаштування апарата я, згідно з інструкцією, створив у корені tftp-сервера файл SEPAABBCCDDEEFF.cnf.xml. Де AABBCCDDEEFF — MAC-адреса апарату.

Про налаштування телефонів від Cisco було написано вже неодноразово, тому я просто залишу робочий файл з налаштуваннями.
Налаштування для cisco

<?xml version="1.0" encoding="UTF-8"?>
<device xsi_type="axl:XIPPhone" ctiid="94">
<fullConfig>true</fullConfig>
<deviceProtocol>SIP</deviceProtocol>
<sshUserId>root</sshUserId>
<sshPassword>ADMIN_PWD</sshPassword>
<devicePool>
<dateTimeSetting>
<dateTemplate>D-M-Y</dateTemplate>
<timeZone>Central Pacific Standard Time</timeZone>
<ntps>
<ntp>
<name>10.1.1.4</name>
<ntpMode>Unicast</ntpMode>
</ntp>
</ntps>
</dateTimeSetting>
<callManagerGroup>
<members> <member priority="0"> <callManager>
<name>10.1.1.50</name>
<ports>
<ethernetPhonePort>2000</ethernetPhonePort>
<sipPort>5060</sipPort>
<securedSipPort>5061</securedSipPort>
</ports>
<processNodeName>10.1.1.50</processNodeName>
</callManager> </member> </members>
</callManagerGroup>
<srstInfo>
<srstOption>Disable</srstOption>
</srstInfo>
<connectionMonitorDuration>120</connectionMonitorDuration>
</devicePool>
<sipProfile>
<sipCallFeatures>
<cnfJoinEnabled>true</cnfJoinEnabled>
<callForwardURI>x-cisco-serviceuri-cfwdall</callForwardURI>
<callPickupURI>x-cisco-serviceuri-pickup</callPickupURI>
<callPickupListURI>x-cisco-serviceuri-opickup</callPickupListURI>
<callPickupGroupURI>x-cisco-serviceuri-gpickup</callPickupGroupURI>
<meetMeServiceURI>x-cisco-serviceuri-meetme</meetMeServiceURI>
<abbreviatedDialURI>x-cisco-serviceuri-abbrdial</abbreviatedDialURI>
<rfc2543Hold>false</rfc2543Hold>
<callHoldRingback>2</callHoldRingback>
<localCfwdEnable>true</localCfwdEnable>
<semiAttendedTransfer>true</semiAttendedTransfer>
<anonymousCallBlock>2</anonymousCallBlock>
<callerIdBlocking>2</callerIdBlocking>
<dndControl>0</dndControl>
<remoteCcEnable>true</remoteCcEnable>
<retainForwardInformation>false</retainForwardInformation>
</sipCallFeatures>
<sipStack>
<sipInviteRetx>6</sipInviteRetx>
<sipRetx>10</sipRetx>
<timerInviteExpires>180</timerInviteExpires>
<timerRegisterExpires>3600</timerRegisterExpires>
<timerRegisterDelta>5</timerRegisterDelta>
<timerKeepAliveExpires>120</timerKeepAliveExpires>
<timerSubscribeExpires>120</timerSubscribeExpires>
<timerSubscribeDelta>5</timerSubscribeDelta>
<timerT1>500</timerT1>
<timerT2>4000</timerT2>
<maxRedirects>70</maxRedirects>
<remotePartyID>true</remotePartyID>
<userInfo>None</userInfo>
</sipStack>
<autoAnswerTimer>1</autoAnswerTimer>
<autoAnswerAltBehavior>false</autoAnswerAltBehavior>
<autoAnswerOverride>true</autoAnswerOverride>
<transferOnhookEnabled>false</transferOnhookEnabled>
<enableVad>false</enableVad>
<preferredCodec>none</preferredCodec>
<dtmfAvtPayload>101</dtmfAvtPayload>
<dtmfDbLevel>3</dtmfDbLevel>
<dtmfOutofBand>avt</dtmfOutofBand>
<kpml>3</kpml>
<alwaysUsePrimeLine>false</alwaysUsePrimeLine>
<alwaysUsePrimeLineVoiceMail>false</alwaysUsePrimeLineVoiceMail>
<phoneLabel>Cisco Phone</phoneLabel>
<stutterMsgWaiting>2</stutterMsgWaiting>
<callStats>false</callStats>
<offhookToFirstDigitTimer>15000</offhookToFirstDigitTimer>
<silentPeriodBetweenCallWaitingBursts>10</silentPeriodBetweenCallWaitingBursts>
<disableLocalSpeedDialConfig>true</disableLocalSpeedDialConfig>
<poundEndOfDial>false</poundEndOfDial>
<startMediaPort>16384</startMediaPort>
<stopMediaPort>32766</stopMediaPort>
<sipLines>
<line button="1" lineIndex="1">
<featureID>9</featureID>
<proxy>10.1.1.50</proxy>
<port>5060</port>
<autoAnswer> <autoAnswerEnabled>2</autoAnswerEnabled> </autoAnswer>
<callWaiting>3</callWaiting>
<sharedLine>false</sharedLine>
<messageWaitingLampPolicy>3</messageWaitingLampPolicy>
<messagesNumber></messagesNumber>
<ringSettingIdle>4</ringSettingIdle>
<ringSettingActive>5</ringSettingActive>
<forwardCallInfoDisplay>
<callerName>true</callerName>
<callerNumber>true</callerNumber>
<redirectedNumber>false</redirectedNumber>
<dialedNumber>true</dialedNumber>
</forwardCallInfoDisplay>
<featureLabel></featureLabel>
<displayName>User #103</displayName>
<name>103</name>
<authName>103</authName>
<authPassword>SIP_PWD</authPassword>
</line>
</sipLines>
<externalNumberMask>$num</externalNumberMask>
<voipControlPort>5060</voipControlPort>
<dscpForAudio>184</dscpForAudio>
<ringSettingBusyStationPolicy>0</ringSettingBusyStationPolicy>
<dialTemplate>dialplan.xml</dialTemplate>
</sipProfile>
<commonProfile>
<phonePassword>*0#</phonePassword>
<backgroundImageAccess>true</backgroundImageAccess>
<callLogBlfEnabled>2</callLogBlfEnabled>
</commonProfile>
<loadInformation></loadInformation>
<vendorConfig>
<disableSpeaker>false</disableSpeaker>
<disableSpeakerAndHeadset>false</disableSpeakerAndHeadset>
<forwardingDelay>1</forwardingDelay>
<pcPort>0</pcPort>
<settingsAccess>1</settingsAccess>
<garp>0</garp>
<voiceVlanAccess>0</voiceVlanAccess>
<videoCapability>0</videoCapability>
<autoSelectLineEnable>1</autoSelectLineEnable>
<webAccess>0</webAccess>
<daysDisplayNotActive>1,7</daysDisplayNotActive>
<displayOnTime>09:00</displayOnTime>
<displayOnDuration>12:00</displayOnDuration>
<displayIdleTimeout>01:00</displayIdleTimeout>
<spanToPCPort>1</spanToPCPort>
<loggingDisplay>2</loggingDisplay>
<loadServer>10.1.1.50</loadServer>
<recordingTone>0</recordingTone>
<recordingToneLocalVolume>100</recordingToneLocalVolume>
<recordingToneRemoteVolume>50</recordingToneRemoteVolume>
<recordingToneDuration></recordingToneDuration>
<displayOnWhenIncomingCall>0</displayOnWhenIncomingCall>
<rtcp>0</rtcp>
<moreKeyReversionTimer>5</moreKeyReversionTimer>
<autoCallSelect>1</autoCallSelect>
<logServer>10.1.1.50</logServer>
<g722CodecSupport>0</g722CodecSupport>
<headsetWidebandUIControl>0</headsetWidebandUIControl>
<handsetWidebandUIControl>0</handsetWidebandUIControl>
<headsetWidebandEnable>0</headsetWidebandEnable>
<handsetWidebandEnable>0</handsetWidebandEnable>
<peerFirmwareSharing>0</peerFirmwareSharing>
<enableCdpSwPort>1</enableCdpSwPort>
<enableCdpPcPort>1</enableCdpPcPort>
</vendorConfig>
<versionStamp>1143565489-a3cbf294-7526-4c29-8791-c4fce4ce4c37</versionStamp>
<userLocale>
<name>Russian_Russian_Federation</name>
<langCode>ru_RU</langCode>
<version></version>
<winCharSet>utf-8</winCharSet>
</userLocale>
<networkLocale></networkLocale>
<networkLocaleInfo>
<name></name>
<version></version>
</networkLocaleInfo>
<deviceSecurityMode>1</deviceSecurityMode>
<idleTimeout>0</idleTimeout>
<authenticationURL></authenticationURL>
<directoryURL>http://10.1.1.50/provisioning/cisco-services.xml</directoryURL>
<idleURL></idleURL>
<informationURL></informationURL>
<messagesURL></messagesURL>
<proxyServerURL></proxyServerURL>
<servicesURL>http://10.1.1.50/provisioning/cisco-services.xml</servicesURL>
<dscpForSCCPPhoneConfig>96</dscpForSCCPPhoneConfig>
<dscpForSCCPPhoneServices>0</dscpForSCCPPhoneServices>
<dscpForCm2Dvce>96</dscpForCm2Dvce>
<transportLayerProtocol>2</transportLayerProtocol>
<singleButtonBarge>0</singleButtonBarge>
<capfAuthMode>0</capfAuthMode>
<capfList><capf>
<phonePort>3804</phonePort>
<!-- <processNodeName>10.1.1.50</processNodeName> -->
</capf> </capfList>
<certHash></certHash>
<encrConfig>false</encrConfig>
<advertiseG722Codec>1</advertiseG722Codec>
</device>

D-Link DPH-150S/F3

Якщо вам потрібно придбати телефон цієї серії, будьте уважні, автоналаштування підтримується тільки в апаратах 150S/F3. На апараті 150S/F2, який потрапив мені до рук, такого функціоналу не виявив.

Конфігураційний файл може бути як у форматі xml, так і у звичайному текстовому. Для XML є одна вимога: тег повинен бути на початку рядка, інакше парсер його проігнорує і значення відповідного параметра не зміниться.

Для налаштування телефону використовуються два файли. f0D00580000.cfg — для зберігання налаштувань усіх телефонів та 00112233aabb.cfg (MAC-адреса в нижньому регістрі) для індивідуальних налаштувань. Індивідуальні налаштування, звичайно, мають більший пріоритет.

Повний набір настройок налічує понад тисячу рядків, щоб не захаращувати статтю, опишу мінімальний достатній набір налаштувань.

Обов'язковими є кореневий вузол VOIP_CONFIG_FILE і вкладений у нього вузол версія. Налаштування будуть застосовані лише якщо версія файлу буде вищою, ніж у поточних установок в апараті. Дізнатися це значення можна через .web-інтерфейс телефону розділ maintenance (системне управління). Для телефонів із заводськими налаштуваннями в обох випадках це 2.0002. Крім того, версія індивідуального файлу має бути більшою за версію загального файлу.

Першим наведу файл із загальною конфігурацією для всіх телефонів. По суті, він зберігає всі налаштування, індивідуальний файл відповідатиме лише за номер телефону та напис на екрані.

У двох блоках, наведених нижче, встановлюються параметри часової зони та синхронізації часу, початковий порт для RTP та включається мережевий міст між WAN та LAN роз'ємами апарата.

Фрагмент №1

<GLOBAL_CONFIG_MODULE>
<WAN_Mode>DHCP</WAN_Mode>
<Default_Protocol>2</Default_Protocol>
<Enable_DHCP>1</Enable_DHCP>
<DHCP_Auto_DNS>1</DHCP_Auto_DNS>
<DHCP_Auto_Time>0</DHCP_Auto_Time>
<Host_Name>VOIP</Host_Name>
<RTP_Initial_Port>10000</RTP_Initial_Port>
<RTP_Port_Quantity>200</RTP_Port_Quantity>
<SNTP_Server>10.1.1.4</SNTP_Server>
<Enable_SNTP>1</Enable_SNTP>
<Time_Zone>71</Time_Zone>
<Time_Zone_Name>UCT_011</Time_Zone_Name>
<Enable_DST>0</Enable_DST>
<SNTP_Timeout>60</SNTP_Timeout>
<Default_UI>12</Default_UI>
<MTU_Length>1500</MTU_Length>
</GLOBAL_CONFIG_MODULE>
<LAN_CONFIG_MODULE>
<Enable_Bridge_Mode>1</Enable_Bridge_Mode>
<Enable_Port_Mirror>1</Enable_Port_Mirror>
</LAN_CONFIG_MODULE>

Власне назви параметрів конфігурації досить "розмовляючі", щоб не описувати їх докладно.
SIP для однієї лінії

<SIP_CONFIG_MODULE>
<SIP__Port>5060</SIP__Port>
<SIP_Line_List>
<SIP_Line_List_Entry>
<ID>SIP1</ID>
<Register_Addr>10.1.1.50</Register_Addr>
<Register_Port>5060</Register_Port>
<Register_TTL>3600</Register_TTL>
<Enable_Reg>1</Enable_Reg>
<Proxy_Addr>10.1.1.50</Proxy_Addr>
<DTMF_Mode>1</DTMF_Mode>
<DTMF_Info_Mode>0</DTMF_Info_Mode>
<VoiceCodecMap>G711A,G711U,G722</VoiceCodecMap>
</SIP_Line_List_Entry>
</SIP_Line_List>
</SIP_CONFIG_MODULE>

Налаштування віддаленого керування

<MMI_CONFIG_MODULE>
<Telnet_Port>23</Telnet_Port>
<Web_Port>80</Web_Port>
<Web_Server_Type>0</Web_Server_Type>
<Https_Web_Port>443</Https_Web_Port>
<Remote_Control>1</Remote_Control>
<Enable_MMI_Filter>0</Enable_MMI_Filter>
<Telnet_Prompt></Telnet_Prompt>
<MMI_Filter>
<MMI_Filter_Entry>
<ID>Item1</ID>
<First_IP>10.1.1.152</First_IP>
<End_IP>10.1.1.160</End_IP>
</MMI_Filter_Entry>
</MMI_Filter>
<MMI_Account>
<MMI_Account_Entry>
<ID>Account1</ID>
<Name>admin</Name>
<Password>ADMIN_PWD</Password>
<Level>10</Level>
</MMI_Account_Entry>
<MMI_Account_Entry>
<ID>Account2</ID>
<Name>guest</Name>
<Password>GUEST_PWD</Password>
<Level>5</Level>
</MMI_Account_Entry>
</MMI_Account>
</MMI_CONFIG_MODULE>

налаштування телефону

<PHONE_CONFIG_MODULE>
<Menu_Password>123</Menu_Password>
<KeyLock_Password>123</KeyLock_Password>
<Fast_Keylock_Code></Fast_Keylock_Code>
<Enable_KeyLock>0</Enable_KeyLock>
<Emergency_Call>112</Emergency_Call>
<LCD_Title>Company</LCD_Title>
<LCD_Constrast>5</LCD_Constrast>
<LCD_Luminance>1</LCD_Luminance>
<Backlight_Off_Time>30</Backlight_Off_Time>
<Enable_Power_LED>0</Enable_Power_LED>
<Time_Display_Style>0</Time_Display_Style>
<Enable_TimeDisplay>1</Enable_TimeDisplay>
<Alarm__Clock>0,,1</Alarm__Clock>
<Date_Display_Style>0</Date_Display_Style>
<Date_Separator>0</Date_Separator>
<Enable_Pre-Dial>1</Enable_Pre-Dial>
<Xml_PhoneBook>
<Xml_PhoneBook_Entry>
<ID>XML-PBook1</ID>
<Name>Phonebook</Name>
<Addr>http://10.1.1.50/provisioning/dlink-phonebook.xml</Addr>
<Auth>:</Auth>
<Policy>0</Policy>
<Sipline>0</Sipline>
</Xml_PhoneBook_Entry>
</Xml_PhoneBook>
<Phonebook_Groups>friend,home,work,business,classmate,colleague</Phonebook_Groups>
</PHONE_CONFIG_MODULE>

Всі інші параметри залишаться "за замовчуванням". Тепер будь-який телефон Dlink, підключений до мережі, відразу прийме загальний набір параметрів. Щоб встановити індивідуальні параметри для апарата, потрібен окремий файл. У ньому потрібно лише вказати необхідні налаштування для окремого абонента.
налаштування абонента

<?xml version="1.0" encoding="UTF-8"?>
<VOIP_CONFIG_FILE>
<version>2.0006</version>
<SIP_CONFIG_MODULE>
<SIP_Line_List>
<SIP_Line_List_Entry>
<ID>SIP1</ID>
<Display_Name>User #117</Display_Name>
<Phone_Number>117</Phone_Number>
<Register_Port>5060</Register_Port>
<Register_User>117</Register_User>
<Register_Pswd>SIP_PWD</Register_Pswd>
<Register_TTL>3600</Register_TTL>
<Enable_Reg>1</Enable_Reg>
<Proxy_Port>5060</Proxy_Port>
<Proxy_User>117</Proxy_User>
<Proxy_Pswd>SIP_PWD</Proxy_Pswd>
</SIP_Line_List_Entry>
</SIP_Line_List>
</SIP_CONFIG_MODULE>
</VOIP_CONFIG_FILE>

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 6 C 72 6 61
    Для запобігання випадковій зміні встановленої послідовності символів рекомендується починати конфігураційний файл з рядка:
    # Panasonic SIP Phone Standard Формат файлу # 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 Формат файлу # 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 сервера для підключення.

Якщо конфігурація зберігається у текстовому файлі, параметри не вимагають жодного угруповання та йдуть у будь-якому порядку. Рядки, що починаються з #, розглядаються як коментарі.

У випадку, якщо налаштування представлені у форматі xml, вони мають бути вкладені у вузол , який у свою чергу має бути вкладений у . Усі параметри записуються як відповідних тегів зі значенням параметра всередині.
Приклад налаштування

1.0 8 1 1 SIP_PWD User# 271 1 271 270 109 ADMIN_PWD USER_PWD ru 270 35/grandstream 109 TZc-35 36 109 http://36/provisioning/grandstream 34

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. Це ranges from 0 to 65535, the default value is 11800.
network.port.max_rtpport = 10100
#Configure minimum local RTP port. Це ranges від 0 до 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
#Спеціфікують web language, valid values ​​are: English, Chinese_S, Turkish, Portuguese, Spanish, Italian, French, Russian, Deutsch and Czech.
lang.wui = Ukrainian
#Спеціфіки LCD language, valid values ​​are: English (default), Chinese_S, Chinese_T, German, French, Turkish, Italian, Polish, Spanish and Portuguese.
lang.gui = Ukrainian
#Configure time zone and time zone name. Time zone ranges from -11 to +12, the default value is +8.
#Попередній час Zone Name is China(Beijing).
#Refer to Yealink IP Phones User Guide для більше існуючих time zones and time zone names.
local_time.time_zone = +11
local_time.time_zone_name = Vladivostok
#Configure domain name або IP address of 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 від 1 до 5.
remote_phonebook.data.1.url = 10.1.1.50/provisioning/yealink-phonebook.xml
remote_phonebook.data.1.name = Phonebook
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 = Test phone
#Configure the display name of account1.
account.1.display_name = User 998
#Configure the username і password для registru 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 SIP-сервер. The default value is 5060.
account.1.sip_server_port = 5060

У результаті завдяки чудовій функції auto-provision, передбаченій у згаданих мною телефонах, з підключенням до мережі нових апаратів не виникло жодних проблем. Все звелося до з'ясування MAC-адреси телефону і створення конфігураційного файлу за шаблоном.

Сподіваюся, що ви дочитали до кінця і отримали користь з прочитаного.

Дякую за увагу.

Джерело: habr.com

Додати коментар або відгук