Иван Башлаков
09.01.2020
20060

Протокол IAX/IAX2

Краткий обзор протокола, его преимущества и недостатки в сравнении с SIP и H.323 IAX — Inter-Asterisk eXchange protocol — протокол обмена VoIP данными между АТС, либо их узлами. Разработан компанией Digium, так как существующий на тот момент протокол SIP не удовлетворял полностью все потребности разработчиков и интеграторов Asterisk.  Предпосылкой для разработки было желание обеспечить передачу […]

Краткий обзор протокола, его преимущества и недостатки в сравнении с SIP и H.323

IAX — Inter-Asterisk eXchange protocol — протокол обмена VoIP данными между АТС, либо их узлами. Разработан компанией Digium, так как существующий на тот момент протокол SIP не удовлетворял полностью все потребности разработчиков и интеграторов Asterisk.  Предпосылкой для разработки было желание обеспечить передачу голоса высокого качества и не зависеть от уровня инфраструктуры сети. В частности, при разработке IAX большое внимание было уделено обработке NAT-транслирования сетевых адресов: IAX2 устанавливает соединение по порту 4569 протокола UDP и по нему же происходит передача данных. Часто используемые протоколы SIP и H.323 используют для этих целей различные порты, из-за чего часто возникают проблемы с передачей данных, несмотря на то, что соединение установлено. Так же в протоколе IAX/IAX2 реализована передача сигнальной информации в битовых полях, а не текстом, что положительно отразилось на уменьшении количества генерируемого в процессе звонка трафика. Еще одной сильной стороной IAX/IAX2 является возможность совмещать множество голосовых потоков внутри единого транка, что значительно ускоряет обработку заголовков IP-пакетов.На сегодняшний день поддержка IAX2 реализована в таких программных АТС, как Asterisk, YATE, FreeSwitch, Softswitch и OPAL.

Рассмотрим подробнее особенности и преимущества протокола IAX/IAX2:

  •  IAX/IAX2 — это не группа стандартов, а совместная разработка сообщества пользователей, телефонистов и разработчиков (Примечание: IAX2 описан в стандарте RFC 5456).
  •  IAX2 использует лишь один UDP-порт 4569 и, благодаря этому, хорошо обрабатывается устройствами NAT (устаревший протокол IAX1 использовал порт 5036).Использование одного порта для установки соединения и передачи данных означает, что при звонке вы всегда будете слышать голос собеседника, если есть возможность установить управляющее соединение.
  •  IAX2 поддерживает аутентификацию и транкинг по сертификатам.
  •  Драйвер Asterisk для IAX2 имеет буфер джиттера, что позволяет повысить качество связи и сократить число ошибок при передаче данных.

Основной недостаток  IAX/IAX2 — это небольшое количество вызовов, которые могут быть переданы по одному каналу связи (около 300-400 вызовов).

Схема звонка по протоколу IAX/IAX2
Схема звонка по протоколу IAX/IAX2

Особенности транкинга по протоколу IAX2

При транкинге с IAX2 выделенная полоса пропускания не используется постоянно. Другие протоколы TDMoIP , используемые для транкинга, всегда резервируют определенную полосу пропускания, чтобы поддерживать все каналы открытыми. Транкинг с помощью  IAX позволяет нескольким голосовым потокам совместно использовать один транк, тем снижая издержки, создаваемые затратами на обработку IP-пакетов. IAX всегда отправляет схему DTMF (RFC2833), устраняя путаницу, часто встречающуюся с SIP .

Следует отметить, что для транкинга IAX/IAX2 очень важно, чтобы обе стороны пиринговой сети видели друг друга (т.е. они должны быть действительными пирами). Если одна сторона имеет параметр trunk = yes, а другая не может проверить подключение к пиру, то вы сможете звонить, но не будете слышать собеседника, хотя он будет слышать вас (одностороннее аудио). Самый простой способ исправить это — использовать строку для регистрации в АТС, с которыми вы хотите соединиться.

Схема транкинга по протоколу IAX2
Схема транкинга по протоколу IAX2

Работа с буфером джиттера IAX2

Одним из основных преимуществ IAX2 над SIP является наличие  джиттербуфера IAX2 в драйвере (в Asterisk 1.2.x и выше). Это значительно улучшает качество звука при работе в сетях со устаревшей или слабой инфраструктурой, например таких, как ADSL. Аналогичный джиттербуффер был добавлен к протоколуу SIP в Asterisk 1.4..

Чтобы включить буфер джиттера, добавьте в /etc/asterisk/iax.conf параметр:

jitterbuffer = yes

Известно, что джиттербуфер IAX вызывает проблемы с распознаванием DTMF (1.2, 1.4), поэтому его стоит отключить если вы обнаружили неполадки при их совместном использовании.

Отладка буфера джиттера

Чтобы получить информацию о текущем состоянии буфера, введите в консоли Asterisk:

iax2 set debug jb on

или

iax2 set debug jb off

для того, чтобы отключить отладку буфера. Всякий раз, когда кадры покидают буфер, в консоли печатается буква (буква: событие, действие):

  • G: буфер увеличивается, интерполяция последнего кадра;
  • o: не голосовой кадр, пересылка кадра в декодер;
  • v: ранний или поздний голосовой кадр, переадресация кадра на декодер;
  • V: голосовой кадр, пересылка кадра в декодер;
  • l: поздний голосовой кадр, кадр отбрасывается;
  • L: потерянный кадр, интерполяция последнего кадра;
  • s: сокращение буфера, потеря кадра;
  • S: сокращение буфера, без потери кадра.
Схема обмена сообщениями в протоколе IAX/IAX2
Схема обмена сообщениями в протоколе IAX/IAX2

Взаимодействие IAX2 с NAT

Важная особенность IAX2 — это относительная легкость интеграции с NAT. Как уже упоминалось выше, IAX2 использует только один порт UDP, 4569. Тем не менее, есть несколько ньюансов, о которых следует знать и помнить:

1. Последовательный NAT. Преобразование адресов обычно включает перезапись исходного порта, чтобы устройство NAT могло отслеживать соединения. Для надежной двусторонней связи всегда должна использоваться одна и та же перезапись. Например, скажем, ваш внутренний сервер Asterisk отправляет регистрационное сообщение (используя порты источника и назначения 4569) на сервер вашего провайдера IAX на другой стороне устройства NAT. Устройство NAT перезапишет исходный порт на некоторый случайный неиспользуемый номер порта, например 14353. Сервер провайдера запомнит ваш исходный порт, чтобы он мог связаться с вашим сервером при входящем вызове. Если вы хотите получать вызовы от транка, вы должны убедиться, что порт 14353 остается связанным с портом 4569 и для обратной передачи данных вашему серверу Asterisk. Некоторые брандмауэры НЕ делают это по умолчанию.

2. Согласованные таймауты NAT. Убедившись, что ваше устройство NAT использует согласованную перезапись портов, как описано выше, стоит обратить внимание, что могут возникнуть тайм-ауты, связанные с сопоставлениями портов. Например, если в течение X секунд не будет входящего трафика на порту 14353, то отображение портов 4569 <> 14353 будет сброшено брандмауэром — и ваш провайдер IAX2 больше не сможет с вами связаться. Увеличьте время ожидания, превышающее период обновления регистрации чтобы решить эту проблему.

Так же можно изменить период обновления регистрации Asterisk, отредактировав исходный код и перекомпилировав его. Измените данную строку, установив нужное значение тайм-аута:

iax2.h: #define IAX_DEFAULT_REG_EXPIRE 60

3. Если вы получаете случайные ошибки raw_hangup на ваших соединениях IAX2, как правило, проблема в самом устройстве NAT. Некоторые маршрутизаторы могут некорректно работать с преобразованием портов NAT, из-за чего ваш IAX-транк будет проходить регистрацию, но не будет работать.

Регистрация терминала по протоколу IAX2
Регистрация терминала по протоколу IAX2

Проблемы взаимодействия IAX2 с NAT на уровне ядра ​​Linux

Некоторые устройства NAT могут испытывать ошибку при использовании протокола IAX в сочетании со статическим IP-адресом с PPPoE или аналогичным туннельным соединением.

Взаимодействие компонентов сети
Взаимодействие компонентов сети

Ядро Linux совсем не любит получать данные UDP, когда интерфейс WAN отключен. В течение этого периода Linux очищает таблицу маскарадинга NAT с IP-адресом локальной сети источника вместо внешнего публичного IP-адреса WAN,  поскольку общедоступный IP-адрес недоступен. Проблема в том, что после повторного подключения к интернету ядро ​​должно перезаписать адрес локальной сети на новый IP-адрес глобальной сети (такой же, как статический адрес). Но это происходит не так. Ядро продолжает отправлять приватный адрес локальной сети. В результате соединение IAX2 прерывается.

Ядро Linux версий 2.4 и 2.6.X содержат данную проблему. Начиная с версии  2.6.22 ядро  содержит новый код реализации NAT.

Данная проблема появляется, только если канал WAN имеет статический IP-адрес. С динамическим IP-адресом нормальное состояние таблицы маскировки NAT восстанавливается после повторного подключения канала. При повторном подключении, если изменяется IP-адрес, либо при перезагрузке устройства NAT, использующего статический IP-адрес,получается тот же результат. Когда устройство перезагружается, есть вероятность, что оно получит пакет от IAX-транка  Asterisk до того, как туннель PPPoE будет активирован. Таким образом в таблицу маскарадинга NAT попадает неверная запись.

Очевидно, что IAX2-транк не может работать с этой проблемой, так как узел Asterisk не сможет отправлять обратно подтверждение на истинный IP-адрес. Чтобы восстановить процесс маскировки NAT, источник (любое устройство, использующее протокол IAX2, включая телефоны Asterisk и IAX2) должен прекратить отправку данных UDP через порт IAX2 в течение времени, превышающего время ожидания сеанса UDP. Обычно, около 30 секунд на большинстве маршрутизаторов .Еще хуже то, что когда Asterisk обнаруживает проблему с регистрацией, он переходит в режим «паники», отправляя запросы на регистрацию каждые 2 или 3 секунды в надежде как можно быстрее восстановить транк — с другой стороны, ваше устройство NAT сохраняет запись состояния ошибки в таблице NAT. К сожалению, в Asterisk нет настройки для определения периода повторной регистрации.

Таким образом, единственный способ решить эту проблему — перезапустить Asterisk или временно выгрузить канальный модуль IAX2 более чем на 65 секунд, чтобы избежать передачи данных IAX2. Но будьте осторожны, если вы используете последний метод — всего лишь один кадр, входящий в брандмауэр во время переподключения (когда нет внешнего публичного адреса), испортит обработку NAT ядром ​и, если это произойдет, вам нужно выгрузить модуль IAX2, дождаться пока ядро удалит запись (UDP Sessions Timeout) и перезагрузить модуль.

Перезапуск модуля IAX2 будет невозможен, если в данный момент происходит вызов по каналу IAX2. В этом случае вам необходимо перезапустить Asterisk.

Для статического IP-адреса одним из способов решения этой проблемы является удаление цепочки маскарадинга из файрволла и использование вместо этого SNAT вместе со статическим IP-адресом WAN.

Вот типичное правило NAT для iptables:

iptables -t nat -A POSTROUTING -o $ WAN -j MASQUERADE

Необходимо заменить для статической адресации WAN:

iptables -t nat -A POSTROUTING -o $ WAN -j SNAT –to-source <ваш статический публичный адрес>

Это решает проблему потери связи IAX2, а также внесение неверных адресов в таблицу маскарадинга NAT ядра Linux.

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

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

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

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


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

10 доводов в пользу Asterisk

Распространяется бесплатно.

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

Безопасен в использовании.

Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.

Надежен в эксплуатации.

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

Гибкий в настройке.

Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.

Имеет огромный функционал.

Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.

Повышает управляемость бизнеса.

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

Снижает расходы на связь.

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