Проблемы с качеством голоса в IP-телефонии — одна из самых сложных задач для системного администратора. Ситуация, когда внутренняя связь работает идеально, а внешние звонки «заикаются» или обрываются, часто списывается провайдерами на «проблемы в вашей локальной сети». В этой статье мы подробно разберем, как провести комплексную диагностику инфраструктуры, выявить узкие места в настройках Mikrotik и устранить потери пакетов, мешающие нормальной работе Asterisk.
Рассмотрим типовой сценарий: в офисе установлено более 10 IP-телефонов (например, Yealink), сервер Asterisk (FreePBX) и гигабитная сеть на неуправляемых коммутаторах. При этом наблюдаются задержки голоса и «кваканье» именно на внешних линиях. Первым делом нам необходимо разграничить зоны ответственности: локальная сеть, шлюз (Mikrotik) и канал провайдера.
Проанализируем результаты пинга. Если при проверке связи внутри сети пакеты проходят стабильно, а при пинге внешних ресурсов (например, шлюза провайдера или ya.ru) наблюдаются потери даже в 1-4%, это критично для UDP-трафика, который использует SIP. Для голоса потери пакетов более 0.5-1% уже становятся заметны на слух.
Выясним причину странного поведения сети при передаче больших пакетов. Проведем тест: попробуем «пропинговать» оборудование пакетами разного размера. В процессе диагностики часто выясняется, что пакеты стандартного размера проходят, а пакеты более 500-1000 байт — нет.
Для проверки в консоли Windows или Mikrotik используем команду:
ping [IP-адрес] -l 1500 -f
Если пакеты фрагментируются или теряются на неуправляемых коммутаторах (например, старых моделях D-Link), это может свидетельствовать о проблемах с Flow Control или переполнением буферов при одновременной работе тяжелых приложений (например, файловый обмен 1С) и телефонии.
Одной из главных причин проблем в сетях на базе Mikrotik является конфликт механизмов приоритизации трафика и ускорения обработки пакетов. Разберем по шагам, на что обратить внимание:
IP -> Firewall -> Service Ports. Найдем пункт sip и отключим его. В большинстве случаев встроенный «помощник» Mikrotik только мешает корректной передаче заголовков SIP, вызывая обрывы через 30 секунд разговора или отсутствие односторонней слышимости.fasttrack-connection в Firewall Filter не перехватывает этот трафик. Пакеты, попавшие в FastTrack, идут в обход очередей (Queues), и ваша приоритизация перестает работать.
Для решения добавим разрешающее правило для IP-адреса Asterisk выше правила FastTrack:
/ip firewall filter add action=accept chain=forward src-address=[IP_Asterisk] place-before=[номер_правила_fasttrack]
Посмотрим на ситуацию со стороны сервера телефонии. Если проблемы возникают только на межгороде, проанализируем используемые кодеки. Часто внутри сети телефоны используют широкополосный кодек G.722, а провайдер требует G.711 (alaw/ulaw). Процесс транскодинга (перекодирования) на лету может вносить задержки.
Рекомендуем придерживаться следующей стратегии настройки в FreePBX:
alaw, ulaw.
jbenable = yes
jbforce = yes
jbimpl = adaptive
jbtargetextra = 40
Рассмотрим влияние других приложений. Если в сети используется внутренний чат или специфическое ПО, рассылающее UDP-бродкасты (широковещательные пакеты), это может «забивать» очередь на портах неуправляемых коммутаторов. Поскольку телефоны и компьютеры находятся в одной подсети (0/24), любой всплеск трафика от 1С или копирования файлов создает микро-задержки для RTP-пакетов.
Идеальным решением будет разделение сети на VLAN:
Проанализировав ситуацию, мы пришли к выводу, что основная проблема часто кроется не в «слабом интернете», а в обработке трафика роутером. Как показал опыт, отключение правил Mangle или корректная настройка MSS Clamping (изменение размера сегмента TCP) могут моментально стабилизировать пинги.
Помните, что для SIP-телефонии стабильность (отсутствие джиттера и потерь) гораздо важнее ширины канала. Даже на канале в 7 Мбит/с можно комфортно проводить десятки одновременных разговоров, если пакеты доставляются вовремя и без искажений со стороны сетевого экрана.