Как стать автором
Поиск
Написать публикацию
Обновить

IAX2 one love (межASteriskные транки)

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров3.5K

Это короткое продолжение серии про Asterisk.
Предыдущие части Часть 1, Часть 2, Часть 3

Я расскажу как и почему я ограниченно применяю IAX2 в контексте предыдущих записей.

Что же такое IAX2 и почему я про него пишу

IAX2 это проприетарный протокол Sangoma Technologies RFC 5456, который может использоваться для соединения 2х и более систем на базе Asterisk. На самом деле, можно и оконечные устройства (даже soft phone) пустить по нему, но про это - чуть позже.

Протокол этот, мягко говоря, спорный, но у него есть серьезное преимущество перед SIP (и его реализацией в виде модуля PJSIP) - он пробивает NAT и заворачивает сигнализацию и полезный трафик в одно соединение.

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

Так же IAX2 умеет в шифрование, работает через UDP, относительно просто настраивается в Asterisk.

Звучит вкусно? А в чем подвох?

Не все так сладко

Как я уже упоминал, IAX2 проприетарный - в частности у него серьезные проблемы с расширением (требуется, по сути, пересогласовывать\перевыпускать RFC), есть достаточно неприятные проблемы с безопасностью.

Если вопрос с безопасностью можно решить завернув IAX2 трафик в туннель, то вот с расширениями есть сложности. Несмотря на то, что в IAX2 заявляется поддержка IMAGE, HTML, TEXT, VIDEO, VOICE - это не замена SIP.

Самое главное чего нет в IAX - аналога SipMessage

Вы не сможете отправлять текстовые сообщения, принимать их и так далее. Есть еще целый ряд различий, делающих применение IAX очень нишевым.

И да - можно обмазать это все AGI, использовать IAX2 SEND TEXT и так далее (кстати, команда TEXT практически не документирована, я смог найти только это)... НО ЗАЧЕМ?!
У каждого из протоколов есть сильные стороны, которыми можно прикрыть слабые - другого.

Так где и зачем его использовать?

Помните, мы строили систему из центрального сервера и оконечных гейтвеев?
Ну так вот эти самые гейтвеи, в плане голоса, спокойно можно перевести на IAX2.

И да, мы не отказываемся от SIP транков, просто голос пойдет через IAX.

Начнем мы с настроек Asterisk'ов.

  1. Включим модуль (на всех участниках обмена)
    modules.conf >> load = chan_iax2.so

  2. Создадим конфигурацию
    Для центра:
    iax.conf:
    [general]
    bindaddr= ; IP интерфейса где будем слушать
    autokill=yes
    language=en ; Основной язык канала
    bandwidth=high ; если вы не совсем на 2G работаете
    jitterbuffer=yes
    context=default

    [gatewayA]
    secret= ; Пароль\код авторизации
    host= ; IP интерфейса gatewayA, который готов в IAX2
    type=friend
    language= ; Язык канала
    context= ; контекст вашего плана набора (то, что [default][from-local] и так далее) куда будут падать все вызовы
    qualify=yes
    qualifyfreqok=25000
    trunk=yes
    forceencryption=yes
    encryption=yes
    auth=md5
    description=GSM Gateway A ; Текстовая строка описание

    [gatewayB]
    secret=
    host=
    type=friend
    language=
    context=default
    qualify=yes
    qualifyfreqok=25000
    trunk=yes
    forceencryption=yes
    encryption=yes
    auth=md5
    description=GSM Gateway B
    ...

  3. Загрузим модуль IAX2
    *CLI> module load chan_iax2

  4. Открываем UDP порт 4569 на нужном интерфейсе

Что тут важно? В целом все, но самое главное тут context, иначе в diaplan придется его каждый раз прописывать.
За подробностями и опциями iax.conf - можно изучить пример, достаточно хорошо все описано и особых хитростей там нет.

Далее нам нужно "раскатать" конфигурацию по, собственно, гейтвеям. Я просто копировал тот же самый файл с центрального сервера, заменял название секции гейтвея на [central] и менял, соответственно host= на адрес центральной станции.
Т.е. примерно вот так:
[general]
bindaddr=
language=
bandwidth=high
jitterbuffer=yes

[central]
secret=
host=
type=friend
context=default
qualify=yes
qualifyfreqok=25000
trunk=yes
auth=md5
forceencryption=yes
encryption=yes
description=Central PBX

Если вы все сделали верно, на команду "покажи ка мне друзей", мы должны их увидеть здоровыми и готовыми к работе!
*CLI> iax2 show peers
Name/Username Host Mask Port Status Description
central xxx.xxx.xxx.xxx (S) 255.255.255.255 4569 (T) (E) OK (77 ms) Central PBX
1 iax2 peers [1 online, 0 offline, 0 unmonitored]


Настроим dialplan:

Теперь мы должны рассказать Asterisk, что звонки у нас теперь идут не через SIP, а через IAX2.
Тут все зависит от вашего плана, но, если совсем коротко, то:

  1. Ищем строки типа same = n,Dial(PJSIP/gatewayA/sip:${EXTEN}@IP:PORT)

  2. Заменяем на строки типа same = n,Dial(IAX2/central/${EXTEN})

Обратили внимание, что у нас нет контекста в случае IAX2 (Dial(IAX2/central/${EXTEN}@context) - это потому, что мы прописали его в настройках транков.

Теоретически, если вы все сделали верно, ваши звонки должны начать бегать через IAX2. Обратите внимание, мы не трогаем MessageSend и аналогичные SIP'ные штуки.

Что получилось?

Получилось, что у нас 2 танка: SIP + IAX2. Голос бегает через IAX, со всеми его плюшками, SMS ходят через SIP.

Что не получилось (и не получится)?

Я описывал конкретно свой случай. Если у вас пользователи (extenstions) висят на разных серверах, объединенных через IAX2, я не уверен что текстовые сообщения будут проходить.

Так же, если у вас очень хитрый план звонков, он может не пережить появление в нем IAX2. В моем конкретном случае, нужно было, всего лишь, завернуть голос - у меня нет ничего на конечных гейтвеях, кроме SendMessage, что не переживало бы IAX2.

Заключение

Ощутил ли я результат? Да, стало "получше", но нужно тюнить для каждого конкретного канала. Если у вас большие задержки, высокий Jitter, можно поиграть с jitterbuffer и qualifyfreqok. IAX достаточно чувствителен к задержкам, меньше чем SIP, но это не вездеход.
Можно поиграть кодеками, которые используются в транке - я не стал, работает хорошо и в автомате.
В целом, по сравнению с SIP настройка проще, протокол более устойчив к NAT.


Надеюсь эта короткая заметка поможет если вы ищете способ повысить качество голоса в своей локальной телефонной сети.

Теги:
Хабы:
Всего голосов 3: ↑3 и ↓0+3
Комментарии15

Публикации

Ближайшие события