Wednesday, September 3, 2014

Cisco 7941G (SIP 9.3) и Asterisk (11)

Лирическое отступление.

Cisco 79xx series это некая "классика" в мире IP телефонии. Не знаю у кого они купили дизайн, но он оказался очень удачным. Его воспроизводили и воспроизводят другие производители, его часто можно встретить в фильмах в качестве обязательного офисного аксессуара (хотя скорее это product placement), он приятен на вид, удобен в эксплуатации и достаточно прост в производстве. Сама линейка 79xx конечно очень разнообразна, там аппараты на разных ОС, разного функционала. Сейчас речь о 7941G и его ближайших собратьях.

В сети встречается множество негативных отзывов по этой модели в связке с Asterisk. И связь не держит и настройки слетают, nat не держит, да и сама его настройка вызовет у многих головную боль. На самом деле этот аппарат просто не предназначен для работы с сторонними PBX. Он создан специально для Cisco Call Manager и изначально даже не имел SIP прошивки. SIP был добавлен позже в качестве альтернативы проприетарному SCCP (skinny). Call Manager в свою очередь создавался для корпораций и крупных инсталляций. Настройкой одного-двух аппаратов в таких системах никто не занимается, счет там идет на сотни или тысячи. Весь механизм настройки и отладки создан для масштабных развертываний. Аппараты серии UC (79xx) работают в такой среде как родные, и не вызывают проблем.

Хотите телефон для SMB сектора, со всякими Asterisk - Вам просто нужен другой телефон. Для этих сред создавались аппараты SPAxxx.
Закупать для подключения к простым PBX новые аппараты серии UC просто не выгодно, они стоят в разы дороже. Другое дело вторичный рынок. Именно так чаще всего и попадают телефоны 79xx в среду SMB. Ценник на эти аппараты бу достаточно гуманный, качество отличное, потому и берут. За 30-100 баксов можно купить отличный аппарат. И не стоит жаловаться на сложность настройки, просто аппарат не для таких сред :)
После подключения работают телефоны стабильно. Несравнимо стабильнее чем например Avaya старых серий.

Подготовка.

Подготовка к использованию телефонов Cisco UC в среде Asterisk сводится к:
  • прошивке аппарата.
  • поднятию tftp сервера на Asterisk или в другом месте (если еще не поднят)
  • созданию и выкладыванию файлов конфигурации на tftp сервер для каждого телефона отдельно. (я использую OSS endpoint manager для автоматизации создания конфигов)
  • настройке опций на DHCP сервере, помогающих телефону найти сервер с конфигой.

Расписывать шаги подробно я здесь не буду, достаточно ссылок и файлов в конце записи.

Поскольку потратил день на поиск в сети рабочей конфигурации для подключения аппаратов Cisco 7941G к Asterisk, то выложу их здесь. Вдруг еще потребуются.
Вот такой конфиг у меня заработал с прошивкой SIP41.9-3-1SR4-1S и Asterisk 11. Он базовый, и мне лень его дальше копать.

Конфигурация.


SEPMAC.cnf.xml:

<?xml version="1.0" ?>
<device>
<deviceProtocol>SIP</deviceProtocol>
<sshUserId></sshUserId>
<sshPassword></sshPassword>
<devicePool>
 <dateTimeSetting>
    <dateTemplate>M/D/Y</dateTemplate>
    <timeZone>Russian Standard/Daylight Time</timeZone>
    <ntps>
         <ntp>
             <name>192.168.0.3</name>
             <ntpMode>Unicast</ntpMode>
         </ntp>
    </ntps>
 </dateTimeSetting>
 <callManagerGroup>
    <members>
       <member priority="0">
          <callManager>
             <ports>
                <sipPort>5060</sipPort>
                <securedSipPort>5061</securedSipPort>
             </ports>
             <processNodeName>192.168.0.3</processNodeName>
          </callManager>
       </member>
    </members>
 </callManagerGroup>
</devicePool>
<sipProfile>
 <sipProxies>
    <backupProxy></backupProxy>
    <backupProxyPort></backupProxyPort>
    <emergencyProxy></emergencyProxy>
    <emergencyProxyPort></emergencyProxyPort>
    <outboundProxy>192.168.0.3</outboundProxy>
    <outboundProxyPort>5060</outboundProxyPort>
    <registerWithProxy>true</registerWithProxy>
 </sipProxies>
 <sipStack>
    <sipInviteRetx>6</sipInviteRetx>
    <sipRetx>10</sipRetx>
    <timerInviteExpires>180</timerInviteExpires>
    <timerRegisterExpires>1200</timerRegisterExpires>
    <timerRegisterDelta>5</timerRegisterDelta>
    <timerKeepAliveExpires>120</timerKeepAliveExpires>
    <timerSubscribeExpires>120</timerSubscribeExpires>
    <timerSubscribeDelta>5</timerSubscribeDelta>
    <timerT1>500</timerT1>
    <timerT2>4000</timerT2>
    <maxRedirects>70</maxRedirects>
    <remotePartyID>false</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>
 <alwaysUsePrimeLine>false</alwaysUsePrimeLine>
 <alwaysUsePrimeLineVoiceMail>false</alwaysUsePrimeLineVoiceMail>
 <kpml>3</kpml>
 <natReceivedProcessing>true</natReceivedProcessing>
 <natEnabled>false</natEnabled>
 <natAddress></natAddress>
 <phoneLabel>test</phoneLabel>
 <stutterMsgWaiting>1</stutterMsgWaiting>
 <callStats>false</callStats>
 <silentPeriodBetweenCallWaitingBursts>10</silentPeriodBetweenCallWaitingBursts>
 <disableLocalSpeedDialConfig>false</disableLocalSpeedDialConfig>
 <startMediaPort>20000</startMediaPort>
 <stopMediaPort>24999</stopMediaPort>
 <sipLines>
  <line
     button="1">
       <featureID>9</featureID>
       <featureLabel>100</featureLabel>
       <proxy>USECALLMANAGER</proxy>
       <port>5060</port>
       <name>100</name>
       <displayName>100</displayName>
       <autoAnswer>
          <autoAnswerEnabled>2</autoAnswerEnabled>
       </autoAnswer>
       <callWaiting>3</callWaiting>
       <authName>100</authName>
       <authPassword>password</authPassword>
       <sharedLine>false</sharedLine>
       <messageWaitingLampPolicy>1</messageWaitingLampPolicy>
       <messagesNumber>880880</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>
</sipLines>
 <voipControlPort>5060</voipControlPort>
 <dscpForAudio>184</dscpForAudio>
 <ringSettingBusyStationPolicy>0</ringSettingBusyStationPolicy>
 <dialTemplate>dialplan.xml</dialTemplate>
</sipProfile>
<commonProfile>
 <phonePassword></phonePassword>
 <backgroundImageAccess>true</backgroundImageAccess>
 <callLogBlfEnabled>2</callLogBlfEnabled>
</commonProfile>
<loadInformation>SIP41.9-3-1SR4-1S</loadInformation>
<vendorConfig>
 <disableSpeaker>false</disableSpeaker>
 <disableSpeakerAndHeadset>false</disableSpeakerAndHeadset>
 <pcPort>0</pcPort>
 <settingsAccess>1</settingsAccess>
 <garp>1</garp>
 <voiceVlanAccess>0</voiceVlanAccess>
 <videoCapability>0</videoCapability>
 <autoSelectLineEnable>0</autoSelectLineEnable>
 <webAccess>0</webAccess>
 <spanToPCPort>0</spanToPCPort>
 <loggingDisplay>1</loggingDisplay>
 <loadServer></loadServer>
</vendorConfig>
<versionStamp></versionStamp>
<userLocale>
 <name></name>
<uid></uid>
 <langCode></langCode>
<version></version>
 <winCharSet></winCharSet>
</userLocale>
<deviceSecurityMode>1</deviceSecurityMode>
<authenticationURL></authenticationURL>
<directoryURL></directoryURL>
<idleURL></idleURL>
<informationURL></informationURL>
<messagesURL></messagesURL>
<proxyServerURL></proxyServerURL>
<servicesURL></servicesURL>
<dscpForSCCPPhoneConfig>96</dscpForSCCPPhoneConfig>
<dscpForSCCPPhoneServices>0</dscpForSCCPPhoneServices>
<dscpForCm2Dvce>96</dscpForCm2Dvce>
<transportLayerProtocol>2</transportLayerProtocol>
<capfAuthMode>0</capfAuthMode>
<capfList>
 <capf>
    <phonePort>3804</phonePort>
 </capf>
</capfList>
<certHash></certHash>
<encrConfig>false</encrConfig>
</device>


XMLDefault.cnf.xml

<!--
#################PROVISIONER.NET#################
# This Configuration file was generated from the Provisioner.net Library by {$provisioner_processor_info}
# Generated on: {$provisioner_generated_timestamp}
#
# Provisioner Information Follows:
# Brand Revision Timestamp: {$provisioner_brand_timestamp}
# Family Revision Timestamp: {$provisioner_family_timestamp}
#
##################################################
-->
<Default>
<loadInformation8 model="IP Phone 7940">P0S3-8-12-00</loadInformation8>
<loadInformation7 model="IP Phone 7960">P0S3-8-12-00</loadInformation7>
<loadInformation435 model="Cisco 7945">SIP45.8-4-2S</loadInformation435>
<loadInformation436 model="Cisco 7965">SIP45.8-4-2S</loadInformation436>
<loadInformation30006 model="IP Phone 7970">SIP70.8-0-3S</loadInformation30006>
<loadInformation307 model="IP Phone 7911">SIP11.8-5-4S</loadInformation307>
<loadInformation309 model="Cisco 7941G-GE">SIP41.9-3-1SR4-1S</loadInformation309>
</Default>



Dialplan.xml

<DIALTEMPLATE>
<TEMPLATE MATCH="*" Timeout="0"/>
<TEMPLATE MATCH="1." TIMEOUT="1"/>
<TEMPLATE MATCH="2." TIMEOUT="1"/>
<TEMPLATE MATCH="7.........." TIMEOUT="3"/>
<TEMPLATE MATCH="......" TIMEOUT="2"/>
<TEMPLATE MATCH="8.........." TIMEOUT="3"/>
</DIALTEMPLATE>


Правда я использую OSS Endpoint плагин, так что в моем случае часть заменяется переменными, но в целом всё так. Для быстрой и комфортной перепрошивки одного - двух аппаратов я использую приложение landvcfd. Нет нужды поднимать TFTP, создавать xml шаблоны для обновления.

Ссылки и используемые материалы.

Последние версии прошивок и локализаций выложены в бесплатном доступе на сайте Cisco, для скачивания достаточно простой регистрации.
Все необходимые файлы выложены здесь.
А эти несколько ссылок помогут с настройкой и прошивкой: