Как стать автором
Обновить

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

Время на прочтение13 мин
Количество просмотров42K
Как мы 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 доступ разрешен.
Теги:
Хабы:
Всего голосов 9: ↑5 и ↓4+1
Комментарии7

Публикации

Истории

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
19 сентября
CDI Conf 2024
Москва
20 – 22 сентября
BCI Hack Moscow
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн