Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
В этой статье мы поговорим об основах захвата и анализа SIP-трафика, генерируемого АТС 3CX. Статья адресована начинающим системным администраторам или обычным пользователям, в обязанности которых входит обслуживание телефонии. Для углубленного изучения темы рекомендуем пройти Расширенный учебный курс 3CX.
3CX V16 позволяет делать захват SIP-трафика непосредственно через веб-интерфейс сервера и сохранять в стандартном формате Wireshark PCAP. Вы можете прикрепить файл захвата при обращении в техподдержку или скачать для самостоятельного анализа.
Если 3CX работает на Windows, необходимо самостоятельно установить Wireshark на сервер 3CX. В противном случае при попытке захвата появится следующее сообщение.
В Linux-системах утилита tcpdump устанавливается автоматически при установке или обновлении 3CX.
Для начала захвата перейдите в раздел интерфейса Главная > События SIP и выберите интерфейс, на котором следует сделать захват. Также можно захватывать трафик на всех интерфейсах одновременно, кроме интерфейсов туннелирования IPv6.
В 3CX для Linux можно делать захват трафика для локального хоста (lo). Этот захват используется для анализа подключений SIP-клиентов по технологии 3CX Tunnel и Session Border Controller.
Кнопка «Захват трафика» запускает Wireshark на Windows или tcpdump на Linux. В этот момент нужно быстро воспроизвести проблему, т.к. захват загружает процессор и занимает достаточно места на диске.
Обращайте внимание на следующие параметры вызова:
Старайтесь не кликать в других местах интерфейса, кроме кнопки «Остановить». Также не переходите по другим ссылкам в этом окне браузера. В противном случае, захват трафика будет продолжаться в фоне и приведет к дополнительной нагрузке на сервер.
Кнопка «Остановить» останавливает захват и сохраняет файл захвата. Вы можете скачать файл на свой компьютер для анализа в утилите Wireshark или сгенерировать специальный файл техподдержки, который будет включать этот захват и другую отладочную информацию. После скачивания или включения в пакет техподдержки, файл захвата автоматически удаляется с сервера 3CX в целях безопасности.
На сервере 3CX файл расположен в следующем месте:
Чтобы избежать повышенной нагрузки на сервер или потери пакетов при захвате, период захвата ограничен 2 млн. пакетов. После этого захват автоматически останавливается. Если вам нужен более длительный захват, используйте отдельную утилиту Wireshark, как описано ниже.
Если вас интересует более глубокий анализ сетевого трафика, захватывайте его вручную. Загрузите утилиту Wireshark для вашей ОС отсюда. После установки утилиты на сервере 3CX, перейдите в раздел Capture > Interfaces. Здесь будут показаны все сетевые интерфейсы ОС. IP-адреса интерфейсов могут показываться в стандарте IPv6. Чтобы увидеть адрес IPv4, кликните по адресу IPv6.
Выберите интерфейс для захвата и нажмите кнопку Options. Снимите галочку Capture Traffic in promiscuous mode, а остальные настройки оставьте без изменений.
Теперь следует воспроизвести проблему. Когда проблема воспроизведена, остановите захват (меню Capture > Stop). Отобрать SIP-сообщения можно в меню Telephony > SIP Flows.
Рассмотрим основные поля SIP-сообщения INVITE, которое отправляется для установления VoIP-вызова, т.е. является исходной точкой для анализа. Обычно SIP INVITE включает от 4 до 6 полей с информацией, которая используется оконечными SIP-устройствами (телефонами, шлюзами) и операторами связи. Понимание содержимого INVITE и следующих за ним сообщений часто помогает определить источник проблемы. Кроме того, знание полей INVITE помогает при подключении SIP-операторов к 3CX или объединении 3CX с другими SIP АТС.
В сообщении INVITE пользователи (или SIP-устройства) определяются по URI. Обычно SIP URI – это номер телефона пользователя + адрес SIP сервера. SIP URI очень похож на e-mail адрес и записывается как sip:x@y:Port.
Request-Line-URI — поле содержит получателя вызова. В нем содержится та же информация, что и в поле To, но без отображаемого имени пользователя (Display Name).
Via — каждый SIP-сервер (прокси), через который проходит запрос INVITE, добавляет вверху списка Via свой IP-адрес и порт, на который было получено сообщение. Затем сообщение передается дальше по пути следования. Когда конечный получатель отвечает на запрос INVITE, все транзитные узлы «просматривают» заголовок Via и возвращают сообщение отправителю по тому же маршруту. При этом транзитный SIP-прокси удаляет свои данные из заголовка.
From — заголовок указывает на инициатора запроса с точки зрения SIP-сервера. Заголовок формируется таким же образом, как e-mail адрес (user@domain, где user — добавочный номер пользователя 3CX, а domain — локальный IP-адрес или SIP-домен сервера 3CX). Как и заголовок To, заголовок From содержит URI и, опционально, отображаемое имя пользователя Display Name. По заголовку From можно понять, как именно следует обрабатывать этот SIP-запрос.
Стандарт SIP RFC 3261 предусматривает, что если отображаемое имя Display Name не передается, IP-телефон или VoIP-шлюз (UAC) должны использовать Display Name «Anonymous», например, From: «Anonymous» <sip:10000@10.172.0.2>.
To — этот заголовок указывает на получателя запроса. Это может быть как конечный получатель вызова, так и промежуточное звено. Обычно в заголовке содержится SIP URI, однако возможны и другие схемы (см. RFC 2806 [9]). Однако SIP URI должен поддерживатся во всех имплементациях протокола SIP, независимо от производителя оборудования. Заголовок To также может содержать отображаемое имя Display Name, например, To: «Имя Фамилия» <sip:101@10.172.0.2>).
Обычно поле To содержит SIP URI, указывающий на первый (следующий) SIP-прокси, который будет обрабатывать запрос. Это не обязательно должен быть конечный получатель запроса.
Contact — заголовок содержит SIP URI, по которому можно связаться с отправителем запроса INVITE. Это обязательный заголовок, который должен содержать только один SIP URI. Он является частью двусторонней коммуникации, соответствующей первоначальному запросу SIP INVITE. Весьма важно, чтобы заголовок Contact содержал корректную информацию (включая IP-адрес), по которому отправитель запроса ожидает ответа. URI Contact используется и в дальнейших коммуникациях, уже после установления сеанса связи.
Allow — поле содержит список параметров (SIP-методов), разделенных запятой. Они описывают, какие возможности протокола SIP поддерживает данный отправитель (устройство). Полный список методов: ACK, BYE, CANCEL, INFO, INVITE, NOTIFY, OPTIONS, PRACK, REFER, REGISTER, SUBSCRIBE, UPDATE. Подробнее SIP-методы описаны здесь.
3CX V16 позволяет делать захват SIP-трафика непосредственно через веб-интерфейс сервера и сохранять в стандартном формате Wireshark PCAP. Вы можете прикрепить файл захвата при обращении в техподдержку или скачать для самостоятельного анализа.
Если 3CX работает на Windows, необходимо самостоятельно установить Wireshark на сервер 3CX. В противном случае при попытке захвата появится следующее сообщение.
В Linux-системах утилита tcpdump устанавливается автоматически при установке или обновлении 3CX.
Захват трафика
Для начала захвата перейдите в раздел интерфейса Главная > События SIP и выберите интерфейс, на котором следует сделать захват. Также можно захватывать трафик на всех интерфейсах одновременно, кроме интерфейсов туннелирования IPv6.
В 3CX для Linux можно делать захват трафика для локального хоста (lo). Этот захват используется для анализа подключений SIP-клиентов по технологии 3CX Tunnel и Session Border Controller.
Кнопка «Захват трафика» запускает Wireshark на Windows или tcpdump на Linux. В этот момент нужно быстро воспроизвести проблему, т.к. захват загружает процессор и занимает достаточно места на диске.
Обращайте внимание на следующие параметры вызова:
- Номер, с которого позвонили, на который позвонили и другие номера / участники вызова.
- Точное время возникновения проблемы по часам сервера 3CX.
- Маршрут прохождения вызова.
Старайтесь не кликать в других местах интерфейса, кроме кнопки «Остановить». Также не переходите по другим ссылкам в этом окне браузера. В противном случае, захват трафика будет продолжаться в фоне и приведет к дополнительной нагрузке на сервер.
Получение файла захвата
Кнопка «Остановить» останавливает захват и сохраняет файл захвата. Вы можете скачать файл на свой компьютер для анализа в утилите Wireshark или сгенерировать специальный файл техподдержки, который будет включать этот захват и другую отладочную информацию. После скачивания или включения в пакет техподдержки, файл захвата автоматически удаляется с сервера 3CX в целях безопасности.
На сервере 3CX файл расположен в следующем месте:
- Windows: C:\ProgramData\3CX\Instance1\Data\Logs\dump.pcap
- Linux: /var/lib/3cxpbx/Instance/Data/Logs/dump.pcap
Чтобы избежать повышенной нагрузки на сервер или потери пакетов при захвате, период захвата ограничен 2 млн. пакетов. После этого захват автоматически останавливается. Если вам нужен более длительный захват, используйте отдельную утилиту Wireshark, как описано ниже.
Захват трафика утилитой Wireshark
Если вас интересует более глубокий анализ сетевого трафика, захватывайте его вручную. Загрузите утилиту Wireshark для вашей ОС отсюда. После установки утилиты на сервере 3CX, перейдите в раздел Capture > Interfaces. Здесь будут показаны все сетевые интерфейсы ОС. IP-адреса интерфейсов могут показываться в стандарте IPv6. Чтобы увидеть адрес IPv4, кликните по адресу IPv6.
Выберите интерфейс для захвата и нажмите кнопку Options. Снимите галочку Capture Traffic in promiscuous mode, а остальные настройки оставьте без изменений.
Теперь следует воспроизвести проблему. Когда проблема воспроизведена, остановите захват (меню Capture > Stop). Отобрать SIP-сообщения можно в меню Telephony > SIP Flows.
Основы анализа трафика — сообщение SIP INVITE
Рассмотрим основные поля SIP-сообщения INVITE, которое отправляется для установления VoIP-вызова, т.е. является исходной точкой для анализа. Обычно SIP INVITE включает от 4 до 6 полей с информацией, которая используется оконечными SIP-устройствами (телефонами, шлюзами) и операторами связи. Понимание содержимого INVITE и следующих за ним сообщений часто помогает определить источник проблемы. Кроме того, знание полей INVITE помогает при подключении SIP-операторов к 3CX или объединении 3CX с другими SIP АТС.
В сообщении INVITE пользователи (или SIP-устройства) определяются по URI. Обычно SIP URI – это номер телефона пользователя + адрес SIP сервера. SIP URI очень похож на e-mail адрес и записывается как sip:x@y:Port.
Request-Line-URI:
Request-Line-URI — поле содержит получателя вызова. В нем содержится та же информация, что и в поле To, но без отображаемого имени пользователя (Display Name).
Via:
Via — каждый SIP-сервер (прокси), через который проходит запрос INVITE, добавляет вверху списка Via свой IP-адрес и порт, на который было получено сообщение. Затем сообщение передается дальше по пути следования. Когда конечный получатель отвечает на запрос INVITE, все транзитные узлы «просматривают» заголовок Via и возвращают сообщение отправителю по тому же маршруту. При этом транзитный SIP-прокси удаляет свои данные из заголовка.
From:
From — заголовок указывает на инициатора запроса с точки зрения SIP-сервера. Заголовок формируется таким же образом, как e-mail адрес (user@domain, где user — добавочный номер пользователя 3CX, а domain — локальный IP-адрес или SIP-домен сервера 3CX). Как и заголовок To, заголовок From содержит URI и, опционально, отображаемое имя пользователя Display Name. По заголовку From можно понять, как именно следует обрабатывать этот SIP-запрос.
Стандарт SIP RFC 3261 предусматривает, что если отображаемое имя Display Name не передается, IP-телефон или VoIP-шлюз (UAC) должны использовать Display Name «Anonymous», например, From: «Anonymous» <sip:10000@10.172.0.2>.
To:
To — этот заголовок указывает на получателя запроса. Это может быть как конечный получатель вызова, так и промежуточное звено. Обычно в заголовке содержится SIP URI, однако возможны и другие схемы (см. RFC 2806 [9]). Однако SIP URI должен поддерживатся во всех имплементациях протокола SIP, независимо от производителя оборудования. Заголовок To также может содержать отображаемое имя Display Name, например, To: «Имя Фамилия» <sip:101@10.172.0.2>).
Обычно поле To содержит SIP URI, указывающий на первый (следующий) SIP-прокси, который будет обрабатывать запрос. Это не обязательно должен быть конечный получатель запроса.
Contact:
Contact — заголовок содержит SIP URI, по которому можно связаться с отправителем запроса INVITE. Это обязательный заголовок, который должен содержать только один SIP URI. Он является частью двусторонней коммуникации, соответствующей первоначальному запросу SIP INVITE. Весьма важно, чтобы заголовок Contact содержал корректную информацию (включая IP-адрес), по которому отправитель запроса ожидает ответа. URI Contact используется и в дальнейших коммуникациях, уже после установления сеанса связи.
Allow:
Allow — поле содержит список параметров (SIP-методов), разделенных запятой. Они описывают, какие возможности протокола SIP поддерживает данный отправитель (устройство). Полный список методов: ACK, BYE, CANCEL, INFO, INVITE, NOTIFY, OPTIONS, PRACK, REFER, REGISTER, SUBSCRIBE, UPDATE. Подробнее SIP-методы описаны здесь.