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 і ўкладзены ў яго вузел версія. Налады будуць ужытыя толькі калі версія файла будзе вышэй, чым у бягучых налад у апараце. Даведацца пра гэта значэнне можна праз .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 72 C 6 61 74
    Для прадухілення выпадковай змены ўсталяванай паслядоўнасці знакаў рэкамендуецца пачынаць канфігурацыйны файл са радка:
    # 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 сервера для падлучэння.

Калі канфігурацыя захоўваецца ў тэкставым файле, параметры не патрабуюць ніякай групоўкі і ідуць у любым парадку. Радкі, якія пачынаюцца з #, разглядаюцца як каментары.

У выпадку, калі наладкі прадстаўлены ў фармаце xml, яны павінны быць укладзены ў вузел , які ў сваю чаргу павінен быць укладзены ў . Усе параметры запісваюцца ў выглядзе адпаведных тэгаў са значэннем параметра ўнутры.
Прыклад наладкі

1.0 8 1 1 SIP_PWD User# 271 1 271 270 109 ADMIN_PWD USER_PWD tatoeba 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 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
#Адкрытыя сетку англійскай мовы, значныя значэнні: English, Chinese_S, Turkish, Portuguese, Spanish, Italian, French, Russian, Deutsch and Czech.
lang.wui = Belarus
#Адкрытыя LCD language, valid values ​​are: English (default), Chinese_S, Chinese_T, German, French, Turkish, Italian, Polish, Spanish and Portuguese.
lang.gui = Belarus
#Configure time zone and time zone name. Часовыя зоны ад -11 to +12, default value is +8.
#Падрабязны час zone name з'яўляецца 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 domain name або IP address of the NTP server. The default value is cn.pool.ntp.org.
local_time.ntp_server1 = 10.1.1.4
#Configure logo mode LCD LCD; 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 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 для SIP-сервер. The default value is 5060.
account.1.sip_server_port = 5060

У выніку, дзякуючы выдатнай функцыі auto-provision, прадугледжанай у згаданых мной тэлефонах, з падключэннем да сеткі новых апаратаў не ўзнікла ніякіх праблем. Усё звялося да высвятлення MAC-адрасу тэлефона і генерацыі канфігурацыйнага файла па шаблоне.

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

Дзякуй за ўвагу.

Крыніца: habr.com

Дадаць каментар