VoIP и SIP QoS на MikroTik
VoIP и SIP QoS на MikroTik — приоритизация голосового трафика
Качество голосовой связи через IP-сеть (VoIP) критически зависит от параметров сети: задержка, джиттер, потери пакетов. Если в офисе кто-то запустил скачивание большого файла — VoIP-звонки начнут «квакать», голос будет прерываться, а собеседник услышит эхо. QoS (Quality of Service) на MikroTik решает эту проблему: голосовой трафик получает абсолютный приоритет, и даже при полной загрузке канала SIP-телефоны работают стабильно. В этом руководстве настроим полный QoS для VoIP на RouterOS 7.20+: от маркировки пакетов в Mangle до Queue Tree с приоритизацией, разберём работу с SIP ALG, NAT traversal и мониторинг голосового трафика.
Руководство актуально для RouterOS 7.20+.
Описание
Почему VoIP требует QoS
VoIP-телефония передаёт голос в виде UDP-пакетов в реальном времени. В отличие от HTTP или файлового обмена, голосовой трафик не переносит задержки и потери — TCP-ретрансмит здесь невозможен, пакет либо пришёл вовремя, либо потерян.
Критические параметры для VoIP:
| Параметр | Допустимо | Приемлемо | Неприемлемо |
|---|---|---|---|
| Задержка (latency) | < 100 мс | 100–150 мс | > 150 мс |
| Джиттер (jitter) | < 20 мс | 20–30 мс | > 30 мс |
| Потеря пакетов (loss) | < 0.5% | 0.5–1% | > 1% |
Задержка (latency) — время прохождения пакета от отправителя к получателю. При задержке выше 150 мс собеседники начинают перебивать друг друга, разговор становится некомфортным. При 300 мс+ связь практически непригодна.
Джиттер (jitter) — разброс задержки между пакетами. Даже если средняя задержка 50 мс, но один пакет приходит за 20 мс, а следующий за 100 мс — голос будет «рваным». Jitter buffer на телефонах компенсирует небольшой джиттер (20–30 мс), но при большем значении появляются артефакты.
Потеря пакетов (packet loss) — процент потерянных UDP-пакетов. При потере более 1% голос становится неразборчивым, появляются «дыры» в разговоре.
Как идентифицировать VoIP-трафик
Существует три подхода к определению голосового трафика:
По портам:
- SIP-сигнализация: UDP 5060 (без шифрования), UDP/TCP 5061 (TLS)
- RTP-поток (голос): UDP 10000–20000 (диапазон зависит от АТС)
- Некоторые провайдеры используют нестандартные порты
По DSCP-меткам:
- EF (Expedited Forwarding) = DSCP 46 — стандартная метка для голоса
- CS5 (Class Selector 5) = DSCP 40 — метка SIP-сигнализации
- AF41 = DSCP 34 — видеозвонки
По IP-адресам:
- IP-адреса SIP-сервера или IP-АТС
- IP-подсеть VoIP-телефонов (если выделена в отдельный VLAN)
Оптимальный подход — комбинация: маркировать по портам + DSCP + IP-подсети VoIP-оборудования.
Протоколы VoIP
| Протокол | Порт | Транспорт | Назначение |
|---|---|---|---|
| SIP | 5060 | UDP/TCP | Сигнализация (установка/завершение вызова) |
| SIP TLS | 5061 | TCP/TLS | Зашифрованная сигнализация |
| RTP | 10000–20000 | UDP | Передача голоса (медиа-поток) |
| SRTP | 10000–20000 | UDP | Зашифрованный голосовой поток |
| STUN | 3478 | UDP | NAT traversal |
SIP отвечает за установку и завершение звонка (сигнализация), а RTP передаёт собственно голос. Оба протокола нуждаются в приоритизации, но RTP — критичнее, так как это непрерывный поток данных.
Архитектура QoS для VoIP
codeИнтернет | [MikroTik Router] |--- Mangle: маркировка VoIP-пакетов |--- Queue Tree: приоритет VoIP > остальной трафик | |--- VLAN 100: VoIP-телефоны (192.168.100.0/24) |--- VLAN 10: Рабочие станции (192.168.10.0/24)
Настройка
Шаг 1: Подготовка — выделение VoIP в отдельный VLAN
Лучшая практика — вынести VoIP-телефоны в отдельный VLAN. Это упрощает маркировку и повышает безопасность:
[admin@MikroTik] ># Создаём VLAN для VoIP-телефонов /interface/vlan/add name=vlan100-voip vlan-id=100 interface=bridge comment="VoIP VLAN" # IP-адрес для VoIP-подсети /ip/address/add address=192.168.100.1/24 interface=vlan100-voip comment="VoIP gateway" # DHCP-сервер для VoIP-телефонов /ip/pool/add name=pool-voip ranges=192.168.100.10-192.168.100.254 /ip/dhcp-server/add name=dhcp-voip interface=vlan100-voip address-pool=pool-voip lease-time=8h /ip/dhcp-server/network/add address=192.168.100.0/24 gateway=192.168.100.1 \ dns-server=192.168.100.1 comment="VoIP network"
Если нет возможности выделить VLAN — маркировка будет по портам и DSCP.
Шаг 2: Маркировка VoIP-трафика в Mangle
Mangle — ключевой элемент QoS. Здесь мы помечаем VoIP-пакеты специальными метками, которые затем использует Queue Tree.
[admin@MikroTik] ># --- Маркировка соединений SIP-сигнализации --- /ip/firewall/mangle/add chain=forward protocol=udp dst-port=5060-5061 \ action=mark-connection new-connection-mark=conn-voip-sip passthrough=yes \ comment="VoIP: SIP signaling connections" /ip/firewall/mangle/add chain=forward protocol=tcp dst-port=5060-5061 \ action=mark-connection new-connection-mark=conn-voip-sip passthrough=yes \ comment="VoIP: SIP signaling connections TCP" # --- Маркировка соединений RTP (голосовой поток) --- /ip/firewall/mangle/add chain=forward protocol=udp dst-port=10000-20000 \ src-address=192.168.100.0/24 \ action=mark-connection new-connection-mark=conn-voip-rtp passthrough=yes \ comment="VoIP: RTP media connections" /ip/firewall/mangle/add chain=forward protocol=udp src-port=10000-20000 \ dst-address=192.168.100.0/24 \ action=mark-connection new-connection-mark=conn-voip-rtp passthrough=yes \ comment="VoIP: RTP media connections (reply)" # --- Маркировка по DSCP EF (если АТС/провайдер ставит метки) --- /ip/firewall/mangle/add chain=forward dscp=46 \ action=mark-connection new-connection-mark=conn-voip-dscp passthrough=yes \ comment="VoIP: DSCP EF (46) connections" # --- Маркировка пакетов VoIP (для Queue Tree) --- /ip/firewall/mangle/add chain=forward connection-mark=conn-voip-sip \ action=mark-packet new-packet-mark=pkt-voip passthrough=no \ comment="VoIP: mark SIP packets" /ip/firewall/mangle/add chain=forward connection-mark=conn-voip-rtp \ action=mark-packet new-packet-mark=pkt-voip passthrough=no \ comment="VoIP: mark RTP packets" /ip/firewall/mangle/add chain=forward connection-mark=conn-voip-dscp \ action=mark-packet new-packet-mark=pkt-voip passthrough=no \ comment="VoIP: mark DSCP EF packets" # --- Маркировка всего остального трафика --- /ip/firewall/mangle/add chain=forward action=mark-packet \ new-packet-mark=pkt-other passthrough=no \ comment="Other: all non-VoIP traffic"
Порядок правил критичен: VoIP-маркировка должна быть выше, чем маркировка остального трафика. Параметр passthrough=no в правилах маркировки пакетов останавливает дальнейшую обработку.
Шаг 3: Queue Tree — приоритизация VoIP
Queue Tree позволяет создать иерархию очередей с приоритетами. VoIP получает priority=1 (высший), остальной трафик — priority=8.
[admin@MikroTik] ># --- Очереди для исходящего трафика (upload) --- # Родительская очередь на WAN-интерфейс (указать реальную скорость канала) /queue/tree/add name=upload-total parent=ether1 max-limit=95M \ comment="Upload: total bandwidth" # VoIP — приоритет 1 (гарантировано 2 Мбит/с, максимум 5 Мбит/с) /queue/tree/add name=upload-voip parent=upload-total \ packet-mark=pkt-voip priority=1 \ limit-at=2M max-limit=5M \ comment="Upload: VoIP priority 1" # Остальной трафик — приоритет 8 /queue/tree/add name=upload-other parent=upload-total \ packet-mark=pkt-other priority=8 \ limit-at=10M max-limit=90M \ comment="Upload: other traffic" # --- Очереди для входящего трафика (download) --- # Родительская очередь на LAN bridge /queue/tree/add name=download-total parent=bridge max-limit=95M \ comment="Download: total bandwidth" # VoIP — приоритет 1 /queue/tree/add name=download-voip parent=download-total \ packet-mark=pkt-voip priority=1 \ limit-at=2M max-limit=5M \ comment="Download: VoIP priority 1" # Остальной трафик — приоритет 8 /queue/tree/add name=download-other parent=download-total \ packet-mark=pkt-other priority=8 \ limit-at=10M max-limit=90M \ comment="Download: other traffic"
Важные замечания:
max-limitродительской очереди должен быть чуть меньше реальной скорости канала (95% от тарифа). Это обеспечивает контроль очереди на MikroTik, а не у провайдера.limit-at— гарантированная полоса. Даже при полной загрузке канала VoIP получит свои 2 Мбит/с.priority=1— наивысший приоритет (значение 1–8, где 1 — самый высокий).
Шаг 4: Установка DSCP-меток
Если нужно передавать приоритет дальше по сети (например, в сторону провайдера, поддерживающего DiffServ), устанавливаем DSCP EF на VoIP-пакеты:
[admin@MikroTik] ># Установка DSCP EF (46) на исходящий VoIP-трафик /ip/firewall/mangle/add chain=postrouting connection-mark=conn-voip-rtp \ action=change-dscp new-dscp=46 passthrough=yes \ comment="VoIP: set DSCP EF on outgoing RTP" /ip/firewall/mangle/add chain=postrouting connection-mark=conn-voip-sip \ action=change-dscp new-dscp=40 passthrough=yes \ comment="VoIP: set DSCP CS5 on outgoing SIP"
Шаг 5: Отключение SIP ALG
SIP ALG (Application Layer Gateway) — функция RouterOS, которая пытается «помочь» SIP-трафику, проходящему через NAT, модифицируя содержимое SIP-пакетов. На практике SIP ALG ломает VoIP в 90% случаев: изменяет SDP-тело пакетов, подставляет неправильные IP-адреса, нарушает работу RTP.
Отключение SIP ALG обязательно:
[admin@MikroTik] ># Отключаем SIP ALG (service-port) /ip/firewall/service-port/set sip disabled=yes # Проверяем /ip/firewall/service-port/print where name=sip
Симптомы включённого SIP ALG:
- Односторонняя слышимость (один собеседник не слышит другого)
- Звонок устанавливается, но через 30 секунд обрывается
- Входящие звонки не проходят
- Периодические «обрывы» голоса
Шаг 6: NAT для SIP (STUN и Persistent Keepalive)
SIP-телефоны за NAT сталкиваются с классической проблемой: SIP-сервер отправляет RTP-поток на внутренний IP-адрес телефона, который недоступен из интернета. Решения:
Вариант 1: STUN-сервер на телефонах
Настройте на каждом IP-телефоне или софтфоне STUN-сервер (например, stun.l.google.com:19302). Телефон сам определит свой внешний IP и сообщит его SIP-серверу.
[admin@MikroTik] ># Разрешаем STUN-трафик в firewall /ip/firewall/filter/add chain=forward protocol=udp dst-port=3478 \ src-address=192.168.100.0/24 action=accept \ comment="Allow STUN for VoIP phones"
Вариант 2: UDP-таймаут для SIP
По умолчанию UDP-соединения в RouterOS живут 10 секунд. SIP-регистрация может отвалиться. Увеличиваем:
[admin@MikroTik] ># Увеличиваем таймаут UDP-потоков для SIP /ip/firewall/raw/add chain=prerouting protocol=udp dst-port=5060 \ action=notrack comment="SIP: bypass connection tracking"
Альтернативный вариант — настроить keepalive на самих телефонах (SIP Registration Expiry = 60 секунд).
Вариант 3: Статический NAT для IP-АТС
Если IP-АТС (Asterisk, FreePBX) стоит за MikroTik:
[admin@MikroTik] ># Проброс SIP-портов на АТС /ip/firewall/nat/add chain=dstnat protocol=udp dst-port=5060 \ action=dst-nat to-addresses=192.168.100.5 to-ports=5060 \ comment="NAT: SIP to PBX" # Проброс RTP-диапазона /ip/firewall/nat/add chain=dstnat protocol=udp dst-port=10000-20000 \ action=dst-nat to-addresses=192.168.100.5 to-ports=10000-20000 \ comment="NAT: RTP to PBX"
Полный пример: QoS для офиса с VoIP
Сценарий: офис на 30 человек, канал 100 Мбит/с, 10 SIP-телефонов через провайдера «Ростелеком SIP», IP-АТС Asterisk на 192.168.100.5.
[admin@MikroTik] ># ============================================ # VoIP QoS — полная конфигурация # Офис 30 человек, канал 100 Мбит/с # VoIP VLAN 100, Data VLAN 10 # ============================================ # --- 1. Отключаем SIP ALG --- /ip/firewall/service-port/set sip disabled=yes # --- 2. Address lists для удобства --- /ip/firewall/address-list/add list=voip-phones address=192.168.100.0/24 \ comment="VoIP phone subnet" /ip/firewall/address-list/add list=sip-providers address=83.222.0.0/16 \ comment="Rostelecom SIP servers" # --- 3. Mangle: маркировка VoIP --- # SIP-сигнализация /ip/firewall/mangle/add chain=forward protocol=udp dst-port=5060-5061 \ src-address-list=voip-phones \ action=mark-connection new-connection-mark=conn-voip passthrough=yes \ comment="VoIP: SIP outgoing" /ip/firewall/mangle/add chain=forward protocol=udp src-port=5060-5061 \ dst-address-list=voip-phones \ action=mark-connection new-connection-mark=conn-voip passthrough=yes \ comment="VoIP: SIP incoming" # RTP-потоки /ip/firewall/mangle/add chain=forward protocol=udp dst-port=10000-20000 \ src-address-list=voip-phones \ action=mark-connection new-connection-mark=conn-voip passthrough=yes \ comment="VoIP: RTP outgoing" /ip/firewall/mangle/add chain=forward protocol=udp src-port=10000-20000 \ dst-address-list=voip-phones \ action=mark-connection new-connection-mark=conn-voip passthrough=yes \ comment="VoIP: RTP incoming" # DSCP EF /ip/firewall/mangle/add chain=forward dscp=46 \ action=mark-connection new-connection-mark=conn-voip passthrough=yes \ comment="VoIP: DSCP EF" # Маркировка пакетов VoIP /ip/firewall/mangle/add chain=forward connection-mark=conn-voip \ action=mark-packet new-packet-mark=pkt-voip passthrough=no \ comment="VoIP: packet mark" # Маркировка остального трафика /ip/firewall/mangle/add chain=forward action=mark-packet \ new-packet-mark=pkt-other passthrough=no \ comment="Other: all non-VoIP" # DSCP на исходящий VoIP /ip/firewall/mangle/add chain=postrouting connection-mark=conn-voip \ action=change-dscp new-dscp=46 passthrough=yes \ comment="VoIP: set DSCP EF outgoing" # --- 4. Queue Tree --- # Upload (WAN = ether1, тариф 100 Мбит/с, ставим 95M) /queue/tree/add name=ul-total parent=ether1 max-limit=95M /queue/tree/add name=ul-voip parent=ul-total packet-mark=pkt-voip \ priority=1 limit-at=4M max-limit=10M /queue/tree/add name=ul-other parent=ul-total packet-mark=pkt-other \ priority=8 limit-at=20M max-limit=91M # Download (LAN = bridge, тариф 100 Мбит/с) /queue/tree/add name=dl-total parent=bridge max-limit=95M /queue/tree/add name=dl-voip parent=dl-total packet-mark=pkt-voip \ priority=1 limit-at=4M max-limit=10M /queue/tree/add name=dl-other parent=dl-total packet-mark=pkt-other \ priority=8 limit-at=20M max-limit=91M
Проверка
Проверка маркировки в Mangle
Убедитесь, что Mangle-правила срабатывают — столбцы packets и bytes должны расти при активных звонках:
[admin@MikroTik] ># Просмотр счётчиков Mangle /ip/firewall/mangle/print stats # Только VoIP-правила /ip/firewall/mangle/print stats where comment~"VoIP"
Если счётчики нулевые — проверьте, что телефоны действительно генерируют трафик по указанным портам и из указанных подсетей.
Проверка Queue Tree
[admin@MikroTik] ># Статистика очередей /queue/tree/print stats # Подробно по VoIP-очереди /queue/tree/print stats where name~"voip"
В выводе обратите внимание на:
- rate — текущая скорость (должна расти при звонках)
- packet-rate — количество пакетов в секунду
- queued-packets — пакеты в очереди (должно быть 0 или минимум для VoIP)
Мониторинг с помощью Torch
Torch — инструмент анализа трафика в реальном времени. Используйте его для поиска VoIP-потоков:
[admin@MikroTik] ># Показать UDP-трафик из VoIP-подсети /tool/torch interface=bridge src-address=192.168.100.0/24 protocol=udp # Показать трафик на SIP-порты /tool/torch interface=ether1 protocol=udp port=5060 # Показать RTP-трафик (порты 10000-20000) /tool/torch interface=bridge protocol=udp port=10000-20000
Проверка SIP ALG
[admin@MikroTik] ># Убедиться, что SIP ALG отключён /ip/firewall/service-port/print where name=sip # Должно быть: disabled=yes
Проверка Connection Tracking
[admin@MikroTik] ># Просмотр VoIP-соединений /ip/firewall/connection/print where connection-mark=conn-voip # Количество VoIP-соединений /ip/firewall/connection/print count-only where connection-mark=conn-voip
Тест качества: Ping до SIP-сервера
[admin@MikroTik] ># Ping с замером jitter (100 пакетов) /ping address=sip.rostelecom.ru count=100 size=160 # Проверка маршрута /tool/traceroute address=sip.rostelecom.ru protocol=udp
Настройка для популярных российских VoIP-провайдеров
Ростелеком SIP
[admin@MikroTik] ># SIP-серверы Ростелекома (уточните актуальные IP) /ip/firewall/address-list/add list=sip-providers address=83.222.0.0/16 \ comment="Rostelecom SIP"
Параметры подключения:
- SIP-сервер: sip.rt.ru (уточнить у регионального подразделения)
- Порт: 5060 UDP
- Кодек: G.711a (alaw), G.729
- DTMF: RFC 2833
Mango Office
[admin@MikroTik] ># SIP-серверы Mango Office /ip/firewall/address-list/add list=sip-providers address=185.45.152.0/24 \ comment="Mango Office SIP"
Параметры подключения:
- SIP-домен: mangosip.ru
- Порт: 5060 UDP
- Кодек: G.711a, G.729
- Обязательно отключить SIP ALG
Zadarma
[admin@MikroTik] ># SIP-серверы Zadarma /ip/firewall/address-list/add list=sip-providers address=185.45.152.0/22 \ comment="Zadarma SIP"
Параметры подключения:
- SIP-сервер: sip.zadarma.com
- Порт: 5060 UDP
- Кодек: G.711a, G.729, Opus
- Рекомендуется STUN: stun.zadarma.com
Типичные ошибки
Ошибка 1: SIP ALG включён
Симптомы: односторонняя слышимость, обрывы через 30 секунд, входящие звонки не проходят.
Решение:
[admin@MikroTik] >/ip/firewall/service-port/set sip disabled=yes
Это первое, что нужно проверить при любых проблемах с VoIP на MikroTik. SIP ALG «помогает» только в простейших сценариях, а в реальных конфигурациях ломает SIP-трафик.
Ошибка 2: max-limit родительской очереди больше реальной скорости канала
Симптомы: QoS не работает, VoIP всё равно «квакает» при загрузке канала.
Причина: если max-limit установлен выше реальной скорости провайдера — очередь на MikroTik не образуется. Пакеты уходят без задержки на MikroTik, но встают в очередь на стороне провайдера, где приоритизации нет.
Решение: max-limit родительской очереди = 90–95% от тарифа провайдера.
[admin@MikroTik] ># Если тариф 100 Мбит/с, ставим 95M /queue/tree/set upload-total max-limit=95M /queue/tree/set download-total max-limit=95M
Ошибка 3: Маркировка только по портам без привязки к подсети
Симптомы: в VoIP-очередь попадает посторонний UDP-трафик (игры, DNS, видео), VoIP не получает гарантированную полосу.
Причина: диапазон портов 10000–20000 UDP используется не только RTP, но и многими другими приложениями.
Решение: всегда добавляйте привязку к VoIP-подсети или address-list:
[admin@MikroTik] ># Правильно: маркировка по порту + подсеть /ip/firewall/mangle/add chain=forward protocol=udp dst-port=10000-20000 \ src-address-list=voip-phones \ action=mark-connection new-connection-mark=conn-voip passthrough=yes
Ошибка 4: Не учтён трафик в обоих направлениях
Симптомы: исходящий голос слышен, входящий — нет (или наоборот).
Причина: маркировка только src-port или только dst-port. Нужно маркировать и исходящий (dst-port=5060, src-address=VoIP-подсеть), и входящий (src-port=5060, dst-address=VoIP-подсеть).
Ошибка 5: FastTrack обходит Mangle и Queue
Симптомы: Mangle-правила не срабатывают, счётчики нулевые, QoS не работает.
Причина: FastTrack ускоряет обработку пакетов, но полностью обходит Mangle и Queue. Если в firewall включён FastTrack — QoS не будет работать для established/related соединений.
Решение: исключите VoIP из FastTrack или отключите FastTrack полностью:
[admin@MikroTik] ># Вариант 1: отключить FastTrack /ip/firewall/filter/remove [find where action=fasttrack-connection] # Вариант 2: исключить VoIP из FastTrack (пометить VoIP-соединения до FastTrack) # Поместите Mangle-правила маркировки connection-mark ВЫШЕ FastTrack в chain=forward
Ошибка 6: UDP-таймаут слишком маленький
Симптомы: SIP-регистрация отваливается через некоторое время, телефоны перестают принимать входящие звонки.
Причина: по умолчанию UDP timeout в Connection Tracking = 10 секунд. Если SIP-телефон не отправляет keepalive чаще, NAT-трансляция удаляется.
Решение: увеличить UDP-таймаут или настроить keepalive на телефонах (Registration Expiry = 60 секунд):
[admin@MikroTik] ># Увеличиваем UDP-таймаут для SIP /ip/firewall/raw/add chain=prerouting protocol=udp src-port=5060 \ action=notrack comment="SIP: bypass conntrack for signaling"
Ошибка 7: Queue Tree без parent
Симптомы: очереди созданы, но трафик не ограничивается и не приоритизируется.
Причина: Queue Tree работает только в иерархии. Дочерние очереди без родительской (parent) не ограничивают общую полосу, а значит, приоритизация не имеет смысла.
Решение: всегда создавайте родительскую очередь с max-limit = скорость канала, и указывайте её как parent для VoIP- и other-очередей.
Расчёт полосы для VoIP
Каждый VoIP-звонок потребляет фиксированную полосу в зависимости от кодека:
| Кодек | Bitrate | С IP/UDP/RTP-заголовками | На 10 одновременных звонков |
|---|---|---|---|
| G.711 (alaw/ulaw) | 64 Кбит/с | ~87 Кбит/с | ~870 Кбит/с |
| G.729 | 8 Кбит/с | ~31 Кбит/с | ~310 Кбит/с |
| Opus | 6–510 Кбит/с | ~30–530 Кбит/с | ~300–5300 Кбит/с |
Формула: limit-at для VoIP = количество_линий × полоса_на_звонок × 1.5 (запас 50%).
Пример: 10 линий, кодек G.711 → 10 × 87 Кбит/с × 1.5 = 1.3 Мбит/с. Округляем вверх: limit-at=2M.
Итоги
QoS для VoIP на MikroTik строится в три шага: маркировка в Mangle, приоритизация в Queue Tree, отключение SIP ALG. Ключевые правила:
- Всегда отключайте SIP ALG (
/ip/firewall/service-port/set sip disabled=yes) - Выделяйте VoIP-телефоны в отдельный VLAN
- Маркируйте трафик по комбинации: порт + подсеть + DSCP
- max-limit родительской очереди = 90–95% от скорости канала
- VoIP: priority=1, limit-at = расчётная полоса с запасом 50%
- Отключите FastTrack или исключите VoIP из него
- Проверяйте через Torch и счётчики Mangle
Интернет
|
[MikroTik Router]
|--- Mangle: маркировка VoIP-пакетов
|--- Queue Tree: приоритет VoIP > остальной трафик
|
|--- VLAN 100: VoIP-телефоны (192.168.100.0/24)
|--- VLAN 10: Рабочие станции (192.168.10.0/24)
# Создаём VLAN для VoIP-телефонов
/interface/vlan/add name=vlan100-voip vlan-id=100 interface=bridge comment="VoIP VLAN"
# IP-адрес для VoIP-подсети
/ip/address/add address=192.168.100.1/24 interface=vlan100-voip comment="VoIP gateway"
# DHCP-сервер для VoIP-телефонов
/ip/pool/add name=pool-voip ranges=192.168.100.10-192.168.100.254
/ip/dhcp-server/add name=dhcp-voip interface=vlan100-voip address-pool=pool-voip lease-time=8h
/ip/dhcp-server/network/add address=192.168.100.0/24 gateway=192.168.100.1 \
dns-server=192.168.100.1 comment="VoIP network"
# --- Маркировка соединений SIP-сигнализации ---
/ip/firewall/mangle/add chain=forward protocol=udp dst-port=5060-5061 \
action=mark-connection new-connection-mark=conn-voip-sip passthrough=yes \
comment="VoIP: SIP signaling connections"
/ip/firewall/mangle/add chain=forward protocol=tcp dst-port=5060-5061 \
action=mark-connection new-connection-mark=conn-voip-sip passthrough=yes \
comment="VoIP: SIP signaling connections TCP"
# --- Маркировка соединений RTP (голосовой поток) ---
/ip/firewall/mangle/add chain=forward protocol=udp dst-port=10000-20000 \
src-address=192.168.100.0/24 \
action=mark-connection new-connection-mark=conn-voip-rtp passthrough=yes \
comment="VoIP: RTP media connections"
/ip/firewall/mangle/add chain=forward protocol=udp src-port=10000-20000 \
dst-address=192.168.100.0/24 \
action=mark-connection new-connection-mark=conn-voip-rtp passthrough=yes \
comment="VoIP: RTP media connections (reply)"
# --- Маркировка по DSCP EF (если АТС/провайдер ставит метки) ---
/ip/firewall/mangle/add chain=forward dscp=46 \
action=mark-connection new-connection-mark=conn-voip-dscp passthrough=yes \
comment="VoIP: DSCP EF (46) connections"
# --- Маркировка пакетов VoIP (для Queue Tree) ---
/ip/firewall/mangle/add chain=forward connection-mark=conn-voip-sip \
action=mark-packet new-packet-mark=pkt-voip passthrough=no \
comment="VoIP: mark SIP packets"
/ip/firewall/mangle/add chain=forward connection-mark=conn-voip-rtp \
action=mark-packet new-packet-mark=pkt-voip passthrough=no \
comment="VoIP: mark RTP packets"
/ip/firewall/mangle/add chain=forward connection-mark=conn-voip-dscp \
action=mark-packet new-packet-mark=pkt-voip passthrough=no \
comment="VoIP: mark DSCP EF packets"
# --- Маркировка всего остального трафика ---
/ip/firewall/mangle/add chain=forward action=mark-packet \
new-packet-mark=pkt-other passthrough=no \
comment="Other: all non-VoIP traffic"
# --- Очереди для исходящего трафика (upload) ---
# Родительская очередь на WAN-интерфейс (указать реальную скорость канала)
/queue/tree/add name=upload-total parent=ether1 max-limit=95M \
comment="Upload: total bandwidth"
# VoIP — приоритет 1 (гарантировано 2 Мбит/с, максимум 5 Мбит/с)
/queue/tree/add name=upload-voip parent=upload-total \
packet-mark=pkt-voip priority=1 \
limit-at=2M max-limit=5M \
comment="Upload: VoIP priority 1"
# Остальной трафик — приоритет 8
/queue/tree/add name=upload-other parent=upload-total \
packet-mark=pkt-other priority=8 \
limit-at=10M max-limit=90M \
comment="Upload: other traffic"
# --- Очереди для входящего трафика (download) ---
# Родительская очередь на LAN bridge
/queue/tree/add name=download-total parent=bridge max-limit=95M \
comment="Download: total bandwidth"
# VoIP — приоритет 1
/queue/tree/add name=download-voip parent=download-total \
packet-mark=pkt-voip priority=1 \
limit-at=2M max-limit=5M \
comment="Download: VoIP priority 1"
# Остальной трафик — приоритет 8
/queue/tree/add name=download-other parent=download-total \
packet-mark=pkt-other priority=8 \
limit-at=10M max-limit=90M \
comment="Download: other traffic"
# Установка DSCP EF (46) на исходящий VoIP-трафик
/ip/firewall/mangle/add chain=postrouting connection-mark=conn-voip-rtp \
action=change-dscp new-dscp=46 passthrough=yes \
comment="VoIP: set DSCP EF on outgoing RTP"
/ip/firewall/mangle/add chain=postrouting connection-mark=conn-voip-sip \
action=change-dscp new-dscp=40 passthrough=yes \
comment="VoIP: set DSCP CS5 on outgoing SIP"
# Отключаем SIP ALG (service-port)
/ip/firewall/service-port/set sip disabled=yes
# Проверяем
/ip/firewall/service-port/print where name=sip
# Разрешаем STUN-трафик в firewall
/ip/firewall/filter/add chain=forward protocol=udp dst-port=3478 \
src-address=192.168.100.0/24 action=accept \
comment="Allow STUN for VoIP phones"
# Увеличиваем таймаут UDP-потоков для SIP
/ip/firewall/raw/add chain=prerouting protocol=udp dst-port=5060 \
action=notrack comment="SIP: bypass connection tracking"
# Проброс SIP-портов на АТС
/ip/firewall/nat/add chain=dstnat protocol=udp dst-port=5060 \
action=dst-nat to-addresses=192.168.100.5 to-ports=5060 \
comment="NAT: SIP to PBX"
# Проброс RTP-диапазона
/ip/firewall/nat/add chain=dstnat protocol=udp dst-port=10000-20000 \
action=dst-nat to-addresses=192.168.100.5 to-ports=10000-20000 \
comment="NAT: RTP to PBX"
# ============================================
# VoIP QoS — полная конфигурация
# Офис 30 человек, канал 100 Мбит/с
# VoIP VLAN 100, Data VLAN 10
# ============================================
# --- 1. Отключаем SIP ALG ---
/ip/firewall/service-port/set sip disabled=yes
# --- 2. Address lists для удобства ---
/ip/firewall/address-list/add list=voip-phones address=192.168.100.0/24 \
comment="VoIP phone subnet"
/ip/firewall/address-list/add list=sip-providers address=83.222.0.0/16 \
comment="Rostelecom SIP servers"
# --- 3. Mangle: маркировка VoIP ---
# SIP-сигнализация
/ip/firewall/mangle/add chain=forward protocol=udp dst-port=5060-5061 \
src-address-list=voip-phones \
action=mark-connection new-connection-mark=conn-voip passthrough=yes \
comment="VoIP: SIP outgoing"
/ip/firewall/mangle/add chain=forward protocol=udp src-port=5060-5061 \
dst-address-list=voip-phones \
action=mark-connection new-connection-mark=conn-voip passthrough=yes \
comment="VoIP: SIP incoming"
# RTP-потоки
/ip/firewall/mangle/add chain=forward protocol=udp dst-port=10000-20000 \
src-address-list=voip-phones \
action=mark-connection new-connection-mark=conn-voip passthrough=yes \
comment="VoIP: RTP outgoing"
/ip/firewall/mangle/add chain=forward protocol=udp src-port=10000-20000 \
dst-address-list=voip-phones \
action=mark-connection new-connection-mark=conn-voip passthrough=yes \
comment="VoIP: RTP incoming"
# DSCP EF
/ip/firewall/mangle/add chain=forward dscp=46 \
action=mark-connection new-connection-mark=conn-voip passthrough=yes \
comment="VoIP: DSCP EF"
# Маркировка пакетов VoIP
/ip/firewall/mangle/add chain=forward connection-mark=conn-voip \
action=mark-packet new-packet-mark=pkt-voip passthrough=no \
comment="VoIP: packet mark"
# Маркировка остального трафика
/ip/firewall/mangle/add chain=forward action=mark-packet \
new-packet-mark=pkt-other passthrough=no \
comment="Other: all non-VoIP"
# DSCP на исходящий VoIP
/ip/firewall/mangle/add chain=postrouting connection-mark=conn-voip \
action=change-dscp new-dscp=46 passthrough=yes \
comment="VoIP: set DSCP EF outgoing"
# --- 4. Queue Tree ---
# Upload (WAN = ether1, тариф 100 Мбит/с, ставим 95M)
/queue/tree/add name=ul-total parent=ether1 max-limit=95M
/queue/tree/add name=ul-voip parent=ul-total packet-mark=pkt-voip \
priority=1 limit-at=4M max-limit=10M
/queue/tree/add name=ul-other parent=ul-total packet-mark=pkt-other \
priority=8 limit-at=20M max-limit=91M
# Download (LAN = bridge, тариф 100 Мбит/с)
/queue/tree/add name=dl-total parent=bridge max-limit=95M
/queue/tree/add name=dl-voip parent=dl-total packet-mark=pkt-voip \
priority=1 limit-at=4M max-limit=10M
/queue/tree/add name=dl-other parent=dl-total packet-mark=pkt-other \
priority=8 limit-at=20M max-limit=91M
# Просмотр счётчиков Mangle
/ip/firewall/mangle/print stats
# Только VoIP-правила
/ip/firewall/mangle/print stats where comment~"VoIP"
# Статистика очередей
/queue/tree/print stats
# Подробно по VoIP-очереди
/queue/tree/print stats where name~"voip"
# Показать UDP-трафик из VoIP-подсети
/tool/torch interface=bridge src-address=192.168.100.0/24 protocol=udp
# Показать трафик на SIP-порты
/tool/torch interface=ether1 protocol=udp port=5060
# Показать RTP-трафик (порты 10000-20000)
/tool/torch interface=bridge protocol=udp port=10000-20000
# Убедиться, что SIP ALG отключён
/ip/firewall/service-port/print where name=sip
# Должно быть: disabled=yes
# Просмотр VoIP-соединений
/ip/firewall/connection/print where connection-mark=conn-voip
# Количество VoIP-соединений
/ip/firewall/connection/print count-only where connection-mark=conn-voip
# Ping с замером jitter (100 пакетов)
/ping address=sip.rostelecom.ru count=100 size=160
# Проверка маршрута
/tool/traceroute address=sip.rostelecom.ru protocol=udp
# SIP-серверы Ростелекома (уточните актуальные IP)
/ip/firewall/address-list/add list=sip-providers address=83.222.0.0/16 \
comment="Rostelecom SIP"
# SIP-серверы Mango Office
/ip/firewall/address-list/add list=sip-providers address=185.45.152.0/24 \
comment="Mango Office SIP"
# SIP-серверы Zadarma
/ip/firewall/address-list/add list=sip-providers address=185.45.152.0/22 \
comment="Zadarma SIP"
/ip/firewall/service-port/set sip disabled=yes
# Если тариф 100 Мбит/с, ставим 95M
/queue/tree/set upload-total max-limit=95M
/queue/tree/set download-total max-limit=95M
# Правильно: маркировка по порту + подсеть
/ip/firewall/mangle/add chain=forward protocol=udp dst-port=10000-20000 \
src-address-list=voip-phones \
action=mark-connection new-connection-mark=conn-voip passthrough=yes
# Вариант 1: отключить FastTrack
/ip/firewall/filter/remove [find where action=fasttrack-connection]
# Вариант 2: исключить VoIP из FastTrack (пометить VoIP-соединения до FastTrack)
# Поместите Mangle-правила маркировки connection-mark ВЫШЕ FastTrack в chain=forward
# Увеличиваем UDP-таймаут для SIP
/ip/firewall/raw/add chain=prerouting protocol=udp src-port=5060 \
action=notrack comment="SIP: bypass conntrack for signaling"