Использование 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) и не сможете найти причину.
Сценарии для работы
- Порты PJSIP и RTP:
udp port 5060 or udp range 10000-20000 - Исключение SSH-трафика:
Если выводите дамп прямо в консоль (без
-w), добавьтеnot port 22, иначе вывод зациклится сам на себе. - Трафик между АТС и провайдером:
host 1.2.3.4 and host 5.6.7.8
Практикум: Сбор данных
Кейс: провайдер утверждает, что шлет вызов, но в Asterisk CLI тихо. Проверим это.
Алгоритм диагностики:
- Подключитесь к серверу по SSH.
- Запустите захват, ограничив его IP провайдера (
172.16.0.1):sudo tcpdump -i any -s 0 -n -w /tmp/provider_test.pcap host 172.16.0.1 - Сделайте тестовый звонок.
- Нажмите
Ctrl+Cпосле завершения. - Проверьте файл:
ls -lh /tmp/provider_test.pcap. - Скачайте его на компьютер через WinSCP или
scp.
Читать бинарный файл в текстовом редакторе бесполезно. В следующей теме мы откроем этот дамп в Wireshark, чтобы увидеть графическую схему звонка и прослушать запись голоса.
Понравился урок?
Сохраните прогресс и получите персональный курс по любой теме — без форм и паролей
Продолжить в Telegram