Новости
Обзоры и тесты
Техно
Советы
Разное
Главная » Техно

Настройка IP телефона Cisco 79XX для работы по протоколу SIP

Добавлено на 13.03.2015 – 11:50 22 комментария

Как известно, корпоративные телефоны Cisco 79ой серии качественные и удобные, но к сожалению, ориентированы на работу c IP АТС Cisco Unified Communications Manager и для их перенастройки на работу с другой IP АТС, например Asterisk, нужно выполнить не тривиальные действия.Главная проблема перенастройки, заключается в том, что у телефонов Cisco отсутствует привычный веб-интерфейс для конфигурирования как у других телефонов, вместо этого нужно писать xml конфигурацию и подгружать в телефон их по TFTP.

Второй момент – по умолчанию в телефонах загружена прошивка работающая по протоколу SCCP(Cisco Skinny Client Control Protocol)- проприетарный протокол созданный для VoIP продуктов Cisco, прошивку также нужно сменить на версию с поддержкой SIP.
Процесс загрузки и самонастройки телефона выглядит следующим образом:
После включения телефона, в случае использования DHCP, телефон запрашивает настройки IP и опцию 150 (option voip-tftp-servers) адресTFTP-сервера, откуда телефон автоматически загрузит файлы конфигурации и прошивку в случае необходимости. После получения настроек IP по DHCP и адреса TFTP-сервера, телефон запрашивает файлы конфигурации, среди которых основной файл SEP-MAC-адрес-телефона.cnf.xml который содержит версию прошивки которую нужно загрузить, настройки локализации, в нашем случае для России, настройки SIP линий, кнопок телефона, плана набора,адрес сервера XML сервисов и прочих настроек. Далее, телефон проверяет соответствие настроек конфигурации с теми, что загружены и в случае несоответствия загружает новые файлы.
Итак, в качестве примера используется IP телефон Cisco 7945G и IP АТС Asterisk,
нам понадобится:

  • DHCP-сервер
  • TFTP-сервер
  • NTP-сервер
  • Прошивка SIP cmterm-7945_7965-sip.8-5-4.zip
  • Файлы русской локализации po-locale-ru_RU-8.4.3.1000-1.exe
  • HTTP-сервер для XML-сервисов, если необходимо загрузить, например, корпоративный справочник.

В качестве платформы я использую дистрибутив CentOS. Сначала необходимо настроить DHCP-сервер и указать в опции option voip-tftp-servers адрес хоста где будет работать TFTP-сервер на котором будут лежать все загрузочные файлы для IP телефона.
Пример содержимого конфигурационого файла dhcpd.conf дистрибутива CentOS:

option domain-name "localdomain";
authoritative;
option domain-name-servers 192.168.1.253;
option voip-tftp-servers code 150 = ip-address;
option voip-tftp-servers 192.168.1.253;
subnet 192.168.1.0 netmask 255.255.255.0 {
range dynamic-bootp 192.168.1.10 192.168.1.250;
option broadcast-address 192.168.1.255;
option routers 192.168.1.253; }

Телефоны будут получать IP из сети 192.168.1.0, Asterisk, TFTP-сервер, и шлюз по умолчанию будет иметь IP=192.168.1.253.

Кстати, можно обойтись без DHCP-сервера, через меню телефона назначить ему статический IP и вручную указать TFTP-сервер.
Для разблокировки настроек телефона нажать **#
Также находясь в меню можно перезагрузить телефон, для этого нажать **#**
Далее, запускаем NTP сервер для синхронизации времени на телефона, в моем случае достаточно запустить сервис ntpd из коробки, для дистрибутива CentOS.
Теперь устанавливаем http-сервер, он понадобится только если вы захотите использовать, например, корпоративный справочник на телефоне, при нажатии кнопки services, телефон по http обратится по указанному в конфигурации адресу и покажет записи, примеров создания справочников в интернете много, я лишь ограничусь самым простым примером статического справочника.
просто выложу файл xmldirectory.xml в директорию ccmcip на сервере. Его содержимое приведено ниже,а ссылка на него есть xml файле конфигурации IP-телефона, в тегах

<directoryURL></directoryURL>

Далее, устанавливаем и запускаем TFTP-сервер.
У меня это модуль службы xinetd, который устанавливается из пакета. Из пакетов также легко ставится DHCP-сервер и NTP-сервер.
Конфигурация службы TFTP, файл /etc/xinetd.d/tftp

service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
bind = 192.168.1.253
}

Директория сервера в которой будут лежать файлы /var/lib/tftpboot, в неё следует поместить все файлы прошивок, локали и конфигурации.
Как пишут в Интернете пользователи, версия cmterm-7945_7965-sip.8-5-4.zip самая удачная, и лучше использовать именно её. Сами файлы без труда можно найти в интернете, на сайте Cisco никакие прошивки без сервисного контракта естественно не скачать.
Итак, распаковываем архив в корень TFTP, должны быть следующие файлы:

apps45.8-5-4TH1-6.sbn
cnu45.8-5-4TH1-6.sbn
cvm45sip.8-5-4TH1-6.sbn
dsp45.8-5-4TH1-6.sbn
jar45sip.8-5-4TH1-6.sbn
SIP45.8-5-4S.loads
term45.default.loads
term65.default.loads

Теперь нужно скопировать файлы из po-locale-ru_RU-8.4.3.1000-1.exe. Для этого нужно запустить файл, больше ничего не нажимать(если нажать, будет выдана ошибка а директория с интересующими нас файлами будет удалена из %temp%), затем перейти в директорию %temp% для Windows там отсортировать директории по времени создания. Нужная нам директория будет иметь имя наподобие {E87E99FE-6D8C-4971-B6E4-61078D70A350} на TFTP-сервер нужно скопировать содержимое этой директории по пути /Disk1\ISTeleport\Russian_Russian_Federation\PROGRA~\Cisco\TFTPPath\Russian_Russian_Federation
в директорию Russian_Russian_Federation созданную в корне TFTP-сервера, список файлов:

7905-kate.xml
7920-dictionary.xml
7920-font.xml
7920-kate.xml
7921-dictionary.xml
7921-font.dat
7921-kate.utf-8.xml
7921-kate.xml
7960-dictionary.xml
7960-dictionary-ext.xml
7960-font.xml
7960-kate.xml
be-sccp.jar
be-sip.jar
ipc-sccp.jar
mk-sccp.jar
mk-sip.jar
SCCP-dictionary.utf-8.xml
SCCP-dictionary.xml
SCCP-dictionary-ext.xml
tc-sccp.jar
tc-sip.jar
td-sccp.jar
td-sip.jar
7905-dictionary.xml
7905-font.xml

Теперь необходимо подготовить файл конфигурации телефона, мой телефон имеет MAC-адрес 00235E186B89, поэтому файл будет называться SEP00235E186B89.cnf.xml
Содержимое файла конфигурации:

<?xml version="1.0" encoding="UTF-8"?>
<!--Файл должен обязательно начинаться с этой строки>
<device xsi:type="axl:XIPPhone" ctiid="966" uuid="{ec039a47-2b24-d05b-6ae3-2c18e269a9df}">
<!--Содержимое тега device должно иметь такой вид, причем нужно указать uuid >
<fullConfig>true</fullConfig>
<deviceProtocol>SIP</deviceProtocol>
<sshUserId></sshUserId>
<sshPassword></sshPassword>
<devicePool>
<revertPriority>0</revertPriority>
<name>Default</name>
<dateTimeSetting>
<name>CMLocal</name>
<dateTemplate>D.M.Y</dateTemplate>
<timeZone>Russian Standard/Daylight Time</timeZone>
<ntps>
<ntp>
<name>192.168.1.253</name>
<ntpMode>Unicast</ntpMode>
<!--Я использую NTP сервер>
</ntp>
</ntps>
</dateTimeSetting>
<callManagerGroup>
<name>Default</name>
<tftpDefault>false</tftpDefault>
<members>
<member priority="0">
<callManager>
<name>192.168.1.253</name>
<!--IP адрес сервера Asterisk>
<description>Asterisk</description>
 <ports>
<ethernetPhonePort>2000</ethernetPhonePort>
<sipPort>5060</sipPort>
<securedSipPort>5061</securedSipPort>
<mgcpPorts>
<listen>2427</listen>
<keepAlive>2428</keepAlive>
</mgcpPorts>
</ports>
<processNodeName>127.0.0.1</processNodeName>
</callManager>
</member>
</members>
</callManagerGroup>
<srstInfo>
<name>Disable</name>
<srstOption>Disable</srstOption>
<userModifiable>false</userModifiable>
<ipAddr1></ipAddr1>
<port1>2000</port1>
<ipAddr2></ipAddr2>
<port2>2000</port2>
<ipAddr3></ipAddr3>
<port3>2000</port3>
<sipIpAddr1></sipIpAddr1>
<sipPort1>5060</sipPort1>
<sipIpAddr2></sipIpAddr2>
<sipPort2>5060</sipPort2>
<sipIpAddr3></sipIpAddr3>
<sipPort3>5060</sipPort3>
<isSecure>false</isSecure>
</srstInfo>
<mlppDomainId>-1</mlppDomainId>
<mlppIndicationStatus>Default</mlppIndicationStatus>
<preemption>Default</preemption>
<connectionMonitorDuration>120</connectionMonitorDuration>
</devicePool>
<sipProfile>
<sipProxies>
<registerWithProxy>true</registerWithProxy>
</sipProxies>
<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>300</timerRegisterExpires>
<!--Я поставил время 300, очень советую включить qualify на Asterisk>
<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>
<phoneLabel>Kudryavtsev</phoneLabel>
<!--Метка которая будет выводится на телефоне в верхнем правом углу экрана, максимум 11 символов без пробелов>
<stutterMsgWaiting>2</stutterMsgWaiting>
<callStats>true</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">
<!--Ниже в теге line button="1" Настройка первой линии, также настраиваются остальные линии, которые привязаны к боковым кнопкам слева от экрана>
<featureID>9</featureID>
<featureLabel>Ignat 100</featureLabel>
<!--Метка которая будет отображаться на экране около кнопки линии>
<proxy>192.168.1.253</proxy>
<!--IP адрес сервера Asterisk>
<port>5060</port>
<!--Порт SIP -->
<name>100</name>
<!--отобразится в верхнем правом углу экрана телефона>
<displayName>100</displayName>
<autoAnswer>
<autoAnswerEnabled>2</autoAnswerEnabled>
</autoAnswer>
<callWaiting>3</callWaiting>
<authName>100</authName>
<authPassword>somepass</authPassword>
<--Имя и пароль для авторизации на Asterisk в примере линия 100>
<sharedLine>false</sharedLine>
<messageWaitingLampPolicy>3</messageWaitingLampPolicy>
<messageWaitingAMWI>0</messageWaitingAMWI>
<messagesNumber></messagesNumber>
<ringSettingIdle>4</ringSettingIdle>
<ringSettingActive>5</ringSettingActive>
<contact>100</contact>
<forwardCallInfoDisplay>
<callerName>true</callerName>
<callerNumber>false</callerNumber>
<redirectedNumber>false</redirectedNumber>
<dialedNumber>true</dialedNumber>
</forwardCallInfoDisplay>
</line>
<line button="2" lineIndex="2">
<featureID>9</featureID>
<featureLabel>101</featureLabel>
<proxy>192.168.1.253</proxy>
<port>5060</port>
<name>101</name>
<displayName>101</displayName>
<autoAnswer>
<autoAnswerEnabled>2</autoAnswerEnabled>
</autoAnswer>
<callWaiting>3</callWaiting>
<authName>101</authName>
<authPassword>somepass2</authPassword>
<sharedLine>false</sharedLine>
<messageWaitingLampPolicy>3</messageWaitingLampPolicy>
<messageWaitingAMWI>0</messageWaitingAMWI>
<messagesNumber></messagesNumber>
<ringSettingIdle>4</ringSettingIdle>
<ringSettingActive>5</ringSettingActive>
<contact>101</contact>
<forwardCallInfoDisplay>
<callerName>true</callerName>
<callerNumber>false</callerNumber>
<redirectedNumber>false</redirectedNumber>
<dialedNumber>true</dialedNumber>
</forwardCallInfoDisplay>
<maxNumCalls>4</maxNumCalls>
<busyTrigger>2</busyTrigger>
</line>
</sipLines>
<externalNumberMask></externalNumberMask>
<voipControlPort>5060</voipControlPort>
<!--Порт SIP -->
<dscpForAudio>184</dscpForAudio>
<dscpVideo>136</dscpVideo>
<ringSettingBusyStationPolicy>0</ringSettingBusyStationPolicy>
<dialTemplate>dialplan.xml</dialTemplate>
<!--второй обязательный файл, его содержимое приводится ниже>
<alwaysUsePrimeLine>false</alwaysUsePrimeLine>
<alwaysUsePrimeLineVoiceMail>false</alwaysUsePrimeLineVoiceMail>
</sipProfile>
<MissedCallLoggingOption>10</MissedCallLoggingOption>
<commonProfile>
<phonePassword></phonePassword>
<backgroundImageAccess>true</backgroundImageAccess>
<callLogBlfEnabled>3</callLogBlfEnabled>
</commonProfile>
<loadInformation>SIP45.8-5-4S</loadInformation>
<!--Версия нашей прошивки SIP которая будет загружена если на телефоне отличая от неё версия-->
<vendorConfig>
<disableSpeaker>false</disableSpeaker><disableSpeakerAndHeadset>false</disableSpeakerAndHeadset><forwardingDelay>1</forwardingDelay><pcPort>0</pcPort><settingsAccess>1</settingsAccess><garp>1</garp><voiceVlanAccess>0</voiceVlanAccess><videoCapability>0</videoCapability><autoSelectLineEnable>0</autoSelectLineEnable><webAccess>0</webAccess><daysDisplayNotActive>1,7</daysDisplayNotActive><displayOnTime>07:30</displayOnTime><displayOnDuration>10:30</displayOnDuration><displayIdleTimeout>01:00</displayIdleTimeout><spanToPCPort>1</spanToPCPort><loggingDisplay>1</loggingDisplay><loadServer></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></logServer><g722CodecSupport>0</g722CodecSupport><headsetWidebandUIControl>0</headsetWidebandUIControl><headsetWidebandEnable>0</headsetWidebandEnable><peerFirmwareSharing>0</peerFirmwareSharing><enableCdpSwPort>1</enableCdpSwPort><enableCdpPcPort>1</enableCdpPcPort><enableLldpSwPort>1</enableLldpSwPort><enableLldpPcPort>1</enableLldpPcPort><lldpAssetId></lldpAssetId><powerPriority>0</powerPriority><ehookEnable>0</ehookEnable><detectCMConnectionFailure>0</detectCMConnectionFailure><minimumRingVolume>0</minimumRingVolume><handsetHeadsetMonitor>1</handsetHeadsetMonitor><useEnblocDialing>1</useEnblocDialing><SWRemoteConfig>0</SWRemoteConfig><PCRemoteConfig>0</PCRemoteConfig><PortAutoLinkSync>0</PortAutoLinkSync></vendorConfig>
<userLocale>
<name>Russian_Russian_Federation</name>
<!--Здесь и ниже указывает что нужно использовать русскую локаль-->
<uid>5</uid>
<langCode>ru_RU</langCode>
<version></version>
<winCharSet>UTF-8</winCharSet>
</userLocale>
<networkLocale>Russian_Federation</networkLocale>
<networkLocaleInfo>
<name>Russian_Federation</name>
<uid>50</uid>
<version></version>
</networkLocaleInfo>
<deviceSecurityMode>1</deviceSecurityMode>
<idleTimeout>0</idleTimeout>
<authenticationURL>http://192.168.1.253/ccmcip/authenticate.jsp</authenticationURL>
<directoryURL>http://192.168.1.253/ccmcip/xmldirectory.xml</directoryURL>
<!--В моем случае ссылки не используются>
<idleURL></idleURL>
<informationURL>http://192.168.1.253/ccmcip/GetTelecasterHelpText.jsp</informationURL>
<!--В моем случае ссылка не используется>
<messagesURL></messagesURL>
<proxyServerURL></proxyServerURL>
<servicesURL>http://192.168.1.253/ccmcip/xmldirectory.xml</servicesURL>
<!--Путь к статическому файлу содержащему справочник, он откроется при нажатии на телефоне кнопки services>
<dscpForSCCPPhoneConfig>96</dscpForSCCPPhoneConfig>
<dscpForSCCPPhoneServices>0</dscpForSCCPPhoneServices>
<dscpForCm2Dvce>96</dscpForCm2Dvce>
<transportLayerProtocol>4</transportLayerProtocol>
<dndCallAlert>5</dndCallAlert>
<phonePersonalization>0</phonePersonalization>
<singleButtonBarge>0</singleButtonBarge>
<joinAcrossLines>0</joinAcrossLines>
<capfAuthMode>0</capfAuthMode>
<capfList>
<capf>
<phonePort>3804</phonePort>
<processNodeName>192.168.1.253</processNodeName>
</capf>
</capfList>
<certHash></certHash>
<encrConfig>false</encrConfig>
<advertiseG722Codec>1</advertiseG722Codec>
<mobility>
<handoffdn></handoffdn>
<dtmfdn></dtmfdn>
<ivrdn>3999</ivrdn>
<dtmfHoldCode>*81</dtmfHoldCode>
<dtmfExclusiveHoldCode>*82</dtmfExclusiveHoldCode>
<dtmfResumeCode>*83</dtmfResumeCode>
<dtmfTxfCode>*84</dtmfTxfCode>
<dtmfCnfCode>*85</dtmfCnfCode>
</mobility>
</device>

Приведенная конфигурация является рабочей, её можно скопировать и перенастроить под свой телефон выделенные жирным строки конфигурации, также можно удалить комментарии заключенные в скобки

<!-- -->

Кстати замечу что тег

<webAccess>0</webAccess>

говорит о том что доступ на веб-интерфейс телефона будет открыт, это полезно для отладки телефона и просмотра настроек.
Файл dialplan.xml обязательно нужен, без него с телефона ничего будет не набрать,
самый простой конфиг позвояющий набирать любые цифры:

<DIALTEMPLATE>
<TEMPLATE MATCH="*" Timeout="3"/> <!-- Anything else -->
</DIALTEMPLATE>

Более сложные планы набора можно легко найти в интернете.
Следующий файл справочник xmldirectory.xml в директории
/var/www/ccmcip/var/www – корневая директория apache в CentOS.
Вот его содержимое:

<?xml version="1.0" encoding="UTF-8"?>
<CiscoIPPhoneDirectory>
<Title>Personal Directory</Title>
<Prompt>Prompt text</Prompt>
<DirectoryEntry>
<Name>Ignat</Name>
<Telephone>100</Telephone>
</DirectoryEntry>
<DirectoryEntry>
<Name>Ignat2</Name>
<Telephone>2253434</Telephone>
</DirectoryEntry>
</CiscoIPPhoneDirectory>

Здесь в качестве примера 2 записи, ограничение прошивки на 32 записи.
Но при помощи «софт» кнопок можно реализовать постраничную прокрутку, в интернете есть примеры реализации.
Все, теперь все подготовительные работы выполнены, осталось настроить Asterisk:
В версии прошивки 8-5-4S есть поддержка UDP в качестве транспорта.
Поэтому нам нужно просто добавить абонента в sip.conf:

[100]
deny=0.0.0.0/0.0.0.0
permit=192.168.1.0/255.255.255.0
type=friend
context=phones
host=dynamic
secret=somepass
dtmfmode=rfc2833
call-limit=2
disallow=all
allow=ulaw
allow=alaw
pickupgroup=1
callgroup=1
qualify=yes

Здесь важна настройка qualify=yes она говорит о том что телефон нужно «пинговать» SIP опциями. Без этой настройки у меня периодически отваливалась регистрация на телефоне 7945.
Все готово, можно подключать телефон, если все корректно настроено, устройство получит IP, загрузит конфигурацию и прошивку с TFTP-сервера и перепрошьется, затем загрузит настройки русской локализации, все меню отобразятся на русском языке, затем IP-телефон зарегистрируется и будет готов к работе.

Автор: Игнат Кудрявцев

Tags: , , , , ,

22 комментария »

Оставить комментарий

Напишите Ваш комментарий ниже. Также Вы можете подписаться на комментарии к материалу через RSS

Вы можете использовать следующие теги:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> 

Мы поддерживаем Gravatar.

Контроль спама: *