В этой статье мы наладим связь между двумя конкурирующими продуктами 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=notype=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В квадратных скобках указано название контекста, он должен совпадать с параметром context в sip.conf. Суть этого скромного номерного плана состоит в том, что если звонок поступит на трехзначный номер, который начинается на 2 (вспомним, у нас на СМЕ заригистрированы именно эти номера), то звонок будет переадресовываться на СМЕ, если же номер будет трехзначным и будет начинаться на 60, то этот звонок будет переадресовываться на телефоны, подключенные по SIP локально.
exten => _2XX,n,Dial(SIP/cisco/${EXTEN})
Всяческих параметров и настроек в 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 g711ulawdial-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 1234sip-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. Но работы в этом направлении мной планируются.
I would add no-reg command to CME-dn (SCCP phones dn) to prevent them from registration on asterisk.
ReplyDelete