Использование tcpdump для захвата трафика

Мы уже научились отслеживать состояние каналов и диалплана через консоль Asterisk (CLI). Этого достаточно, чтобы понять внутреннюю логику системы. Но если CLI «молчит», а связи нет, проблема кроется глубже — на уровне сети. Пакеты могут теряться на маршрутизаторах, блокироваться файрволом или уходить на неверные порты.

Инструмент tcpdump — стандарт для захвата трафика в Linux. Он позволяет перехватить необработанные данные прямо с сетевой карты, чтобы увидеть реальную картину взаимодействия серверов.

Почему CLI недостаточно

Asterisk не покажет входящий вызов, если пакет INVITE не дошел до него из-за ошибок NAT или настроек файрвола. В CLI вы увидите пустоту, но tcpdump зафиксирует пакет на интерфейсе. Это помогает быстро понять: проблема в настройках самого Asterisk или в сетевом окружении.

Для глубокого анализа данные нужно сохранять в формате pcap (Packet Capture). Это слепок трафика, который можно открыть в графических анализаторах.

Базовый синтаксис и флаги

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

Типовая команда для сбора дампа: sudo tcpdump -i any -s 0 -n -nn -v -w /tmp/dump_file.pcap

  • -i any: слушать все интерфейсы. Если известен конкретный (например, eth0), лучше указать его для экономии ресурсов.
  • -s 0: захватывать пакет целиком. Важно для RTP (голоса) — обрезанные пакеты нельзя будет прослушать.
  • -n и -nn: не тратить время на преобразование IP в имена хостов и портов в названия протоколов. Это снижает нагрузку на CPU.
  • -v: подробный режим.
  • -w: запись в файл pcap.

Фильтрация пакетов

Чтобы не искать иголку в стоге сена, используйте фильтры BPF (Berkeley Packet Filter). Они позволяют записывать только нужный трафик: по IP, протоколу или порту.

Захват сигнализации (SIP) и медиа (RTP) для одного устройства Если у телефона с IP 192.168.1.50 проблемы со звуком, используйте:

sudo tcpdump -i any -s 0 -n -w /tmp/issue_call.pcap host 192.168.1.50

Команда соберет все пакеты (UDP, TCP, ICMP), где участвует этот адрес.

Слишком узкий фильтр

sudo tcpdump -i any port 5060 -w /tmp/only_sip.pcap

Ошибка: Вы запишете только SIP-сигнализацию. Если в звонке «односторонняя слышимость», вы не увидите RTP-потоки (порты 10000–20000) и не сможете найти причину.

Сценарии для работы

  1. Порты PJSIP и RTP: udp port 5060 or udp range 10000-20000
  2. Исключение SSH-трафика: Если выводите дамп прямо в консоль (без -w), добавьте not port 22, иначе вывод зациклится сам на себе.
  3. Трафик между АТС и провайдером: host 1.2.3.4 and host 5.6.7.8

Практикум: Сбор данных

Кейс: провайдер утверждает, что шлет вызов, но в Asterisk CLI тихо. Проверим это.

Алгоритм диагностики:

  1. Подключитесь к серверу по SSH.
  2. Запустите захват, ограничив его IP провайдера (172.16.0.1): sudo tcpdump -i any -s 0 -n -w /tmp/provider_test.pcap host 172.16.0.1
  3. Сделайте тестовый звонок.
  4. Нажмите Ctrl+C после завершения.
  5. Проверьте файл: ls -lh /tmp/provider_test.pcap.
  6. Скачайте его на компьютер через WinSCP или scp.

Читать бинарный файл в текстовом редакторе бесполезно. В следующей теме мы откроем этот дамп в Wireshark, чтобы увидеть графическую схему звонка и прослушать запись голоса.

Понравился урок?

Сохраните прогресс и получите персональный курс по любой теме — без форм и паролей

Продолжить в Telegram