Как мы Cisco Phone с Asterisk SIP дружили

  • Tutorial
Как мы Cisco Phone с SIP дружили
Завелся тут у клиентов новый зверек Cisco CP6921, с виду нормальный телефон только со своими закосами. До этого все cisco настраивались прямо с самого аппарата, да и были они классом повыше 79хх.
Пришлось разгребать кучу мануалов. Перепробовать кучу конфигов. Пости на любом конфиге телефон понимает инструкцию версии прошивки и в случае чего перепрошивается. На какой то версии конфига он не понимает чего от него вообще мы хотим и раз в секунд 30 перезагружает конфиг. Но ни одного пакета не шлет к астериску.
Подумав обратился в вопросом к сообществу cisco, благо она даже на родном языке уже существует. Там подсказали сайт, где был пример конфига и даже целый бандл настроек. Скачав у установив сию магию на tftp мы увидели что о чудо телефоны стучаться на астериск, но получают отлуп, т.к. не хотят авторизоваться на нем. И затык оказался в том что cisco не умеет работать по udp. Ладно как говорится не проблема. Включили tcp на серваке. И телефоны зарегистрировались. Но стали работать только исходящие вызовы, на все входящие говорят, что порт закрыт, астериск иди ты лесом.
Пошли изучать дальше. Выяснили что они зачем то хотят tls не понятно правда зачем, но хотят. Тут уже пришлось найти как же прикрутить к астериску tsl. У нас Asterisk был установлен из репы, и исходников не было, а генерация сертификата идет утилитой из комплекта исходников, не беда asterisk-opus здесь нашлось то что нужно contrib/scripts/ast_tls_cert, впрочем нужен только сам скрипт, по этому его просто скопировали с веба. Генерация достаточно банальная. (хотя если подумать, то тоже самое можно сделать на голом openssl без скриптов, по аналогии например с генерацией сертификатов для openvpn когда нет его скриптов, например в случае установки на centos)

1. Создать папку для ключей
mkdir /etc/asterisk/keys
2. создать набор сертификатов
./ast_tls_cert -C pbx.mycompany.com -O "My Super Company" -d /etc/asterisk/keys
Дальше остается только добавить настройки в sip.conf (Включение TCP и TLS)
[general]
  tcpenable=yes
  transport=udp,tcp
  tlsenable=yes
  tlsbindaddr=0.0.0.0
  tlscertfile=/etc/asterisk/keys/asterisk.pem
  tlscafile=/etc/asterisk/keys/ca.crt
  tlscipher=ALL
  tlsclientmethod=tlsv1 ;none of the others seem to work with Blink as the client

Рестарт астериска и вуаля у вас рабочии телефоны.
Выжимка минимальной конфигурации.
1. Конфиг телефона SEPXXXXXXXXXX.cnf.xml
2. Диалплан
3. Прошивка (лучше иметь актуальную, да и скачать с циски можно просто зарегавшись там)

Конфиг телефона
<?xml version="1.0" encoding="UTF-8" ?>
<device>
<deviceProtocol>SIP</deviceProtocol>
 
<sshUserId>admin</sshUserId>
<sshPassword>cisco</sshPassword>
 
<devicePool>
  <dateTimeSetting>
    <dateTemplate>D/M/Ya</dateTemplate>
    <timeZone>Ekaterinburg Standard Time</timeZone>
    <ntps>
      <ntp>
        <name>10.0.3.1</name>
        <ntpMode>Unicast</ntpMode>
      </ntp>
    </ntps>
  </dateTimeSetting>
 
  <callManagerGroup>
    <members>
      <member priority="0">
        <callManager>
          <ports>
            <ethernetPhonePort>2000</ethernetPhonePort>
            <sipPort>5060</sipPort>
            <securedSipPort>5061</securedSipPort>
            <voipControlPort>5060</voipControlPort>
          </ports>
          <processNodeName>ASTERISK_IP</processNodeName>
        </callManager>
      </member>
    </members>
  </callManagerGroup>
</devicePool>
 
<commonProfile>
  <phonePassword></phonePassword>
  <backgroundImageAccess>true</backgroundImageAccess>
  <callLogBlfEnabled>3</callLogBlfEnabled>
</commonProfile>
 
<loadInformation>SIP69xx.9-3-3-2</loadInformation>
 
<vendorConfig>
  <disableSpeaker>false</disableSpeaker>
  <disableSpeakerAndHeadset>false</disableSpeakerAndHeadset>
  <pcPort>0</pcPort>
  <settingsAccess>1</settingsAccess>
  <garp>0</garp>
  <voiceVlanAccess>0</voiceVlanAccess>
  <ciscoCamera>1</ciscoCamera>
  <videoCapability>1</videoCapability>
  <usbClasses>0,1,2</usbClasses>
  <sdio>1</sdio>
  <wifi>0</wifi>
  <bluetoothProfile>0,1</bluetoothProfile>
  <powerNegotiation>0</powerNegotiation>
  <autoSelectLineEnable>0</autoSelectLineEnable>
  <webAccess>0</webAccess>
  <sshAccess>0</sshAccess>
  <g722CodecSupport></g722CodecSupport>
  <daysDisplayNotActive>1,2,3,4,5,6,7</daysDisplayNotActive>
  <displayOnTime>08:30</displayOnTime>
  <displayOnDuration>09:30</displayOnDuration>
  <displayIdleTimeout>01:00</displayIdleTimeout>
  <displayOnWhenIncomingCall>1</displayOnWhenIncomingCall>
  <spanToPCPort>1</spanToPCPort>
  <loggingDisplay>1</loggingDisplay>
  <loadServer></loadServer>
</vendorConfig>
 
<enterpriseConfig>
  <usb1>1</usb1>
  <usb2>1</usb2>
  <ciscoCamera>1</ciscoCamera>
  <usbClasses>0,1,2</usbClasses>
  <sdio>1</sdio>
  <bluetooth>1</bluetooth>
  <wifi>1</wifi>
  <bluetoothProfile>0,1</bluetoothProfile>
  <joinAndDirectTransferPolicy>0</joinAndDirectTransferPolicy>
  <videoCapability>1</videoCapability>
  <webAccess>0</webAccess>
  <eapAuthentication>2</eapAuthentication>
  <webProtocol>0</webProtocol>
</enterpriseConfig>
<advertiseG722Codec></advertiseG722Codec>
<networkLocale>United_States</networkLocale>
<networkLocaleInfo>
  <name>United_States</name>
  <uid>64</uid>
  <version>8.5.0.0(1)</version>
</networkLocaleInfo>
 
<deviceSecurityMode>1</deviceSecurityMode>
 
<idleTimeout>0</idleTimeout>
<authenticationURL></authenticationURL>
<directoryURL></directoryURL>
<idleURL></idleURL>
<informationURL></informationURL>
<messagesNumber></messagesNumber>
<messagesURL></messagesURL>
<proxyServerURL></proxyServerURL>
<servicesURL></servicesURL>
<dscpForSCCPPhoneConfig>96</dscpForSCCPPhoneConfig>
<dscpForSCCPPhoneServices>0</dscpForSCCPPhoneServices>
<dscpForCm2Dvce>96</dscpForCm2Dvce>
 
<transportLayerProtocol>4</transportLayerProtocol>
<dndCallAlert>5</dndCallAlert>
<phonePersonalization>1</phonePersonalization>
<rollover>0</rollover>
<singleButtonBarge>0</singleButtonBarge>
<joinAcrossLines>1</joinAcrossLines>
<autoCallPickupEnable>false</autoCallPickupEnable>
<blfAudibleAlertSettingOfIdleStation>0</blfAudibleAlertSettingOfIdleStation>
<blfAudibleAlertSettingOfBusyStation>0</blfAudibleAlertSettingOfBusyStation>
 
<capfAuthMode>0</capfAuthMode>
<capfList>
  <capf>
    <phonePort>3804</phonePort>
  </capf>
</capfList>
 
<certHash></certHash>
<encrConfig>false</encrConfig>
<sipProfile>
  <sipProxies>
    <backupProxy>USECALLMANAGER</backupProxy>
    <backupProxyPort>5060</backupProxyPort>
    <emergencyProxy>USECALLMANAGER</emergencyProxy>
    <emergencyProxyPort>5060</emergencyProxyPort>
    <outboundProxy></outboundProxy>
    <outboundProxyPort></outboundProxyPort>
    <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>true</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>false</remotePartyID>
    <userInfo>None</userInfo>
  </sipStack>
 
  <autoAnswerTimer>0</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>true</alwaysUsePrimeLine>
  <alwaysUsePrimeLineVoiceMail>true</alwaysUsePrimeLineVoiceMail>
  <kpml>3</kpml>
  <natEnabled>false</natEnabled>
  <natAddress>ASTERISK_IP</natAddress>
 
  <stutterMsgWaiting>2</stutterMsgWaiting>
 
  <callStats>false</callStats>
  <silentPeriodBetweenCallWaitingBursts>10</silentPeriodBetweenCallWaitingBursts>
  <disableLocalSpeedDialConfig>false</disableLocalSpeedDialConfig>
 
 
  <startMediaPort>10000</startMediaPort>
  <stopMediaPort>20000</stopMediaPort>
  <voipControlPort>5060</voipControlPort>
  <dscpForAudio>184</dscpForAudio>
  <dscpVideo>136</dscpVideo>
  <dscpForTelepresence>128</dscpForTelepresence>
  <ringSettingBusyStationPolicy>0</ringSettingBusyStationPolicy>
  <dialTemplate>dialplan.xml</dialTemplate>
  <voipControlPort>5060</voipControlPort>
  <phoneLabel>SIP_NUMBER</phoneLabel>
  <sipLines>
    <line button="1" lineIndex="1">
      <featureID>9</featureID>
      <featureLabel>SIP_NUMBER</featureLabel>
      <name>SIP_NUMBER</name>
      <displayName>SIP_NUMBER</displayName>
      <contact></contact>
      <proxy>USECALLMANAGER</proxy>
      <port>5060</port>
      <autoAnswer>
        <autoAnswerEnabled>0</autoAnswerEnabled>
      </autoAnswer>
      <callWaiting>4</callWaiting>
 
      <authName>SIP_NUMBER</authName>
      <authPassword>SIPPASS</authPassword>
 
      <sharedLine>false</sharedLine>
      <messageWaitingLampPolicy>3</messageWaitingLampPolicy>
      <messageWaitingAMWI>1</messageWaitingAMWI>
      <messagesNumber>1000</messagesNumber>
      <ringSettingIdle>4</ringSettingIdle>
      <ringSettingActive>5</ringSettingActive>
 
      <forwardCallInfoDisplay>
        <callerName>true</callerName>
        <callerNumber>false</callerNumber>
        <redirectedNumber>false</redirectedNumber>
        <dialedNumber>true</dialedNumber>
      </forwardCallInfoDisplay>
      <maxNumCalls>4</maxNumCalls>
      <busyTrigger>2</busyTrigger>
    </line>
  </sipLines>
</sipProfile>
 
<phoneServices>
  <provisioning>0</provisioning>
  <phoneService type="1" category="0">
    <name>Missed Calls</name>
    <url>Application:Cisco/MissedCalls</url>
    <vendor></vendor>
    <version></version>
  </phoneService>
  <phoneService type="2" category="0">
    <name>Voicemail</name>
    <url>Application:Cisco/Voicemail</url>
    <vendor></vendor>
    <version></version>
  </phoneService>
  <phoneService type="1" category="0">
    <name>Received Calls</name>
    <url>Application:Cisco/ReceivedCalls</url>
    <vendor></vendor>
    <version></version>
  </phoneService>
  <phoneService type="1" category="0">
    <name>Placed Calls</name>
    <url>Application:Cisco/PlacedCalls</url>
    <vendor></vendor>
    <version></version>
  </phoneService>
</phoneServices>
</device>

ARMADIK подсказывает
Можно запустить по разному транспорту<transportLayerProtocol>2</transportLayerProtocol>
4 — Use default transport protocol (in old firmwares — udp, in latest — tcp), may be this also a TLS selection
2 — Prefer use UDP
1 — Prefer use TCP
Добавить 2 линию на телефон очень просто, нужно создать еще одну секцию line в sipLines
Примерно вот так
<sipLines>
  <line button="1" lineIndex="1">

    …
  </line>
  <line button="2" lineIndex="2">
    …
  </line>
</sipLines>
Диалплан, просто и без изысков
<DIALTEMPLATE>
  <TEMPLATE MATCH="*" Timeout="6"/>
</DIALTEMPLATE>

Ну и сама прошивка это 4 файла
BOOT69xx.0-0-0-14.zz.sgn
DSP69xx.12-4-122-02-121029.zz.sgn
SIP69xx.9-3-3-2.loads
SIP69xx.9-3-3-2.zz.sgn
Имя loads указывается в секции
<loadInformation>SIP69xx.9-3-3-2</loadInformation>

П.С.
Так же выяснили что cisco своеобразная
<webAccess>0</webAccess>

Это означает что Web доступ разрешен.

Similar posts

Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 7

    0
    Честно сказать, у меня просто слов нет… А клиент с Вами не советовался при покупке аппарата?
    • UFO just landed and posted this here
        0
        Клиент не то, что не советовался. А это вообще был «подарок руководства сотрудникам на какой то праздник» выбранный самостоятельно (руководством) и мы узнали об аппаратах спустя месяц как они появились и их таки попросили подключить в сеть.
        0
        Мы пошли другим путём, собрали модуль chan_sccp и завели данное чудо техники по протоколу Skinny (SCCP).
        Даже не знаю кому было больнее решать эту задачу, Вам или мне :)
          0
          Даже не знаю. Недавно у меня (я не автор поста, если что) у клиента завелось штук 10 7960-х и парочку 7961 + 7914 (панелька). Сначала все через skinny поднял, работало. Но в конце концов все равно все перешли на чистый SIP. Даже удалось 7961 + 7914 поднять на SIP. Правда, только TCP, но без TLS.
            0
            Эти модели куда более адекватные, впрочем и в посте указано что с 79хх моделями проблем никогда не было.
          +1
          Можно запустить по разному транспорту
          transportLayerProtocol 2 /transportLayerProtocol

          4 — Use default transport protocol (in old firmwares — udp, in latest — tcp), may be this also a TLS selection
          2 — Prefer use UDP
          1 — Prefer use TCP

          Only users with full accounts can post comments. Log in, please.