Яндекс.Метрика

Курс Zabbix: мониторинг Asterisk и VoIP

Курс Zabbix: мониторинг Asterisk и VoIP с 8 сентября по 12 сентября

Количество
свободных мест

8 Записаться

Дистанционные курсы по Asterisk

Дистанционные курсы по Asterisk с 25 августа по 31 августа

Количество
свободных мест

2 Записаться

Курсы по Mikrotik MTCRE

Курсы по Mikrotik MTCRE с 8 декабря по 11 декабря

Количество
свободных мест

6 Записаться
Разоблачаем секреты Asterisk: где искать информацию и как применять на практике. На примере PJSIP
6
Мастер-класс
Евгений Тевелевич
Разоблачаем секреты Asterisk: где искать информацию и как применять на практике. На примере PJSIP
скачать презентацию

Разоблачаем секреты Asterisk: где искать информацию и как применять на практике. На примере PJSIP

В ходе настройки и эксплуатации Asterisk регулярно возникает задача корректной идентификации каналов. Рассмотрим одну из таких проблем на примере использования PJSIP. На её основе можно изучить внутренние механизмы работы Asterisk, источники достоверной информации о системе и инструменты для тестирования.

Проблема идентификации каналов

При подключении нескольких провайдеров к Asterisk требуется определять, от какого именно провайдера поступил вызов. Самый простой вариант — обработка по номеру в одном контексте. Однако этого бывает недостаточно: иногда необходимо распределять вызовы по разным контекстам или задавать специфические параметры для отдельных каналов (например, кодеки). Для этого требуется однозначная идентификация канала.

Одним из отличий PJSIP от chan_sip является возможность использования транспортов. В PJSIP допускается принимать трафик на нескольких портах. Логично предположить, что можно идентифицировать канал по связке «IP-адрес + порт назначения». Однако на практике PJSIP не поддерживает такую схему идентификации. Если у провайдера несколько транков на одном и том же IP и порту, то различить их простыми средствами невозможно. Эта функциональность обсуждалась разработчиками, однако соответствующие изменения так и не были приняты.

Источники информации

Для изучения и решения подобных проблем полезно использовать различные источники:

  • Книги по Asterisk (в том числе Asterisk Cookbook) — содержат практические примеры настройки диалплана и возможностей системы.
  • Официальная документация: ранее — wiki.asterisk.org, ныне — docs.asterisk.org. Несмотря на менее удобную структуру, ресурс остаётся основным источником справки.
  • Консоль Asterisk: встроенная команда help позволяет получить информацию по командам, приложениям и функциям без обращения к внешним источникам.
  • Примеры конфигурационных файлов: в исходниках Asterisk и на GitHub доступны демонстрационные конфигурации (например, pjsip.conf.sample). Они позволяют изучать параметры на конкретных рабочих примерах.
  • Asterisk Test Suite — тестовый набор, используемый разработчиками для проверки новых функций. В нём содержатся готовые сценарии, на которых можно изучать поведение системы.

Asterisk Test Suite

Тестовый набор предназначен для запуска нескольких экземпляров Asterisk, эмуляции клиентов и проведения автоматизированных тестов. В частности, в нём представлены сценарии для PJSIP, включая идентификацию каналов.

Изучение тестов показывает, что:

  • Идентификация возможна по IP-адресу и заголовкам SIP-пакетов.
  • Предусматривалась идентификация по транспорту (порту назначения), однако соответствующий функционал был отменён.
  • Поддерживается идентификация по Request-URI, включая возможность применения регулярных выражений.
  • Возможно использование масок для IP-адресов и портов.

Таким образом, при определённых условиях идентификация каналов может быть реализована через Request-URI или SIP-заголовки, а также с применением масок портов.

Практическая демонстрация

Для тестирования был развернут стенд из двух экземпляров Asterisk. Конфигурация копировалась на обе машины автоматически. На практике проверялись следующие варианты:

  1. Вызовы через транки с регистрацией. Независимо от количества транков, вызовы приходили на один и тот же канал, идентифицируемый только по IP-адресу.
  2. Разделение по портам исходящих транков. При использовании разных портов (5061 и 5062) вызовы по-прежнему определялись как один канал.
  3. Использование маски портов и Request-URI. Этот метод позволил корректно идентифицировать каналы.

Таким образом, полноценная идентификация каналов по порту назначения в PJSIP отсутствует, однако применяя маски и Request-URI, можно добиться требуемого результата.

Заключение

Полноценная идентификация каналов в PJSIP остаётся сложной задачей. Поддержка идентификации по транспорту была реализована частично и отменена. На практике применяются комбинации идентификации по IP-адресу, Request-URI и заголовкам SIP. Для изучения возможностей Asterisk удобно использовать официальную документацию, встроенную справку, примеры конфигураций и тестовый набор Asterisk Test Suite. При проектировании решений необходимо учитывать ограничения текущей реализации PJSIP.

Ежегодная конференция по Asterisk 2025!

Билеты уже в продаже!

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

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

Наши
клиенты

Посмотреть все