artem
24.12.2012
29054

Статей о настройке транка между Asterisk и Avaya в интернете можно найти немало, но, когда я сам столкнулся с этой проблемой, ни одно из описанных решений до конца не подошло, поэтому и пишу статью с описанием настроек в своём конкретном случае.

H.323-транк между Asterisk и Avaya.

Лицензии на подключение новых номеров к АТС Avaya закончились, и клиент решил расширить количество корпоративных абонентов за счет подключения АТС на базе Asterisk. Лицензии на SIP-транки у клиента не оказалось и её приобретение изначально не рассматривалось, поэтому остался только вариант с H.323. С нашей стороны — сборка FreePBX с некоторыми доработками, которые не повлияют на приведенные настройки, звонки наружу — тоже через Avaya.

Итак, я получил адрес, порт, логин и пароль для подключения к Avaya по SSH и тут же появилась первая проблема — для подключения нужен софт от Avaya (его у меня, естественно, нет, и в свободном доступе он обнаружен не был) или эмулятор терминала. Эмулятор, к счастью, быстро нашелся — такой терминал поддерживает программа TuTTY (http://putty.dwalin.ru/?downloads). Для linux TuTTY нет, но под wine работает прекрасно.

Сразу несколько слов об управлении консолью Avaya. Кнопки внизу подписаны, но, всё равно, привожу краткое описание:

        F1 — отменить внесенные изменения и выйти из текущего меню настроек, полностью стереть набранную команду.

        F2 — обновить (не пользовался)

        F3 — применить внесенные изменения и выйти из текущего меню настроек (изменения сразу же сохраняются и вступают в силу, дополнительных манипуляций не требуется)

        F4 — очистить поле, в котором стоит курсор

        F5 — помощь по полю, в котором стоит курсор, или набранной команде (выводит возможные значения как ‘?’ у cisco)

        F6 — редактировать (не пользовался)

        F7, F8 — для пролистывания вперед/назад многостраничных меню и результатов команд.

        Также:

        Shift+Tab — стереть одно слово

        R, ввод — повтор последней введенной команды.

       Некоторые основные команды:

        logoff — выход из консоли

        list — вывести список элементов, например «list trunk-group» выводит список транков

        display — вывести настройки конкретного элемента, например «display trunk-group 10» выводит настройки транка 10.

        change — изменить настройки элемента

        busyout trunk, busyout signaling-group — сделать недоступным указанный транк, сигнальную группу (необходимо для изменения настроек транка, сигнальной группы, находящихся в работе).

        release trunk, release signaling-group — вернуть в работу указанный транк, сигнальную группу.

Сама настройка:

  1. Добавляем имя хоста Asterisk в node-names

change node-names ip
Вписываем IP-адрес хоста Asterisk и какое-нибудь имя. Кстати procr — LAN-интерфейс Avaya, к которому и будет подключаться Asterisk.

 Если ни один из существующих наборов кодеков не подходит, создаем свой, иначе пропускаем этот и следующий пункты. (смотрим номера существующих наборов кодеков командой list и выбираем незанятый номер)

change ip-codec-set 3

Вписываем нужные кодеки, F5 выдаёт полный список возможных.

Обратите внимание на опцию FAX на второй странице настроек. Если предполагается хождение факсов между Asterisk и Avaya, лучше сразу поставить off.

  1. Для использования созданного набора кодеков нужно создать новый ip-network-region (выбираем следующий незанятый номер)

change ip-network-region 3

Опции:

  • Location — ставим номер LAN-интерфейса, к которому будет привязан регион сети (в моём случае он один, получить список можно командой «list ip-interface all»)
  • Name — вписываем любое имя
  • Codec Set — вписываем номер набора кодеков, созданного на шаге 2
  • «Intra-region IP-IP Direct Audio» и «Inter-region IP-IP Direct Audio» ставим «no», без этого голос у меня не пошел.

 Создаем транк (как и в предыдущих случаях выбираем следующий незанятый номер)

add trunk-group 3

Заполняем как на изображении.

Опции:

  • Group Name — произвольное имя
  • «Member Assignment Method», «Signaling Group», «Number of Members» пока не трогаем, т.к. сигнальная группа еще не создана. После создания сигнальной группы возвращаемся и вписываем «Signaling Group» — номер сигнальной группы, «Number of Members» — количество одновременных вызовов в транке.
  • TAC — код доступа к транку. Для этих кодов в диалплане должно быть создано правило типа dac. Если на АТС есть другие транки, можно посмотреть их TAC и выбрать незанятый из того же диапазона. Если же нет, нужно создать правило в диалплане. Пример:

change dialplan analysis

Листаем на 3-ю страницу и заполняем как на изображении:

 

На АТС были настроены кириллические Caller ID и на Asterisk приходила белиберда вместо звонящего номера, поэтому «Send Name» установлено в «n», а «Format» — в «unk-pvt». Так Avaya посылает на Asterisk только номер.

 Создаем сигнальную группу

change signalling-group 3

        Опции:

  •  «Trunk Group for Channel Selection» и «Trunk Group for NCA TSC» — ставим номер транка из пункта 4.
  • Far-end Node Name — вписываем имя узла из пункта 1
  • Near-end Listen Port — может быть 1720, 5000-5999. Впишите номер порта не занятый другими сигнальными группами.
  • Far-end Network Region — введите номер региона сети из пункта 3

После создания сигнальной группы возвращаемся к созданному ранее транку и заполняем пункты, связанные с сигнальной группой, после чего настройка транка закончена. Теперь нужно направить вызовы в этот транк.

 

  1. Создаем маршрут в транк

change route-pattern 3

Опции:

  • Grp No — номер транка.
  • FRL — 0, если транк к внутреннем номерам, 1 — если к провайдеру.
  • Numbering Format — для правильного отображения Caller ID нужно выставить lev0-pvt, если транк к внутренним номерам, natl-pub или pub-unk, если транк к провайдеру.

 Направим в полученный транк номера 2400-2599.

change dialplan analysis

        change uniform-dialplan 2

        

        change aar analysis 2

Route Pattern — номер маршрута в транк

Перенаправляем входящие звонки на Asterisk, если это нужно

change inc-call-handling-trmt trunk-group 1 (здесь 1 — номер транка к провайдеру)

Number Len — длина внешнего номера

Number Digits — внешний номер

Del — количество цифр, удаляемых из внешнего номера

Insert — цифры, вставляемые в номер

В данном случае вызов снаружи направляется на номер 2400

 Настройка на стороне Asterisk.

        Для работы по протоколу H.323 я использовал модуль chan_ooh323.so. Создаем файл /etc/asterisk/ooh323.conf

 

[general]  
class="PreformattedText console">;Define the asterisk server h323 endpoint
disallow=all
allow=alaw
;The port asterisk should listen for incoming H323 connections.
;Default — 1720
port=1720 ;должен соответствовать порту, указанному в Far-end Listen Port в пункте 5
;The IP address, asterisk should listen on for incoming H323
;connections
;Default — 0.0.0.0: tries to find out local ip address on it's own
bindaddr=0.0.0.0         ;Лучше указать конкретный адрес для привязки
;Alias address for for asterisk server
;Default — «Asterisk PBX»
h323id=ObjSysAsterisk
;e164=100
;CallerID for the asterisk originated calls
;Default — Same as h323id
callerid=PBX
;This parameter indicates whether channel driver should register with
;gatekeeper as a gateway or an endpoint.
;Default — no
;gateway=no
;Whether this asterisk server will use gatekeeper.
;Default — DISABLE
;gatekeeper = DISCOVER
;gatekeeper = a.b.c.d
gatekeeper = DISABLE
;Whether asterisk should use fast-start and tunneling for H323 connections.
;Default — yes
faststart=yes
h245tunneling=yes
;Whether media wait for connect for fast start call
;Default — no
mediawaitforconnect=yes
;Location for H323 log file
;Default — /var/log/asterisk/h323_log
logfile=/var/log/asterisk/h323_log
;Following values apply to all users/peers/friends defined below, unless
;overridden within their client definition
;Sets default context all clients will be placed in.
;Default — default
context=from-trunk
;Sets rtptimeout for all clients, unless overridden
;Default — 60 seconds
rtptimeout=60      ; Terminate call if 60 seconds of no RTP activity
;when we're not on hold
; dtmf mode to be used by default for all clients. Supports rfc2833, q931keypad,
; h245alphanumeric, h245signal.
;Default — rfc 2833
dtmfmode=rfc2833
 [avaya]
type=friend
context=from-internal ;На АТС Avaya внутренние номера
ip=1.2.3.4                     ;IP-адрес АТС Avaya
port=5001                    ;Должен соответствовать Near-end Listen Port, указанному
                                     ;в пункте 5
disallow=all
allow=alaw
allow=ulaw
t38mode=disable
dtmfmode=rfc2833

Набирать номера в транк можно так

Dial (OOH323/avaya/${EXTEN})

 После непродолжительного тестирования оказалось, что, если входящий вызов со стороны Avaya переходит в состояние «занято», то канал этого вызова продолжает висеть неопределённое время, каждый из таких повисших каналов грузит одно из ядер процессора на 100%. Типичная картина:

 

pbx*CLI> core show channels  
 Channel                 Location   State    Application (Data)
OOH323/avaya-3  s-CHANUNAVAIL@macro- Busy   Congestion (10)
OOH323/avaya-5  s-CHANUNAVAIL@macro- Busy   Congestion (10)
 2 active channels
6 calls processed

 Даже в таком виде схема рабочая, и несколько повисших каналов не нарушают работу Asterisk. Чтобы повисших каналов не становилось слишком много, можно подвесть такой скрипт в cron на выполнение каждую минуту:

 

#!/bin/bash  
ASTERISK=/usr/sbin/asterisk
CHAN= «avaya»
 while read CHANNEL; do
        if [[ $CHANNEL =~ ^ (OOH323/$CHAN-[0-9]+) ([^!]*!){5}
(Busy
|Congestion) ([^!]*!){6} ([0-9]+).* ]]; then
                  if [ ${BASH_REMATCH[5]} -ge 20 ]; then
                           $ASTERISK -rx «channel request hangup ${BASH_REMATCH[1]}»
                  fi
        fi
 done <<<» `$ASTERISK -rx »core show channels concise»`»

 Впрочем, гораздо более лучшим решением является использование модуля chan_h323.so вместо chan_ooh323.so или Yate в режиме H.323 — SIP прокси. Об этих схемах будет рассказано в последующих статьях.

 
avatar
  Подписаться  
Уведомление о

Остались вопросы?

Я - Першин Артём, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование

ближайшие курсы

ближайшие Вебинары

ONLINE

Why Choose HUGE?

Unlimited pre-designed elements

Each and every design element is designed for retina ready display on all kind of devices

User friendly interface and design

Each and every design element is designed for retina ready display on all kind of devices

100% editable layered PSD files

Each and every design element is designed for retina ready display on all kind of devices

Created using shape layers

Each and every design element is designed for retina ready display on all kind of devices