Wednesday, May 15, 2013

Плечом к плечу. Связываем Cisco СМЕ и Asterisk через SIP



 В этой статье мы наладим связь между двумя конкурирующими продуктами IP-телефонии: Cisco CME и Asterisk. Обмениваться данными между собой они будут по протоколу SIP, который одинаково хорошо поддерживается в обоих АТС
Разделим статью на две части: настройка Asterisk и, соответственно, настройка CME.


Asterisk

Несмотря на все богатство функционала астериска мы воспользуемся лишь мизерной его частью. Все, что нам необходимо, это отредактировать всего два файла. Первый это /etc/asterisk/sip.conf, в котором задаются настройки dial-peer-ов. Начнем с него:
[general]
context=default
transport=udp
[general] - обязательная секция, все, что здесь указано применяется ко всем остальным секциям
context=default  -  этот параметр будем позже использовать в номерном плане.
transport=udp - используем протокол udp
Дальше описаны секции (в квадратных скобках). Каждая несет в себе настройки для каждого подключающегося dial-peer (основная часть это IP-телефоны). Создадим отдельную секцию для СМЕ и укажем настройки подключения.
[cisco]
type=peer
password=1234
host=192.168.10.20
defaultuser=cisco
disallow=all
allow=ulaw
allow=alaw
qualify=yes
canreinvite=no
type=peer  - тип подключения. В поле type возможны три разных значения: friend, peer и user. Более подробно.
password=1234 - пароль пользователя
host=192.168.10.20 - IP-адрес подключающегося, можно не указывать
defaultuser=cisco - логин пользователя
disallow=all - запрещаем все кодеки
allow=ulaw - разрешаем кодек g711ulaw
allow=alaw - разрешаем кодек g711alaw
qualify=yes - позволяет в консоли астериска видеть состояние подключения

Создадим еще одну секцию для SIP телефона
[601]
type=friend
defaultuser=601
 password=12345
disallow=all
allow=all
host=dynamic
qualify=yes

Этих настроек более, чем достаточно. Перейдем к настройкам номерного плана. Отредактируем файл /etc/asterisk/extensions.conf. Вспоминаем параметр context в секции [general]
[default]
exten => _60X,1,Answer
exten => _60X,n,Dial(SIP/${EXTEN})
exten => _2XX,1,Answer
exten => _2XX,n,Dial(SIP/cisco/${EXTEN})
В квадратных скобках указано название контекста, он должен совпадать с параметром context в sip.conf. Суть этого скромного номерного плана состоит в том, что если звонок поступит на трехзначный номер, который начинается на 2 (вспомним, у нас на СМЕ заригистрированы именно эти номера), то звонок будет переадресовываться на СМЕ, если же номер будет трехзначным и будет начинаться на 60, то этот звонок будет переадресовываться на телефоны, подключенные по SIP локально.
Всяческих параметров и настроек в Asterisk великое множество, поэтому я привожу краткие объяснение и не углубляюсь в варианты значений.

Cisco CME

Для начала, настройки мы будем вносить в секцию voice service voip. Настраивать связь будем через SIP-trunk. Тут есть некоторые нюансы. Рассмотрим их.

Переадесация вызова.
Когда звонок приходит из SIP-транка и должен переадресовываться, то СМЕ отправляет сообщение “Moved temporarily” на SIP-сервер. Это может потенциально вызвать проблемы с маршрутизацией звонка. Чтобы их избежать необходимо ввести команду
no supplementary-service sip moved-temporarily

Перевод звонка
Когда звонок приходит из SIP-транка на SCCP-телефон и там переводится на другой телефон, то СМЕ отправляет на SIP-сервер сообщение SIP-REFER. Это сообщение не всегда может быть корректно обработано. А если и будет обработано корректно, то сервер получит номера кого и куда переадресовывать, но у него может не быть маршрута для переадресации. Поэтому вводим команду для отмены таких сообщений.
no supplementary-service sip refer

Удержание звонка.
При удержании звонка на SCCP-телефоне никаких служебных сообщений на SIP-сервер не будет отправлено. Все будет контролироваться CME.

Начнем вносить изменение в конфигурацию, настроенную в предыдущих статьях.
CME(config)#voice service voip 
CME(conf-voi-serv)# allow-connections sip to sip
CME(conf-voi-serv)#no supplementary-service sip moved-temporarily
CME(conf-voi-serv)#no supplementary-service sip refer
CME(conf-voi-serv)#sip
CME(conf-serv-sip)#registrar server ex min 60 max 3600
Со всеми настройками мы уже знакомы. Продолжим.
CME(config)#dial-peer voice 1 voip
CME(config-dial-peer)#description SIP trunk to Asterisk
CME(config-dial-peer)#session protocol sipv2
CME(config-dial-peer)#session target sip-server
CME(config-dial-peer)#dtmf-relay rtp-nte 
CME(config-dial-peer)#destination-pattern 6..
CME(config-dial-peer)#codec g711ulaw 
dial-peer voice 1 voip - создаем dial-peer
session protocol sipv2 - указываем протокол, в данном случае SIP. По умолчанию используется Н.323
session target sip-server - куда будут перенаправляться звонки, также может применяться значение dns:dnsname или ipv4:xx.xx.xx.xx
dtmf-relay rtp-nte - тип сигнализации dtmf-последовательностей, цифр, вводимых на протяжении телефонного разговора.
destination-pattern 6.. - тут мы указываем, что будем перенаправлять звонки, которые попадают под правило: трехзначный номер, первая цифра 6. Напомню, на Asterisk зарегистрированы именно такие номера.
codec g711ulaw  - кодек, который будет использоваться.
Перейдем к конфигурации user-agent
CME(config)#sip-ua    
CME(config-sip-ua)# registrar ipv4:192.168.10.20 expires 3600
CME(config-sip-ua)# sip-server ipv4:192.168.10.1                               
CME(config-sip-ua)#authentication username cisco password 0 1234
sip-ua  - переходим в режим конфигурации SIP-user agent. Это параметры, которые будут использоваться для исходящих звонков и для регистрации на удаленном SIP-сервере.
sip-server ipv4:192.168.10.1 - команда определяет адрес SIP-сервера. Если она применена, то в секции настройки dial-pеer мы можем указать session target sip-server
authentication username cisco password 0 1234 - параметры аутентификации. Этот логин-пароль указан в sip.conf на Asterisk
registrar ipv4:192.168.10.20 expires 3600 - позволяет CME регистрировать свои не SIP-телефоны на удаленном SIP-сервере. Как видите, это адрес локального интерфейса, а не Asterisk. Если применить адрес Asteriska, то мы увидим вот такие сообщения у него в консоли:
[May 15 20:55:15] NOTICE[2574]: chan_sip.c:25030 handle_request_register: Registration from ‘<sip:201@192.168.10.1>’ failed for ‘192.168.10.20:53251' - Wrong password
[May 15 20:55:15] NOTICE[2574]: chan_sip.c:25030 handle_request_register: Registration from ‘<sip:202@192.168.10.1>’ failed for ‘192.168.10.20:53251' - Wrong password
[May 15 20:55:15] NOTICE[2574]: chan_sip.c:25030 handle_request_register: Registration from ‘<sip:203@192.168.10.1>’ failed for ‘192.168.10.20:53251' - Wrong password
как видите, телефоны, которые зарегистрированы на CME по SCCP лезут регистрироваться на Asterisk. И я вам больше скажу, если в sip.conf указать соответствующие настройки, то они таки регистрируются.

На этом все. Что-то можно добавить, что-то убрать. Но данной конфигурации достаточно, чтоб звонить туда-сюда-обратно.
Проверить можно следующим образом. На Asterisk:
 darkstar*CLI> sip show peers
Name/username           Host                                 Dyn Forcerport ACL Port     Status  
601/601                 192.168.0.102                         D   N             5062     OK (1 ms) 
602/602                 192.168.10.2                          D   N             41088    OK (3 ms)
cisco/cisco             192.168.10.20                             N             5060     OK (183 ms) 
3 sip peers [Monitored: 3 online, 0 offline Unmonitored: 0 online, 0 offline]
darkstar*CLI> 
Как видно, тут зарегистрировано два SIP софт-фона и cisco.
Если cisco отвалится, мы увидим что-то вроде
darkstar*CLI> sip show peers
Name/username              Host                      Dyn Forcerport ACL Port     Status 
601/601                    192.168.0.102              D   N             5062     OK (1 ms)  
602/602                    192.168.10.2               D   N             41088    OK (2 ms)  
cisco/cisco                192.168.10.20                  N             5060   UNREACHABLE 
Такой метод можно использовать для привязывания SIP-софтфонов к СМЕ. Пока завести их регистрацию на СМЕ не удалось. Только телефоны cisco. Но работы в этом направлении мной планируются.

1 comment:

  1. I would add no-reg command to CME-dn (SCCP phones dn) to prevent them from registration on asterisk.

    ReplyDelete