Звонок соединился, абонент говорит — а вы его не слышите. Или слышите только вы, а вас нет. Или через 30 секунд разговор обрывается без видимых причин. Или SIP-телефон регистрируется, потом пропадает, потом снова появляется — как настроение в понедельник утром. Если вы администрируете сеть с MikroTik и IP-телефонией — вы почти наверняка с этим сталкивались.
Хорошая новость: в 90% случаев виновник один — SIP ALG (он же SIP Helper) в RouterOS. Эта «полезная» функция анализирует SIP-пакеты и вмешивается в их содержимое, пытаясь помочь с NAT. В теории — отличная идея. На практике — источник боли для любого, кто настраивает SIP телефонию за MikroTik.
В этой статье разберём: что такое SIP ALG, почему он ломает VoIP, как его отключить, как правильно настроить MikroTik для SIP телефонии — включая NAT, RTP-порты и проброс к Asterisk. Плюс шпаргалка команд в конце. Поехали.
Что такое SIP ALG и почему он ломает VoIP
SIP ALG (Application Layer Gateway) — механизм в RouterOS, который работает на уровне приложений и умеет «понимать» SIP-протокол. Когда через MikroTik проходит SIP-пакет, ALG его перехватывает, анализирует содержимое и пытается исправить IP-адреса внутри SIP-заголовков и SDP-тела.
Задумывался он для решения классической проблемы VoIP за NAT: SIP-телефон внутри сети отправляет в SIP-пакете свой локальный IP (192.168.x.x), который снаружи бесполезен. ALG должен подменить этот адрес на внешний IP роутера, чтобы АТС знала куда слать RTP-поток (аудио).
Звучит разумно. Но вот где это ломается:
- Облачные АТС — большинство современных SIP-серверов (Asterisk, FreePBX, 3CX, Sipuni, Mango) прекрасно справляются с NAT самостоятельно через STUN, ICE или просто фиксированный external IP. Когда ALG лезет со своими «исправлениями» поверх — получается каша из адресов.
- Зашифрованный SIP (TLS/SRTP) — ALG не может расшифровать содержимое, поэтому либо ломает пакет, либо пропускает как есть — непредсказуемо.
- Нестандартные порты — ALG ориентируется на стандартный порт 5060. Если ваша АТС работает на 5080 или 5061 — ALG вообще не поймёт что это SIP и не вмешается. Непоследовательное поведение.
- VPN + SIP — если SIP идёт через VPN-туннель, ALG видит зашифрованные данные и либо игнорирует их, либо делает что-то неожиданное с незашифрованными пакетами рядом.
- Несколько SIP-провайдеров или транков — ALG не умеет разбираться в сложных схемах с несколькими потоками SIP одновременно.
Итог: SIP ALG — реликт эпохи, когда SIP-устройства не умели работать с NAT самостоятельно. Сегодня он приносит больше вреда, чем пользы. Первое действие при проблемах с VoIP за MikroTik — отключить SIP ALG.
Типичные симптомы проблем SIP за MikroTik
Прежде чем лезть в настройки — убедитесь что симптомы совпадают. Вот классический набор признаков того, что виноват SIP ALG или неправильная конфигурация NAT/firewall:
- Телефон регистрируется, но нет звука совсем — RTP-поток не доходит. Либо ALG сломал адрес в SDP, либо заблокированы RTP-порты.
- Односторонний звук — одна сторона слышит, другая нет. Классика NAT-проблем: исходящий RTP идёт, входящий — нет. Часто результат некорректной работы ALG.
- Звонок обрывается ровно через 30–60 секунд — UDP-таймаут NAT. MikroTik закрывает UDP-соединение раньше, чем SIP успевает послать re-INVITE или keep-alive.
- SIP регистрация периодически пропадает — тот же таймаут, но для сигнального канала. Телефон думает что зарегистрирован, сервер — что нет.
- Входящие звонки не проходят — АТС не знает актуальный адрес телефона после смены NAT-привязки.
Если хотя бы два пункта совпали — читаем дальше.
Проверка: включён ли SIP ALG в MikroTik
Смотрим текущее состояние service-ports:
/ip firewall service-port print
Пример вывода когда SIP ALG включён (проблема есть):
Flags: X - disabled # NAME PORTS 0 ftp 21 1 tftp 69 2 irc 6667 3 h323 1720 4 sip 5060,5061 5 pptp 1723
Строка sip без флага X — ALG активен. Пример вывода когда SIP ALG отключён (правильное состояние):
Flags: X - disabled # NAME PORTS 0 ftp 21 ... X 4 sip 5060,5061
Флаг X перед sip — отключён, всё правильно.
Как отключить SIP ALG на MikroTik
Одна команда — и большинство VoIP-проблем уходит:
/ip firewall service-port disable sip
Проверяем результат:
/ip firewall service-port print # Строка sip должна иметь флаг X
Через WinBox: IP → Firewall → Service Ports → находим sip → снимаем галочку Enabled → Apply.
Важно: изменение вступает в силу немедленно, без перезагрузки. Активные SIP-сессии при этом могут кратковременно прерваться — телефоны перерегистрируются. Лучше делать в нерабочее время или предупредить пользователей.
Настройка MikroTik для SIP телефонии: полная конфигурация
Отключение SIP ALG — необходимое, но не всегда достаточное условие. Разберём полную правильную конфигурацию MikroTik для работы с SIP и VoIP.
Шаг 1: Отключаем SIP ALG (уже сделали)
/ip firewall service-port disable sip
Шаг 2: Настраиваем NAT для SIP-трафика
Базовый masquerade — стандартный NAT для выхода в интернет. Если он уже настроен — дополнительно ничего не нужно:
/ip firewall nat add \ chain=srcnat \ out-interface=ether1 \ action=masquerade \ comment="NAT masquerade"
Если SIP-телефоны или Asterisk находятся внутри сети и должны быть доступны снаружи (входящие звонки) — добавляем DNAT для проброса SIP-порта:
# Проброс <a title="Linux SIP прокси сервер: полное руководство по Kamailio, OpenSIPS и Asterisk" href="https://it-apteka.com/linux-sip-proksi-server-polnoe-rukovodstvo-po-kamailio-opensips-i-asterisk/" target="_blank" rel="noopener" data-wpil-monitor-id="750">SIP порта 5060 на внутренний Asterisk</a> /ip firewall nat add \ chain=dstnat \ protocol=udp \ dst-port=5060 \ action=dst-nat \ to-addresses=192.168.1.100 \ to-ports=5060 \ comment="DNAT SIP to Asterisk" # Проброс SIP TLS порта 5061 (если используется) /ip firewall nat add \ chain=dstnat \ protocol=tcp \ dst-port=5061 \ action=dst-nat \ to-addresses=192.168.1.100 \ to-ports=5061 \ comment="DNAT SIP TLS to Asterisk"
Шаг 3: Открываем RTP-порты
RTP — это сам аудиопоток. SIP только сигнализация (кто звонит, куда, какой кодек), а звук идёт по RTP. Стандартный диапазон RTP-портов — UDP 10000-20000, но у разных АТС он может отличаться. Уточняйте у своего провайдера или в настройках Asterisk.
# Разрешаем входящий RTP трафик /ip firewall filter add \ chain=forward \ protocol=udp \ dst-port=10000-20000 \ action=accept \ comment="RTP VoIP audio" \ place-before=0 # Если Asterisk внутри сети — разрешаем входящий RTP к нему /ip firewall filter add \ chain=forward \ protocol=udp \ dst-address=192.168.1.100 \ dst-port=10000-20000 \ action=accept \ comment="RTP to Asterisk"
Не забудьте про DNAT для RTP если Asterisk за NAT:
# Проброс RTP портов на Asterisk (если нужен входящий RTP) /ip firewall nat add \ chain=dstnat \ protocol=udp \ dst-port=10000-20000 \ action=dst-nat \ to-addresses=192.168.1.100 \ comment="DNAT RTP to Asterisk"
Шаг 4: Фиксируем UDP timeout для SIP
По умолчанию MikroTik закрывает UDP-соединения через 10 секунд неактивности. SIP использует UDP и между сигнальными пакетами бывают паузы дольше 10 секунд. Результат — NAT-запись протухает, регистрация отваливается.
# Смотрим текущие таймауты /ip firewall connection tracking print # Увеличиваем UDP timeout /ip firewall connection tracking set udp-timeout=60s /ip firewall connection tracking set udp-stream-timeout=120s
Значение 60 секунд — разумный компромисс. Большинство SIP-клиентов отправляют keep-alive каждые 30–60 секунд. Можно поставить и 120s если проблема с регистрацией не ушла.
Шаг 5: FastTrack и SIP — будьте осторожны
FastTrack ускоряет маршрутизацию (подробнее — в нашей статье про MikroTik FastTrack), но с VoIP-трафиком иногда конфликтует. Проблема в том, что FastTrack-пакеты минуют часть обработки — и если у вас есть правила для SIP/RTP в Mangle или специфические queue-правила, FastTrack может их обойти.
Если после включения FastTrack появились VoIP-проблемы — исключите SIP и RTP из FastTrack:
# Исключаем SIP из FastTrack (добавляем ПЕРЕД FastTrack-правилом) /ip firewall filter add \ chain=forward \ protocol=udp \ dst-port=5060-5061 \ action=accept \ comment="SIP bypass FastTrack" \ place-before=0 # Исключаем RTP из FastTrack /ip firewall filter add \ chain=forward \ protocol=udp \ dst-port=10000-20000 \ action=accept \ comment="RTP bypass FastTrack" \ place-before=1
Проброс SIP к Asterisk через MikroTik
Отдельная и очень распространённая схема: Asterisk внутри сети, внешние SIP-транки, MikroTik как шлюз. Это типичная конфигурация корпоративной IP-АТС.
Схема подключения
Интернет
|
ether1 (WAN, внешний IP: X.X.X.X)
|
MikroTik
|
ether2 (LAN, 192.168.1.1/24)
|
Asterisk (192.168.1.100)
|
IP-телефоны (192.168.1.x)
Настройка Asterisk: что важно на стороне АТС
На стороне Asterisk в sip.conf или pjsip.conf нужно указать внешний IP роутера и локальную подсеть:
; sip.conf (для chan_sip) [general] externip=X.X.X.X ; внешний IP MikroTik localnet=192.168.1.0/24 ; локальная подсеть nat=force_rport,comedia ; режим NAT для SIP
; pjsip.conf (для chan_pjsip) [transport-udp] type=transport protocol=udp bind=0.0.0.0:5060 external_media_address=X.X.X.X external_signaling_address=X.X.X.X local_net=192.168.1.0/24
Полная конфигурация MikroTik для проброса к Asterisk
# 1. Отключаем SIP ALG /ip firewall service-port disable sip # 2. NAT masquerade (если не настроен) /ip firewall nat add \ chain=srcnat \ out-interface=ether1 \ action=masquerade \ comment="NAT masquerade" # 3. DNAT для SIP сигнализации /ip firewall nat add \ chain=dstnat \ in-interface=ether1 \ protocol=udp \ dst-port=5060 \ action=dst-nat \ to-addresses=192.168.1.100 \ to-ports=5060 \ comment="DNAT SIP UDP to Asterisk" /ip firewall nat add \ chain=dstnat \ in-interface=ether1 \ protocol=tcp \ dst-port=5060 \ action=dst-nat \ to-addresses=192.168.1.100 \ to-ports=5060 \ comment="DNAT SIP TCP to Asterisk" # 4. DNAT для RTP аудиопотока /ip firewall nat add \ chain=dstnat \ in-interface=ether1 \ protocol=udp \ dst-port=10000-20000 \ action=dst-nat \ to-addresses=192.168.1.100 \ comment="DNAT RTP to Asterisk" # 5. Разрешающие правила в filter /ip firewall filter add \ chain=input \ protocol=udp \ dst-port=5060 \ action=accept \ comment="Allow SIP input" /ip firewall filter add \ chain=forward \ protocol=udp \ dst-address=192.168.1.100 \ dst-port=5060 \ action=accept \ comment="Allow SIP to Asterisk" /ip firewall filter add \ chain=forward \ protocol=udp \ dst-address=192.168.1.100 \ dst-port=10000-20000 \ action=accept \ comment="Allow RTP to Asterisk" # 6. Таймауты /ip firewall connection tracking set udp-timeout=60s /ip firewall connection tracking set udp-stream-timeout=120s
Типичные проблемы SIP за MikroTik и их решение
Нет звука совсем (ни в одну сторону)
Причина: RTP-порты заблокированы или SIP ALG испортил адрес в SDP.
# Шаг 1: Убеждаемся что SIP ALG отключён /ip firewall service-port print # sip должен иметь флаг X # Шаг 2: Проверяем что RTP-порты открыты /ip firewall filter print where dst-port~"10000" # Шаг 3: Смотрим дропы в firewall /ip firewall filter print stats where action=drop # Если счётчик растёт — что-то блокируется # Шаг 4: Перехватываем пакеты для анализа /tool sniffer quick port=5060 ip-address=192.168.1.100
Односторонний звук
Причина: Одно направление RTP доходит, другое — нет. Чаще всего — NAT-проблема: внешняя сторона не знает куда слать RTP обратно.
Решение: Проверить настройки externip и localnet в Asterisk. Убедиться что masquerade настроен корректно. Проверить что ALG отключён.
# Проверяем NAT правила /ip firewall nat print # Проверяем что masquerade работает /ip firewall nat print stats where action=masquerade # Счётчик должен расти
Звонок обрывается через 30 секунд
Причина: UDP timeout в connection tracking. MikroTik закрывает UDP-сессию раньше чем SIP успевает отправить keep-alive или re-INVITE.
/ip firewall connection tracking set udp-timeout=60s /ip firewall connection tracking set udp-stream-timeout=120s # Проверяем активные SIP-соединения /ip firewall connection print where dst-port=5060
SIP регистрация периодически пропадает
Причина 1: UDP timeout (см. выше).
Причина 2: SIP ALG переписывает Contact-заголовок и после ротации NAT-привязки сервер не может дозвониться до телефона.
# Отключаем ALG если ещё не сделали /ip firewall service-port disable sip # Увеличиваем таймауты /ip firewall connection tracking set udp-timeout=60s # Смотрим connection tracking для SIP /ip firewall connection print where dst-port=5060 or src-port=5060
Входящие звонки не проходят
Причина: Нет DNAT-правила для проброса SIP-порта 5060 или Asterisk не знает внешний IP MikroTik.
# Проверяем DNAT /ip firewall nat print where chain=dstnat # Убеждаемся что правило для порта 5060 есть # Если нет — добавляем /ip firewall nat add \ chain=dstnat \ in-interface=ether1 \ protocol=udp \ dst-port=5060 \ action=dst-nat \ to-addresses=192.168.1.100 \ to-ports=5060
Диагностика SIP на MikroTik: инструменты
Packet Sniffer — смотрим SIP-трафик
# Быстрый захват SIP-пакетов (порт 5060) /tool sniffer quick port=5060 # Захват с фильтром по IP (трафик от/к Asterisk) /tool sniffer quick port=5060 ip-address=192.168.1.100 # Захват RTP трафика /tool sniffer quick port=10000-20000 ip-address=192.168.1.100 # Остановить sniffer /tool sniffer stop
Torch — смотрим трафик в реальном времени
# Смотрим трафик на WAN-интерфейсе по UDP /tool torch interface=ether1 ip-protocol=udp
Просмотр активных SIP-соединений
# Все соединения на порту 5060 /ip firewall connection print where dst-port=5060 or src-port=5060 # Все UDP соединения (включая RTP) /ip firewall connection print where protocol=udp # Количество активных соединений /ip firewall connection print count-only
Проверка firewall-статистики
# Смотрим что дропается /ip firewall filter print stats where action=drop # Смотрим все правила со счётчиками /ip firewall filter print stats
Шпаргалка команд MikroTik для SIP телефонии
# ===== ДИАГНОСТИКА ===== # Проверить статус SIP ALG /ip firewall service-port print # Проверить NAT правила /ip firewall nat print # Проверить firewall filter правила со счётчиками /ip firewall filter print stats # Проверить connection tracking таймауты /ip firewall connection tracking print # Посмотреть активные SIP соединения /ip firewall connection print where dst-port=5060 or src-port=5060 # Захват SIP-пакетов /tool sniffer quick port=5060 # ===== ИСПРАВЛЕНИЕ ===== # Отключить SIP ALG /ip firewall service-port disable sip # Увеличить UDP таймауты /ip firewall connection tracking set udp-timeout=60s /ip firewall connection tracking set udp-stream-timeout=120s # Открыть RTP порты /ip firewall filter add chain=forward protocol=udp dst-port=10000-20000 action=accept comment="RTP VoIP" # DNAT SIP на Asterisk /ip firewall nat add chain=dstnat in-interface=ether1 protocol=udp dst-port=5060 action=dst-nat to-addresses=192.168.1.100 to-ports=5060 # DNAT RTP на Asterisk /ip firewall nat add chain=dstnat in-interface=ether1 protocol=udp dst-port=10000-20000 action=dst-nat to-addresses=192.168.1.100 # ===== ПРОВЕРКА ПОСЛЕ НАСТРОЙКИ ===== # SIP ALG должен быть отключён /ip firewall service-port print # ищем X sip # NAT масквэрейд работает /ip firewall nat print stats where action=masquerade # RTP порты открыты /ip firewall filter print where dst-port~"10000"
Итог: три действия которые решают 90% проблем SIP за MikroTik
Если SIP-телефония за MikroTik работает плохо — действуем по порядку:
- Отключаем SIP ALG —
/ip firewall service-port disable sip. Это первое и главное действие. В большинстве случаев уже это решает проблему. - Открываем RTP-порты и настраиваем DNAT — если Asterisk или IP-телефоны за NAT и нужен входящий трафик. Без этого звук будет только исходящий.
- Увеличиваем UDP timeout —
/ip firewall connection tracking set udp-timeout=60s. Решает проблему обрывов через 30 секунд и пропадания регистрации.
Всё остальное — тюнинг и частные случаи. Но эти три шага закрывают подавляющее большинство обращений «почему не работает SIP через MikroTik».
Остались проблемы после всех настроек? Опишите в комментарии схему подключения, версию RouterOS и симптомы — разберём.
Оставайтесь на связи
Рецепты от IT-боли. Без воды, без рекламы, без маркетинговой шелухи.
Подписаться на IT-Аптеку →


