Оперативная диагностика SIP в консоли Asterisk каналы PJSIP и CHAN_SIP

Содержание

Данная статья посвящена диагностике sip канала. Так же в рамках этой статьи рассмотрим и PJSIP, его настройку и диагностику.

Наладка SIP в Asterisk каналы PJSIP и CHAN_SIP

Хотя сторонние инструменты как sngrep, tcpdump и Wireshark являются прекрасными помощниками в поиске и устранении проблем с VoIP может возникнуть ситуация, что на системе нет возможности установить вышеперечисленные утилиты и единственная возможность разобраться только за счет самого asterisk. К счастью, asterisk так же способен помочь устранить неисправность.

Первичная проверка

Для начала нужно проверить, а запущен ли asterisk. Для этого нужно подключиться к серверу с помощью ssh-клиента (в нашем случае используем Putty).

Подключаемся к серверу 1

Вводим IP-адрес нашей АТС.

Подключаемся к серверу 2

После подключения под пользователем «root» видим следующее окно.

Подключаемся к серверу 3

Для проверки останется ввести лишь команду: asterisk -rv

Судя по сообщению выше выполнены следующие условия:

  • К asterisk можно подключится
  • Служба asterisk запущена, работает и не отваливается с ошибкой.

Если служба asterisk не запущена или отваливается с ошибкой то следует попытаться ее перезагрузить. Для этого не обязательно перезагружать весь сервер, достаточно выполнить следующие команды:

1.service asterisk stop (не обязательный пункт, пытаемся остановить работу asterisk если таковая имеется)
2.service asterisk restart

После чего вновь пробуем подключится к asterisk

Как видно выше – мы успешно перезагрузили asterisk и подключились к нему.

Диагностика SIP и оборудования связанного с ним. Отладка SIP протокола в Asterisk

Предположим, что у нас наблюдаются какие-то неполадки на внутреннем номере 120 и мы хотим посмотреть какие sip сообщения приходят от этого внутреннего номера и какие он sip-сообщения он получает. Для этого нужно выполнить следующие шаги:

1.Проверить, что IP адрес устройства не заблокирован fail2ban. Это можно сделать средствами iptables следующей командой: iptables -L –n

Результат выполнение команды 1

Как видим выше, fail2ban пуст, переходим ко второму шагу.

2.Включить отладку sip для внутреннего номера 120 следующей командой: CLI sip set debug peer 120

Эту же команду (и многие другие) можно выполнять не входя в asterisks и в нашем случае команда примет следующий вид: # asterisk rx sip set debug peer 120″

Для того, чтоб снять дамп таким образом необходимо, чтоб asterisk был известен ip адрес конечного устройства пользователя т.е или пользователь должен быть зарегистрирован, либо ip адрес пользователя должен быть сконфигурирован в настройках пользователя.

Зная какой ip адрес у пользователя, можно выполнить отладку немного иначе, а именно указать ip адрес пользователя: # sip set debug ip 192.168.1.1

Результат выполнение команды 2

Если требуется включить отладку всех sip сообщений, а не с какого-то определенного ip/peer, то команда выглядит следующим образом:

Результат выполнение команды 3

Однако учтите, что если через АТС в этот момент совершается много звонков, то и количество сообщений будет огромным.

Результаты можно проверить или в консоли asterisk или же в лог-файле.

Консоль удобна тем, что можно быстро посмотреть какие приходят и уходят сообщения, их расшифровку, но если в данный момент совершается много звонков (даже если в отладке учувствует только один ip), то выцепить нужную информацию будет сложно. В таком случае лучше смотреть в лог-файлах.

Лог-файл располагается по следующему маршруту « /var/log/asterisk/full». Здесь можно выполнить поиск по ip-адресу устройства, или, к примеру, по типу сообщения. Давайте проверим файл по ключевому слову «REGISTER»

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

# asterisk -rx sip set debug off

Результат выполнение команды 4

Мы рассмотрели здесь базовую отладку средствами самого asterisk. Возможно, вам будет интересно почитать о утилите sngrep которая благодаря своему удобному интерфейсу и богатому функционалу может стать отличным инструментом для отладки и снятия дампа. Так же стоит ознакомиться с SIP-ответами и их значением которые будут приведены в конце статьи.

Типичные ошибки

Ошибка Wrong password. Одна из самых распространенных ошибок при регистрации нового ip-телефона. В консоли она имеет следующий вид:

Тем не менее, с ней не все так просто как может показаться на первый взгляд. Вы можете правильно записать пароль в поле «password» на устройстве, но все равно получить эту ошибку если используете пароль, содержащий больше 12 символов. Многие старые модели ip-телефонов и некоторые программные телефоны просто не поддерживают длинные пароли.

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

Впрочем, никто не застрахован от ошибки и вы действительно могли опечататься, когда вводили пароль.

Ошибка Device does not match ACL. Вторая распространенная проблема — deny и permit указанные в настройках устройства. Если телефон попробует зарегистрироваться из сети, которая не включена в список разрешенных сетей, то будет примерно следующая ошибка:

Учтите, что после 3-4 попыток неудачной регистрации IP-адрес устройства может быть забанен Fail2Banom, что, кстати, и случилось с нашим телефоном, переходим к следующей «ошибке».

Fail2Ban. Это не ошибка, но тем не менее если если от устройства не приходят попытки регистрации следует выполнить следующие шаги:

  • Проверить, что IP-адрес устройства внесен в список разрешенных
  • Проверить, что настройки устройства (в том числе и пароль) прописаны правильно.

Эти два нехитрых шага помогут избежать повторной блокировки устройства, теперь можно проверить список забанненых.

Выше уже писалось, что все можно проверить командой #iptables -L –n (если вы так же хотите посмотреть используются ли нестандартные порты то введите

#iptables -L -nv -t nat ) ,

Нас интересует список банов где и оказался ip-адрес нашего устройства. Для того, чтоб IP удалить адрес нужно выполнить следующую команду
# service fail2ban restart после чего вновь проверяем список забаненых.

Если вы все сделал правильно, то устройство подключиться успешно. В этой статье мы не стали рассматривать проблемы которые могут возникнуть с trunk-ами т.к в принципе они схожи с теми которые мы перечислили выше.
NAT. Возможна такая ситуация, что подвиснет nat-сессия, чаще всего это возникает у удаленныхсотрудников. В таком случае нужно или перезагрузить роутер, либо использовать другой протокол (если по каким-то причинам в данный момент нет возможности перезагрузить роутер) к примеру, с udp на tcp. Так же проверьте правильность настроек NAT на телефоне и пире, а так же

протокол передачи, в обоих случаях они должны быть идентичны. Если на пире будет выставлен tcp, а телефон будет пытаться подключиться через

udp, то такую попытку регистрации сервер отобьет.

Отладка PJSIP протокола в Asterisk

PJSIP — мультимедийная коммуникационная библиотека, написанная на Си. Поддерживает такие протоколы как SIP, SDP, RTP, STUN, TURN, и ICE. Эта библиотека работает на различных платформах, начиная с хэндсетов и мобильных устройств и заканчивая высоконагруженными АТС. Начиная с asterisk 12 эта библиотека поддерживается частично и только в с asterisk 13 появилась полноценная поддержка. Для осуществления звонков программной АТС Asterisk

Главное отличие этого нового канального драйвера в том, что он хорошо работает с различными брандмауэрами и NAT, как в составе Asterisk-сервера, так и на клиентских устройствах.

Тем не менее, несмотря на ряд преимуществ перед Chan_SIP, PJSIP все еще не получил широкого применения из-за отличия конфигурации. Новый стек использует подход разделения конфигурации на логические разделы, поэтому создаются разные разделы для различных целей.

В данной статье мы рассмотрим основные способы отладки PJSIP. В Asterisk версии 13.8.0 был добавлен новый модуль — res_pjsip_history, который обеспечивает сбор, фильтрацию и отображение SIP-сообщений в командной строке.


Пример работы модуля

Рассмотрим базовые возможности модуля:

Res_pjsip_history сохраняет в памяти историю всех отправленных и полученных SIP-сообщений, которые проходят через стек PJSIP.

Захват SIP-сообщений

Для того, чтоб начать захват нужно выполнить следующую команду:

CLI pjsip set history on

Для того, чтоб отключить захват выполните следующую команду:

CLI pjsip set history off

Эта команда не очищает историю сообщений, сообщения только перестают записываться. Для очистки истории есть следующая команда:

CLI pjsip set history clear

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

Просмотр

И так, вы включили запись, прошло какое-то время, пользователи совершали звонки, подключали аппараты и.т.д., и по итогам всего действия мы собрали какие-то данные, но как нам теперь их просмотреть?

Чтоб показать всю историю собранных сообщений нужно выполнить следующую команду: CLI pjsip show history

Эта команда предоставит краткое изложение истории sip-сообщений.

Просмотреть подробнее какое-то конкретное SIP-сообщение, нужно указать в команде его номер. Команда примет следующий вид:

CLI pjsip show history entry 6 ,где цифра обозначает номер строки



Пожалуйста, обратите внимание, что номера всех записей отображаются в левом столбце. Номера сообщений идут по порядку и их номер увеличивается с каждым полученным или отправленным SIP-сообщением.

Манипуляции с результатами

Выше мы получили подробную информацию о sip-сообщении. Тем не менее, в таком виде редко когда удобно просматривать сообщения, в особенности когда на станции зарегистрированы не два пользователя, а 10 и даже больше и все они в этот момент совершают звонки. Модуль res_pjsip_history поддерживает простую фильтрацию запросов по заданным условиям, подобную тому, который есть в SQL.

Обратите внимание, что модуль res_pjsip_history был включен в asterisk, начиная с версии Asterisk 13.8.0

Для теста давайте отфильтруем запрос по SIP Call-ID, используя следующую команду:

CLIpjsip show history where sip.msg.call-id = “ваш caller-id“

Результат выполнения команды вы можете видеть выше. Если вы знакомы или даже работали с программой «sngrep», то можете заметить сходства в отображении информации о входящих и исходящих пакетов.

На момент написания статьи модуль res_pjsip_history поддерживает следующие команды:

  • number: номер записи в истории
  • timestamp: время отправка сообщения SIP
  • addr: Адрес источника/Получателя SIP-сообщения
  • sip.msg.request.method: Метод запроса SIP
  • sip.msg.call—id : Значение заголовка

Так же Res_pjsip_history поддерживает все логические операторы, а так же операторы регулярных выражений.

Полезные инструменты

И все же советуем ознакомиться с удобными инструментами для отладки телефонии и по возможности использовать их.

SIP ответы и их значения

1XX – Информационные ответы

SIP/2.0 100 Trying — запрос обрабатывается

SIP/2.0 180 Ringing — местоположение вызываемого пользователя определено. Выдан сигнал о входящем вызове

SIP/2.0 181 Call is Being Forwarded — прокси,сервер переадресует вызов к другому пользователю

SIP/2.0 182 Call is Queued — вызываемый абонент временно не доступен, вызов поставлен в очередь

SIP/2.0 183 Session Progress — используется для того, чтобы заранее получить описание сеанса информационного обмена от шлюзов на пути к вызываемому пользователю

2XX — ответы о завершении запроса

SIP/2.0 200 OK — успешное завершение

SIP/2.0 202 Accepted — запрос принят для обработки Используется для справки о состоянии обработки

3XX — сообщения о переадресации

SIP/2.0 300 Multiple Choices — указывает несколько SIP-адресов, по которым можно найти вызываемого пользователя

SIP/2.0 301 Moved Permanently — вызываемый пользователь больше не находится по адресу, указанному в запросе

SIP/2.0 302 Moved Temporarily — пользователь временно сменил местоположение

SIP/2.0 305 Use Proxy — вызываемый пользователь не доступен непосредственно, входящий вызов должен пройти через прокси-сервер

SIP/2.0 380 Alternative Service — запрошенная услуга недоступна, но доступны альтернативные услуги

4XX — невозможность обработать запрос

SIP/2.0 400 Bad Request — запрос не понят из-за синтаксических ошибок в нем, ошибка в сигнализации, скорее всего что-то с настройками оборудования

SIP/2.0 401 Unauthorized — нормальный ответ сервера о том, что пользователь еще не авторизировался; обычно после этого абонентское оборудование отправляет на сервер новый запрос, содержащий логин и пароль

SIP/2.0 401 Expired Authorization — время регистрации истекло

SIP/2.0 402 Payment Required — требуется оплата (зарезервирован для использования в будущем)

SIP/2.0 403 No Such User — нет такого пользователя, ошибка в номере, логине или пароле

SIP/2.0 403 User Disabled — пользователь отключен

SIP/2.0 403 Wrong Guess — ошибка в пароле

SIP/2.0 403 Conflict — такой SIP-номер уже используется

SIP/2.0 403 Forbidden — абонент не зарегистрирован

SIP/2.0 403 Empty Route Set — нет ни одного шлюза в роутинге

SIP/2.0 403 Caller Not Registered — нет такого пользователя

SIP/2.0 403 Out of Look-Ahead Retries — перебор узлов закончен

SIP/2.0 403 Invalid Phone Number — нет такого направления

SIP/2.0 403 No Money Left on RFC Account — на счету нет денег для совершения звонка

SIP/2.0 404 Not found — вызываемый абонент не найден, нет такого SIP-номера

SIP/2.0 404 Undefined Reason — неопределенное направление

SIP/2.0 404 Unknown user account — логин и пароль не найдены

SIP/2.0 404 Out of Order — в заявке на маршрутизацию по этому направлению нет ни одного шлюза, проверьте настройку маршрутизации по этому направлению.

SIP/2.0 405 Method Not Allowed — метод не поддерживается, может возникать если пользователь пытается отправлять голосовую почту и т.п.

SIP/2.0 406 No codecs match — неправильная конфигурация кодеков

SIP/2.0 406 Not Acceptable — пользователь не доступен

SIP/2.0 407 Proxy Authentication Required — необходима аутентификация на прокси-сервере

SIP/2.0 408 Request Timeout — время обработки запроса истекло: Абонента не удалось найти за отведенное время

SIP/2.0 408 Login timed out — за отведенное время не получен ответ от сервера на запрос авторизации

SIP/2.0 410 No Route — вариант SIP/2.0 403 Empty Route Set; нет доступа к ресурсу: Ресурс по указанному адресу больше не существует

SIP/2.0 413 Request Entity Too Large — размер запроса слишком велик для обработки на сервере

SIP/2.0 415 No Media — звонок совершается неподдерживаемым кодеком

SIP/2.0 416 Unsupported Scheme — сервер не может обработать запрос из-за того, что схема адреса получателя ему непонятна

SIP/2.0 420 Bad extension — неизвестное расширение: Сервер не понял расширение протокола SIP

SIP/2.0 421 Extension Required — в заголовке запроса не указано, какое расширение сервер должен применить для его обработки

SIP/2.0 423 Interval Too Brief — сервер отклоняет запрос, так как время действия ресурса короткое

SIP/2.0 480 Invalid Phone Number — неправильный номер телефона, не соответствует к-во цифр или неправильный код страны или города

SIP/2.0 480 Destination Not Found In Client Plan — направления нет в тарифном плане абонента

SIP/2.0 480 Wrong DB Response — проблемы с центральной базой сети

SIP/2.0 480 DB Timeout — проблемы с центральной базой сети

SIP/2.0 480 Database Error — проблемы с центральной базой сети

SIP/2.0 480 Codec Mismatch — несоответствие кодеков

SIP/2.0 480 No Money Left on RFC Account — нет денег на счету, обратитесь к администратору сети.

SIP/2.0 480 Empty Route Set — пустое направление, нет принимающих шлюзов

SIP/2.0 480 No money left — недостаточно денег на счете

SIP/2.0 480 Temporarily Unavailable — временно недоступное направление попробуйте позвонить позже

SIP/2.0 481 Call Leg/Transaction Does Not Exist — действие не выполнено, нормальный ответ при поступлении дублирующего пакета

SIP/2.0 482 Loop Detected — обнаружен замкнутый маршрут передачи запроса

SIP/2.0 483 Too Many Hops — запрос на своем пути прошел через большее число прокси-серверов, чем разрешено

SIP/2.0 484 Address Incomplete — принят запрос с неполным адресом

SIP/2.0 485 Ambiguous — адрес вызываемого пользователя не однозначен

SIP/2.0 486 Busy Here — абонент занят

SIP/2.0 487 Request Terminated — запрос отменен, обычно приходит при отмене вызова

SIP/2.0 488 Codec Mismatch — нет шлюзов с поддержкой заказанного кодека

SIP/2.0 488 Private IP Address — адрес RTP media из сетей RFC1918

SIP/2.0 491 Request Pending — запрос поступил в то время, когда сервер еще не закончил обработку другого запроса, относящегося к тому же диалогу

SIP/2.0 493 Undeciperable — сервер не в состоянии подобрать ключ дешифрования: невозможно декодировать тело S/MIME сообщения

SIP/2.0 499 Codec Mismatch — отсутствует кодек

5XX — ошибки сервера

SIP/2.0 500 Internal Server Error — внутренняя ошибка сервера

SIP/2.0 500 DB Timeout — нет ответа от базы данных

SIP/2.0 500 Database Error — то же самое, но в другой момент

SIP/2.0 500 Wrong DB Response — неправильный ответ базы данных, редкая ошибка

SIP/2.0 500 Undefined Reason — неопределенная причина

SIP/2.0 500 account has been moved to a remote system — аккаунт перенесен в удаленную систему (дословно)

SIP/2.0 501 Method Not Supported Here — в сервере не реализованы какие-либо функции, необходимые для обслуживания запроса: Метод запроса SIP не поддерживается

SIP/2.0 502 Bad Gateway — сервер, функционирующий в качестве шлюза или прокси-сервера, принимает некорректный ответ от сервера, к которому он направил запрос

SIP/2.0 503 Service Unavailable — сервер не может в данный момент обслужить вызов вследствие перегрузки или проведения технического обслуживания

SIP/2.0 504 Server time-out — сервер не получил ответа в течение установленного промежутка времени от сервера, к которому он обратился для завершения вызова

SIP/2.0 505 SIP Version not supported — версия не поддерживается: Сервер не поддерживает эту версию протокола SIP

SIP/2.0 513 Message too big — сервер не в состоянии обработать запрос из-за большой длины сообщения

6XX — глобальная ошибка

SIP/2.0 600 Busy everywhere — вызываемый пользователь занят и не желает принимать вызов в данный момент

SIP/2.0 603 Decline — вызываемый пользователь не желает принимать входящие вызовы, не указывая причину отказа

SIP/2.0 604 Does Not Exist Anywhere — вызываемого пользователя не существует

SIP/2.0 606 Not Acceptable — соединение с сервером было установлено, но отдельные параметры, такие как тип запрашиваемой информации, полоса пропускания, вид адресации не доступны


Источник: voxlink.ru