Владимир Кортель
04.12.2018
81351

Оперативная диагностика 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

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

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

  •  К 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 и в нашем случае команда примет следующий вид: # asteriskrx «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-телефона. В консоли она имеет следующий вид:

error 1

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

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

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

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

error 2

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

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

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

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

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

#iptables -L -nv -t nat ),

Применение команды 1

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

Применение команды 2

Если вы все сделал правильно, то устройство подключиться успешно. В этой статье мы не стали рассматривать проблемы которые могут возникнуть с 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


Применение команды 3

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

CLI> pjsip set history off

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

CLI> pjsip set history clear


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

Просмотр

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

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


Применение команды 6

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

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

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


Применение команды 7

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

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

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

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

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

CLI>pjsip show history where sip.msg.call-id = “ваш caller-id“

Применение команды 8

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

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

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

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

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

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

Установка и настройка Sngrep

Sngrep

Wireshark. Сохраняем дамп нужного разговора.

Перехват и прослушивание разговора в кодеках G722 и G729. Использование Wireshark.

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 — соединение с сервером было установлено, но отдельные параметры, такие как тип запрашиваемой информации, полоса пропускания, вид адресации не доступны

Кейсы внедрения
Asterisk от VoxLink
Узнайте, какие крупные компании уже используют Asterisk в работе.
Скачать
Подписаться
Уведомить о
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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.