Анализ сетевой связности VoIP через tcpdump и tshark на Linux-шлюзах
- Спорадические обрывы разговоров ровно на 32-й секунде (не пришел ACK).
- Жалобы пользователей на посторонние шумы, «кваканье» или металлический призвук в трубке.
- Невозможность локализовать сетевой узел, на котором происходят потери RTP пакетов.
- Необходимость захвата дампа звонков на высоконагруженном транзитном VoIP-сервере без остановки сервиса.
1. Точечный захват SIP сигнализации без мусора через tcpdump
# Захват SIP пакетов (порт 5060 UDP/TCP и 5061 TLS) с записью в ротируемый файл
tcpdump -i any -nn -s 0 -C 100 -W 10 -w /tmp/sip_capture.pcap 'port 5060 or port 5061'
# Захват сигнализации конкретного проблемного IP адреса
tcpdump -i eth0 -nn -vvv -s 0 host 192.168.10.50 and port 50602. Анализ и фильтрация VoIP трафика с помощью tshark
# Установка tshark на сервер
apt-get install -y tshark || dnf install -y wireshark-cli
# Просмотр всех SIP вызовов в pcap-файле (Call-ID, From, To, Method, Status)
tshark -r /tmp/sip_capture.pcap -Y "sip" -T fields \
-e frame.time -e ip.src -e ip.dst -e sip.Call-ID -e sip.Method -e sip.Status-Code
# Вывод полного древа сообщений конкретного звонка по Call-ID
tshark -r /tmp/sip_capture.pcap -Y "sip.Call-ID == '4a7b9c1e-123456@192.168.1.100'" -V3. Оценка качества голоса (Jitter, Packet Loss, MOS) через tshark
Утилита tshark позволяет извлечь параметры качества RTP-потока без графического интерфейса:
# Анализ статистики всех RTP потоков в дампе
tshark -r /tmp/full_call.pcap -q -z rtp,streamsПример вывода метрик:
========================= RTP Streams ========================
Src IP:Port Dest IP:Port SSRC Payload Pkts Lost Max Delta(ms) Max Jitter(ms) Mean Jitter(ms)
192.168.1.10:10002 10.0.0.1:16420 0x3F2A1B4C ITU-G.711A 1500 0 (0.0%) 20.12 0.45 0.18
10.0.0.1:16420 192.168.1.10:10002 0x7E1A2C3D ITU-G.711A 1480 20 (1.4%) 85.40 18.20 12.404. Фильтрация звонка с одновременным захватом RTP голоса
# Захват сигнализации и диапазона голосовых портов RTP (10000-20000)
tcpdump -i any -nn -s 0 -w /tmp/call_with_audio.pcap 'host 192.168.10.50 and (port 5060 or portrange 10000-20000)' Частые вопросы (FAQ)
Почему вызов завершается ровно через 32 секунды после ответа?
Вызывающая сторона отправляет ответ 200 OK на INVITE, но ответный пакет ACK теряется из-за некорректного роутинга или фаервола. Согласно таймерам RFC 3261 (Timer H), если ACK не получен в течение 32 секунд (64*T1), сессия принудительно разрывается отправкой пакета BYE.
Как извлечь сырой аудиофайл (.raw/.wav) из pcap дампа через tshark?
Используйте связку: tshark -r call.pcap -Y 'rtp && rtp.ssrc == 0x3F2A1B4C' -T fields -e rtp.payload | xxd -r -p > audio.raw, после чего конвертируйте через sox: sox -t al -r 8000 -c 1 audio.raw output.wav.
Какой уровень джиттера считается критическим для качества голоса?
При Jitter < 20 мс деградация незаметна. При Jitter от 20 до 50 мс стандартный джиттер-буфер сглаживает задержку с небольшим отставанием. При Jitter > 50-70 мс начинается пропадание пакетов, а оценка MOS падает ниже 3.5.
Как захватить TLS трафик SIP (порт 5061), если он зашифрован?
Необходимо экспортировать предмастер-ключи SSL/TLS (SSLKEYLOGFILE) из приложения или передать приватный RSA ключ сервера (.key) в tshark через опцию: -o 'tls.keys_list:0.0.0.0,5061,sip,/etc/keys/server.key'.