QoS для VoIP: приоритизация трафика в корпоративной сети
Семёнов Евгений Сергеевич, директор АйТи Фреш. За 15+ лет я настроил VoIP в сотнях компаний — Asterisk, FreePBX, 3CX, облачные провайдеры. И почти везде первое, с чем сталкиваешься: «звук рвётся, когда кто-то качает файл». Причина одна — отсутствие QoS. Настроенный QoS превращает хаотичный канал в предсказуемый, где голос идёт первым, а фоновые задачи ждут своей очереди. В этой статье расскажу, как я делаю QoS на MikroTik, Cisco и в корпоративной LAN.
Что такое QoS на пальцах
QoS (Quality of Service) — это набор механизмов, которые управляют порядком и пропускной способностью разных видов трафика. В канале любого размера рано или поздно наступает момент перегрузки: кто-то начал бэкап на 500 Мбит/с, кто-то качает видео, кто-то открыл 1С через RDP — и VoIP начинает заикаться. QoS гарантирует, что приоритетный трафик никогда не будет стоять в очереди.
- Классификация — определение, к какому классу относится пакет (по порту, IP, DSCP-метке).
- Маркировка — установка DSCP/CoS значения в заголовок.
- Queuing — распределение пакетов по очередям разных приоритетов.
- Shaping / Policing — ограничение или сглаживание скорости неприоритетного трафика.
Стандарты DSCP для VoIP
| Тип трафика | DSCP (десятичное) | Обозначение | Комментарий |
|---|---|---|---|
| RTP (голос) | 46 | EF | Highest priority, low latency |
| Видео (WebRTC) | 34 | AF41 | High priority |
| SIP-сигналинг | 26 | AF31 | Medium-high priority |
| Критичные приложения (1С) | 18 | AF21 | Medium priority |
| Bulk (бэкапы) | 10 | AF11 | Low priority |
| Best effort | 0 | BE | Default |
QoS на MikroTik: Queue Tree с priority
MikroTik — мой основной инструмент. QoS делаю через Queue Tree на WAN-интерфейсе.
# Маркировка RTP (определяем голос по UDP-портам Asterisk)
/ip firewall mangle
add chain=prerouting protocol=udp dst-port=10000-20000 \
action=mark-packet new-packet-mark=voip-rtp passthrough=no
add chain=prerouting protocol=udp src-port=10000-20000 \
action=mark-packet new-packet-mark=voip-rtp passthrough=no
# Маркировка SIP-сигналинга
add chain=prerouting protocol=udp port=5060,5061 \
action=mark-packet new-packet-mark=voip-sig passthrough=no
add chain=prerouting protocol=tcp port=5060,5061 \
action=mark-packet new-packet-mark=voip-sig passthrough=no
# Установка DSCP для исходящего
add chain=postrouting packet-mark=voip-rtp action=change-dscp new-dscp=46
add chain=postrouting packet-mark=voip-sig action=change-dscp new-dscp=26
# Queue Tree
/queue tree
add name=WAN parent=ether1 max-limit=100M
add name=voip-rtp parent=WAN packet-mark=voip-rtp \
priority=1 limit-at=10M max-limit=20M queue=pcq-voip
add name=voip-sig parent=WAN packet-mark=voip-sig \
priority=2 limit-at=2M max-limit=4M
add name=other parent=WAN priority=7 limit-at=0 max-limit=80M
/queue type
add name=pcq-voip kind=pcq pcq-rate=100k pcq-classifier=dst-address,src-address
Priority=1 — самый высокий, пакеты из этой очереди идут первыми. PCQ делит полосу между разговорами поровну.
QoS на Cisco Catalyst / ISR
На Cisco подход чуть другой — class-map + policy-map + service-policy.
class-map match-any VOICE-RTP
match dscp ef
match access-group name VOICE-RTP-ACL
class-map match-any VOICE-SIG
match dscp af31
match access-group name VOICE-SIG-ACL
class-map match-any CRITICAL-DATA
match dscp af21
policy-map WAN-OUT
class VOICE-RTP
priority percent 20
set dscp ef
class VOICE-SIG
bandwidth percent 5
set dscp af31
class CRITICAL-DATA
bandwidth percent 30
class class-default
bandwidth percent 45
random-detect dscp-based
interface GigabitEthernet0/0/0
service-policy output WAN-OUT
ip access-list extended VOICE-RTP-ACL
permit udp any any range 16384 32767
Priority-класс даёт low-latency queue: пакеты всегда обрабатываются первыми, пока не превышен percent.
QoS на коммутаторах доступа
Не забывайте про LAN. На коммутаторах доступа (Cisco 2960, MikroTik CRS) тоже настраиваем trust DSCP, чтобы метки не терялись между устройствами.
# Cisco
mls qos
interface GigabitEthernet0/10
mls qos trust dscp
switchport voice vlan 20
# MikroTik SwOS
/interface ethernet switch qos-hw-offloading
set switch1 enabled=yes
Телефоны Yealink, Grandstream, Polycom уже ставят DSCP 46 в исходящие пакеты — нам остаётся только не стереть метку по пути.
QoS через VPN
Когда офис подключён к АТС через WireGuard или IPSec — нужно «протащить» DSCP-метки сквозь туннель.
# MikroTik WireGuard — pre-classify вручную
/ip firewall mangle
add chain=output out-interface=wg-hq action=change-dscp \
new-dscp=46 packet-mark=voip-rtp passthrough=no
На VPN-сервере принимающая сторона должна уметь верить внешнему DSCP. В большинстве Linux-туннелей это включается опцией dscp-copy или аналогом.
Реальный кейс: 120 SIP-линий на производстве
В сентябре 2025 клиент — металлургическое производство в Подмосковье с 320 сотрудниками, 120 SIP-линий, Asterisk в дата-центре МТС. Жалоба: «звук рвётся по вечерам, когда делаем бэкапы». Канал — 500 Мбит/с, а во время бэкапа — полная загрузка. До QoS: 32% звонков с MOS (Mean Opinion Score) ниже 3.5. После настройки QoS на пограничном MikroTik CCR2004 (класс VOICE с priority=1, shaping остального трафика): 0.4% звонков ниже MOS 3.5, средний MOS 4.3. Телефонные операторы перестали жаловаться, руководство довольно. Стоимость работы — 48 000 руб., настройка заняла один рабочий день плюс мониторинг в течение недели.
Мониторинг: как проверять QoS работает
Без мониторинга QoS — это вера. Я всегда ставлю:
- Nagios/Icinga с плагином
check_snmp_qos— показывает статистику очередей. - Grafana + Prometheus с mikrotik-exporter или librenms.
- Периодически — RTP Analyzer в Wireshark на захватах с зеркала порта.
- MOS-мониторинг на уровне Asterisk/FreePBX через CDR.
# Быстрая проверка DSCP в tcpdump
tcpdump -i any -n -v 'udp and port 5060' | grep -i tos
# Должно быть tos 0x68 (=104, что соответствует DSCP 26 AF31)
Частые ошибки
- QoS только на роутере, но коммутаторы сбрасывают метки.
- Неправильные UDP-порты в маркировке (Asterisk по умолчанию 10000–20000, FreePBX — 16384–32767).
- Priority 1 для всего — тогда QoS теряет смысл.
- QoS на downstream-интерфейсе при shaping провайдера — надо на upstream.
- Забытый VPN — туннель съедает метки.
Настрою QoS под вашу телефонию
Анализ сети, настройка приоритизации на роутерах и коммутаторах, мониторинг MOS, исправление разрывов голоса. Объекты от 10 до 500 SIP-линий. Asterisk, FreePBX, 3CX, Mango Office, МТТ, Billing.
Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш
FAQ — QoS для VoIP
- Зачем нужен QoS, если канал 1 Гбит/с?
- QoS нужен не на внутреннем канале, а на узком месте — обычно WAN. При закачке архива на 200 Мбит/с в полноскоростной канал пакеты VoIP начинают тормозить.
- Что такое DSCP и зачем он?
- DSCP — метка приоритета в IP-заголовке. Стандарт для VoIP — DSCP EF (46). Сигналинг SIP — DSCP AF31 (26).
- Достаточно ли только WAN-QoS?
- В идеале — нет, QoS должен быть сквозным. Но на практике 80% проблем решается настройкой только на WAN-интерфейсе.
- Сколько полосы резервировать под голос?
- По 100 кбит/с на разговор для G.711 и 30 кбит/с для G.729. Плюс 15% на накладные расходы.
- QoS работает через VPN?
- Да, если настроить pre-classify. DSCP-метки по умолчанию копируются во внешний IP-заголовок туннеля.