Новости
Обзоры и тесты
Техно
Советы
Разное
Главная » Техно

Использование Asterisk в качестве транзитной АТС IP-to-IP

Добавлено на 19.10.2016 – 01:00

Часто Asterisk используют как офисную или абонентскую IP АТС, коей она и задумывалась, но возможности АТС Asterisk легко позволяют использовать её как транзитную IP АТС, например, как центральный узел для обмена трафиком между абонентами находящимися на разных оконечных IP АТС.

Конечно, использование Asterisk в таком режиме не заменит большую транзитную АТС, также называемую софтсвитчем(softswitch) или программным коммутатором 4 класса, которые используют средние или крупные операторы связи. Но, например, пограничный контроллер сессий Cisco CUBE( Unified Border Element) Asterisk вполне способен заменить.
В статье приведён пример конфигурации Asterisk для для транзита трафика между тремя IP АСТ. Причём две из них находятся слева – западные офисы, одна справа – восточные офисы.

Графическая схема элементов и их связей представлена на изображении ниже.

Схема использования Asterisk в качестве транзитной АТС IP-to-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

Tags: , , , , ,

Оставить комментарий

Напишите Ваш комментарий ниже. Также Вы можете подписаться на комментарии к материалу через RSS

Вы можете использовать следующие теги:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> 

Мы поддерживаем Gravatar.

Контроль спама: *