Использование Asterisk в качестве транзитной АТС IP-to-IP
Часто Asterisk используют как офисную или абонентскую IP-АТС, коей она и задумывалась, но возможности АТС Asterisk легко позволяют использовать её как транзитную IP-АТС, например, как центральный узел для обмена трафиком между абонентами находящимися на разных оконечных IP-АТС.
Конечно, использование Asterisk в таком режиме не заменит большую транзитную АТС, также называемую софтсвитчем(softswitch) или программным коммутатором 4 класса, которые используют средние или крупные операторы связи. Но, например, пограничный контроллер сессий Cisco CUBE(Unified Border Element) Asterisk вполне способен заменить.
В статье приведён пример конфигурации Asterisk для для транзита трафика между тремя IP АСТ. Причём две из них находятся слева – западные офисы, одна справа – восточные офисы.
Графическая схема элементов и их связей представлена на изображении ниже.
Опишем схему. Требуется объединить корпоративные телефонные сети западных и восточных офисов.
Западные офисы представляют из себя две IP-АТС:
1. Кластер Cisco Unified Communications Manager с IP основного publisher=10.10.1.1
и резервного subscriber=10.10.1.2, абонентской номерной ёмкостью 1XXX, где X – любая цифра от 0 до 9.
2. Сервер Avaya Communication Manager c IP=10.10.2.1 и абонентской номерной ёмкостью 2XXX, где X – любая цифра от 0 до 9. Протокол TCP используется как транспортный для SIP в Avaya.
Восточные офисы представляют из себя одну западную АТС Asterisk – кластер из двух серверов с IP-адресами основного узла 10.9.1.1 и 10.9.1.2. Абонентская номерная ёмкость 3XXX, где X – любая цифра от 0 до 9.
Необходимо, чтобы все абоненты запада и востока могли звонить друг другу. Естественно IP-АТС могут быть любыми SIP-совместимыми системами, но в качестве примера я выбрал эти, потому что они реально работают в аналогичной конфигурации.
Так как CUCM и западный Asterisk представляют из себя кластеры с основным и резервным сервером, то необходимо настроить перемаршрутизацию на резервный сервер, в случае недоступности основного, а также принимать вызовы с резервных серверов.
Предполагается, что:
- На объединяемых IP-АТС уже настроены правила маршрутизации и при наборе по соответствующим маскам вызовы будут маршрутизироваться на транзитный Asterisk.
- У вас уже установлен Asterisk, настроена сетевая маршрутизация между всеми сетями где находятся IP-АТС. Asterisk имеет два сетевых интерфейса eth0 и eth1 в двух разных сетях.
По большому счёту нам понадобится добавить код в два файла:
/etc/asterisk/sip.conf
– где мы опишем все SIP-транки между нашим транзитным Asterisk и абонентскими IP-АТС.
/etc/asterisk/extensions.ael
– где настраивается маршрутизация между SIP-транками.
Начнём с sip.conf, добавим в него SIP-транки для соединения транзитного Asterisk c нашими западными и восточными IP-АТС.
;Cisco UCM Publisher, абоненты с номерами 1XXX
[CUCM-1]
type=friend
context=WEST-IN
host=10.10.1.1
insecure=port
dtmfmode = auto
disallow=all
allow=alaw
allow=ulaw
nat=no
canreinvite=yes
;Cisco UCM Subscriber, абоненты с номерами 1XXX
[CUCM-2]
type=friend
context=WEST-IN
host=10.10.1.2
insecure=port
dtmfmode = auto
disallow=all
allow=alaw
allow=ulaw
nat=no
canreinvite=yes
;Avaya Communicaton Manager, абоненты с номерами 2XXX
[ACUM]
type=friend
context=WEST-IN
host=10.10.2.1
insecure=port
dtmfmode = auto
disallow=all
allow=alaw
allow=ulaw
nat=no
transport=tcp ; Используем протокол TCP для SIP
canreinvite=yes
; East Asterisk основной, абоненты с номерами 3XXX
[ASTERISK-1]
type=friend
context=EAST-IN
host=10.9.1.1
insecure=port
dtmfmode = auto
disallow=all
allow=alaw
allow=ulaw
nat=no
canreinvite=yes
; East Asterisk резервный, абоненты с номерами 3XXX
[ASTERISK-2]
type=friend
context=EAST-IN
host=10.9.1.2
insecure=port
dtmfmode = auto
disallow=all
allow=alaw
allow=ulaw
nat=no
canreinvite=yes
Каждый SIP-транк имеет тип friend и используется как для входящей так и для исходящей связи.
Для компактности используем синтаксис ael, добавим контексты с правилами маршрутизации для запада и востока в файл extensions.ael:
context WEST-IN {
//Контекст для маршрутизации вызовов с Запада на Восток
_3XXX => { // Вызов на кластер ASTERISK-EAST
// Set(CALLERID(num)=01${CALLERID(num)})
//Пример, если нужно подставить префикс
Verbose(!!! Call from WEST to EAST);
Verbose(from ID ${CALLERID(num)} and NAME ${CALLERID(name)} );
Verbose( --called-number-> ${EXTEN} !!!);
Dial(SIP/${EXTEN}@ASTERISK-EAST-1,,tT);
Verbose(${DIALSTATUS}); // Проверяем статус дозвона
switch(${DIALSTATUS}) {
case BUSY:
Hangup;
case ANSWER:
Hangup;
case NOANSWER:
Hangup;
default:
Dial(SIP/${EXTEN}@ASTERISK-EAST-2,,tT);
// Перемаршрутизация на резервный узел в
// случае "ненормального" отбоя
Hangup;
};
};
};
context EAST-IN {
//Контекст для маршрутизации вызовов с Востока на Запад
_1XXX => { // Вызов на кластер Cisco UCM
Verbose(!!! Call from EAST to CUCM WEST);
Verbose(from ID ${CALLERID(num)} and NAME ${CALLERID(name)} );
Verbose( --called-number-> ${EXTEN} !!!);
// Dial(SIP/${EXTEN:2}@CUCM-1,,tT);
// Пример, удаляем первые 2 цифры
Dial(SIP/${EXTEN}@CUCM-1,,tT);
NoOp(${DIALSTATUS}); // Проверяем статус дозвона
switch(${DIALSTATUS}) {
case BUSY:
Hangup;
case ANSWER:
Hangup;
case NOANSWER:
Hangup;
default:
// Dial(SIP/${EXTEN:2}@CUCM-2,,tT);
// Пример: отрезаем первые 2 цифры
Dial(SIP/${EXTEN}@CUCM-2,,tT);
// Перемаршрутизация на резервный узел в
// случае "ненормального" отбоя
Hangup;
};
};
_2XXX => { // Вызов на Avaya Communication Manager
Verbose(!!! Call from EAST to Avaya WEST);
Verbose(from ID ${CALLERID(num)} and NAME ${CALLERID(name)} );
Verbose( --called-number-> ${EXTEN} !!!);
Dial(SIP/${EXTEN}@ACUM);
Hangup();
};
};
Как видно из примера с комментариями, dialplan достаточно простой.
После добавления кода в файлы sip.conf и extensions.ael не забудьте выполнить из консоли asterisk команды для применения конфигурации:
sip reload
ael reload
Для отладки вызовов можно использовать команду originate. Например, имитировать вызов сначала на CUCM, а потом как входящее плечо из контекста EAST-IN на номер 1001 CUCM, во втором случае на номер 2000 Avaya Communication Manager:
originate SIP/1000@10.10.1.1 extension 1001@EAST-IN
originate SIP/1000@10.10.1.1 extension 2001@EAST-IN
Теги: Asterisk, Cisco Unified Communications Manager, IP-телефония, softswith class 4, программный коммутатор 4 класса, транзитный коммутатор