Pull to refresh

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

Reading time 13 min
Views 41K
Как мы 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 доступ разрешен.
Tags:
Hubs:
+1
Comments 7
Comments Comments 7

Articles