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


Эти аппараты достались мне в заводской упаковке. Пришлось перешивать, чтобы подружить с asterisk'ом. Но это отдельная история. В конкретном случае для настройки аппарата я, согласно инструкции, создал в корне 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 и вложенный в него узел version. Настройки будут применены только если версия файла будет выше, чем у текущих настроек в аппарате. Узнать это значение можно через .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 6F 72 6D 61 74 20 46 69 6C 65 20 23
    Для предотвращения случайного изменения установленной последовательности символов рекомендуется начинать конфигурационный файл со строки:
    # Panasonic SIP Phone Standard Format File # DO NOT CHANGE THIS LINE!
  • Конфигурационные файлы должны заканчиваться пустой строкой.
  • Каждая строка должна заканчиваться последовательностью "<CR><LF>".
  • Максимальная длина строки составляет 537 байт, включая последовательность "<CR><LF>"
  • Следующие строки игнорируются:
    • строки, превышающие ограничение в 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.cfg
DISPLAY_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, они должны быть вложены в узел <config version=”1”>, который в свою очередь должен быть вложен в <gs_provision version=«1»>. Все параметры записываются в виде соответствующих тегов со значением параметра внутри.
Пример настройки
<?xml version="1.0" encoding="UTF-8" ?>
<gs_provision version="1">
  <config version="1">
    <P271>1</P271>
    <!-- Account Name. Cannot be empty. -->
    <P270>109</P270>
    <!-- SIP User ID -->
    <P35>109</P35>
    <!-- Authenticate ID -->
    <P36>109</P36>
    <!-- Authenticate password -->
    <P34>SIP_PWD</P34>
    <!-- Display Name (John Doe) -->
    <P3>User# 109</P3>
<!-- Common settings -->
        <P207>10.1.1.50</P207>
        <P208>2</P208>
   <P47>10.1.1.50</P47><!-- line 1 sip server -->
   <P401>0</P401><!-- Line 2 disable -->
   <P2>ADMIN_PWD</P2><!-- admin password -->
   <P196>USER_PWD</P196><!-- user web console pwd -->
   <P1362>ru</P1362><!-- display lang -->
        <P212>0</P212><!-- Upgrade from TFTP -->
        <P192>10.1.1.50/grandstream</P192>
   <P1357>1</P1357><!-- lock configuration via phone (basic only)-->
   <P64>TZc-11</P64><!-- timezone -->
   <P30>10.1.1.4</P30><!-- NTP-server -->
        <P330>1</P330><!-- Download PB from HTTP -->
        <P331>http://10.1.1.50/provisioning/grandstream</P331><!-- phonebook base url -->
        <P333>30</P333><!-- Auto update PB in 30 min -->
  </config>
</gs_provision>


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 = Russian
#Specify the LCD language, the valid values are: English (default), Chinese_S, Chinese_T, German, French, Turkish, Italian, Polish, Spanish and Portuguese.
lang.gui = Russian
#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 = 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 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-адреса телефона и генерации конфигурационного файла по шаблону.

Надеюсь, что вы дочитали до конца и извлекли пользу из прочитанного.

Спасибо за внимание.
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 20

    0
    Спасибо за обзор. Так все же — составили ли вы мнение о «соотношении цена/качество/удобство»? Я так понял, что по удобству явный аутсайдер — Panasonic. А как с остальными моделями и параметрами?
      0
      Во-первых я оценивал удобство аппаратов как администратор, а во-вторых я новичок в вопросах IP-телефонии.
      По поводу Panasonic'ов. Я, по сути, кустарными методами пытался заменить фирменное решение, которое я не видел в работе. Возможно если делать всё как положено, то получится удобно и приятно.
      По удобству администрирования, пальма первенства принадлежит Cisco. Если, конечно, не вспоминать необходимость перешивать аппарат для работы с Asterisk. Но вот по цене, эти аппараты на последнем месте.
      Второе место по удобству отдам Yealink. Третье поделят Dlink и Grandstream. По ценам все аппараты кроме Cisco примерно равны.
      +1
      А чем/как вы формируете телефонную книгу для Grandstream?
        0
        Все телефонные книги генерируются связкой php+mysql в формате xml. Подробное описание формата книги для Grandstream есть на сайте производителя.
        Я планирую еще одну статью о своём зоопарке, как раз о телефонных книгах.
          +1
          Вот страничка моей модели, там есть ссылки.
          +1
          Cisco 7906 это древнючая модель, давно снятая с производства.
          Немного странно, оценивать их с точки зрения администратора и покупателя (да и с любой другой точки зрения), вы их и купить то толком не сможете.
            0
            Всё верно, но я могу составить мнение только о том, что попробовал сам. Оставить без внимания такой замечательный аппарат я просто не мог.
              0
              Ну составить мнение о телефонах циско по 7906 невозможно. :) Разве что о процессе провижнинга, который особо не менялся с тех пор.
              Сама техника стала совершенно другой.
                0
                К сожалению, не имею возможности «потрогать» другие модели. Рад, что мои скудные знания об автонастройке еще актуальны и не введут никого в заблуждение.
                А, что насчет телефонной книги и XML приложений вообще, сильно изменились принципы работы? Не хотелось бы описывать в статье устаревшие методы.
                  0
                  В приложении к циско телефонам? Особо ничего не изменилось, совместимость со старыми телефонами остается. Но телефонная книга и проч. приложения работают на них в виде http/xml интерфейса, телефон в реальном времени обращается на колменеджер.
                  Не знаю, реализуемо это на астере или нет.
                    0
                    Можно найти уже готовые web-сервисы на github или написать самому — там несложно
            0
            Кроме того, еще замечу что полностью потенциал цискофонов без колменеджера раскрыть невозможно, с астером они работают на уровне любого китайского сип телефона, плюс надо некоторые модели вручную перешивать, как вы заметили. Поэтому для работы с астером их брать новые смысла нет, разве что найти где-то большой сток старых телефонов, или купить списанные б/у задешево.

            Также отмечу что колменеджер нынче имеет очень удобную схему лицензирования, платишь по сути только за лицензии на сам телефон, все остальное бесплатно — транки, кодеки, и т.д. Фирменные сервера также не требуются, кластеризация в т.ч. бесплатна. IM также входит в пакет бесплатно.
            В отличие от прочих крупных вендоров.
            Так что если будете рассматривать коммерческое решение, очень рекомендую обратиться в циску.
              0
              CUCM: Схема лицензирования получается более другая чем была (во всяком случае для нашей организации)
              Транки и кодеки и в старом не оплачивались.
              Фирменные сервера не требуются, но настоятельно рекомендуются. Требование иметь Cisco MCS сейчас заменилось на требование иметь vmware ESXi. И желательно на Cisco UCS сервере, иначе параметры для железа будут повыше.

              А какие прочие крупные вендоры имеются ввиду? И какие их решения?
                0
                Я как бы в курсе, с 4 версии кукм гоняю и продаю. :)
                С 5 версии по 9.1 примерно продавали DLU, теперь вот «юзеров». Раньше также нужно было покупать лицензии на каждую ноду, лицензии на презенс и т.д. Сейчас все серверные лицензии убрали, все бесплатно. Оплачиваешь олько рабочие места.

                А «другие» — та же авая например, Алкатель, да все по моему традиционщики. За каждый чих плати, покупай лицухи на каждый транк, каждый кодек, и т.п.
                  0
                  По 8.6.x продавали DLU. С 9-й началась котовасия с лицензиями.

                  «Все бесплатно» оно до тех пор, пока не посмотришь сколько стоят лицензии на пользователей.

                  И если у пользователей вдруг более двух телефонов — то придется еще лицензии за денежки покупать при upgrade-е — DLU бесплатно не конвертируются в лицензии для пользователей с 3+ телефонами.

                  А если пользоваться Астериском — все бесплатно :)
                    0
                    Ну давайте не будет устраивать холивар, я говорил про бесплатность определенных модулей кукма по отношению к прошлым версиям, а вы тут астер приплели. :)
                    Лицензии на телефоны были и раньше, и стоили фактом также, а лицензии на сервера убрали вообще.

                    Когда посмотришь уровень надежности астера и стоимость его поддержки на энтерпрайз с тысячами абонентов, подумаешь десять раз, да и поставишь все равно нормальное взрослое решение.

                    ps: Заметьте я не говорю, что астер или другие открытые решения плохи. В своей нише ему равных нет.
                      0
                      :) Давайте без давайте :)

                      Стоили DLU, фактом, меньше. В общем случае Cisco телефония сейчас стала и дороже более неудобная по лицензиям (во всяком случае для меня).

                      Нормальное взрослое решение, говорите? Как я понимаю вы cucm продаете?
                      Я cucm эксплуатирую с версии 3.x. И, честно говоря, не считаю что поддержка его обошлась бы дешевле чем астериска.

                      В крайнем случае в астериске всегда можно дописать что-то, чего в cucm сделать по факту нельзя.
                0
                подскажите, что конкретно пропадает при переезде с колменеджера на sip?
                0
                Как хорошо что я решил купить для конторы телефоны Yealink — ведь и Порнослоника рассматривал… читал доки, но как-то не обратил внимания на такие тяготы провиженинга.

                Про другие телефоны тоже молчу — название параметров вида Pxxx это вообще феерия. И про то, что у многих нет общего конфига и под каждый телефон приходится создавать отдельный по МАКу — это какие-то враги админов делали :)

                Так что в плане администрирования Yealink оказались самыми простыми, да и вообще телефоны неплохие, рекомендую, 300+ штук уже поставили без особых проблем. Правда враги народа гебешники в русской прошивке убрали SRTP :(
                  0
                  А у вас не возникали проблемы со списком контактов? А то я перевёл avaya 9650 на asterisk и на ней нельзя добавить контакты. Все посылают в сторону провизионинга, но не могу найти как

                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.