Захват pcap

Захват pcap - полезная функция для отладки VoIP звонков и соообщений.
Она позволяет получать .pcap.gz файлы с полным дампом звонка/сообщений из CDR/EDR.

Проблемы ручного захвата pcap.

Очень часто при работе системы под большим потоком звонков/собщений требуется отладить определенный звонок/сообщение.
Например, при подключении нового оригинатора или терминатора.
Или при отладке неудавшегося звонка/сообщения, который был несколько часов назад.
На системе, обслуживающей небольшое кол-во вызовов, можно воспользоваться инструкцией из раздела Отладка VoIP звонка с Wireshark или Отладка SMPP сообщения с Wireshark и самостоятельно снять дамп и потом его расшифровать с помощью wireshark.

Однако если система уже работает под потоком, то вышеприведенная инструкция для снятия дампа может оказаться труднореализуемой.
Например, если вы будете снимать дамп всех проходящих пакетов, то ваш .pcap файл станет настолько большим, что wirehshark не сможет его открыть.
Вы можете обойти эту проблему, сняв дамп с фильтром по определенному IP адресу.

Однако в этом случае у вас будут проблемы со снятием дампа, если IP адрес для медиа не будет совпадать для IP адреса для сигнализации со стороны пира.
Аналогично, если оригинатор - это кластер, и вызов может приходить с нескольких IP.
Вы можете обойти и эту проблему, указав в фильтре для tcpdump все возможные IP адреса или сети.

Однако здесь вас поджидает новая проблема.
Если вы снимаете дамп для оригинатора и хотите увидеть в каком виде вызов ушел на терминатора.
Здесь не обойтись без расширения фильтра для tcpdump.
Однако для сложных правил маршрутизации мы даже можем не знать, на какого терминатора уйдет вызов.
А добавлять в фильтр всех терминаторов может быть слишком ресурcоемко.

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

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

И даже после всего этого у вас могут быть трудности с вычленением нужного звонка/сообщения из потока, который записался в файл.
Потому что в файл будет писаться весь поток звонков от данного пира.
Поэтому остается необходимость записывать очень недолгое время, потому что wireshark может просто не открыть файл из-за размера.

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

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

Как работает автоматизация захвата pcap.

Реализация захвата pcap в Smartswitch - это и есть это автоматизированное решение, которое помогает решить все вышеописанные проблемы.

Для захвата pcap используется приложение-демон sniffer.
Это приложение прослушивает трафик на уровне сетевых интерфейсов системы.
Однако обрабатывать весь трафик, проходящий через все интерфейсы, очень ресурсозатратно.
Поэтому приложение устанавливает специальные фильтры, соответствующие сконфигурированным пирам, на уровне операционной системы для выуживания только нужного трафика.
Таким образом, приложение захватывает трафик для выбранных пиров.
После захвата трафик разделяется на отдельные звонки/сообщения и сохраняется в файлы-дампы с расширением .pcap.
Эти файлы затем архивируются в формат .pcap.gz, воспринимаемый Wireshark.
Таким образом, файлы-дампы содержат только информацию касающуюся VoIP звонка или сообщения.
Это включает сигнализацию и медиа (RTP потоки, UDPTL факсы).
Посторонней информации в них не будет.
Файлы присоединяются к деталям соответствующих CDR или EDR в базе.

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

Режимы

Приложение демон имеет несколько режимов работы.
Режим работы конфигурируется на пирах в веб-интерфейсе.

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

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

Приложение-демон способно обрабатывать не только пиры со статическим IP адресом, а и пиры с динамическим, например SIP клиентов, которые регистрируются.
Также оно поддерживает пиры под NAT и пиры с указанным ACL вместо одного статического IP адреса.

И при всем при этом, сгенерированные файлы будет небольшого размера и быстро откроются в wireshark!
В своем браузере вы сможете настроить автоматическое открытие файлов с расширением .pcap и открытие полного дампа займет у вас пару секунд!
Приложение-демон очень производительное и способно сохранять сотни одновременных звонков.

Отладка неавторизованных звонков.

Побочным, но крайне полезным явлением, является возможность отладки неавторизованных звонков.
Включение захвата звонков на определенном пире аналогично включению tcpdump для всех IP адресов пира.
Если вызов не был авторизован, например из-за неправильного SIP пароля, его не будет видно в Детальном отчете по звонкам.
Однако он сохранится в Отчете по захваченным звонкам, где вы сможете его найти и скачать .pcap дамп.

English translation