Настройка SIP телефонии за MikroTik и отключение SIP ALG

полная конфигурация для связки MikroTik + Asterisk — DNAT для SIP и RTP, masquerade, таймауты, исключение из FastTrack

Звонок соединился, абонент говорит — а вы его не слышите. Или слышите только вы, а вас нет. Или через 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 работает плохо — действуем по порядку:

  1. Отключаем SIP ALG/ip firewall service-port disable sip. Это первое и главное действие. В большинстве случаев уже это решает проблему.
  2. Открываем RTP-порты и настраиваем DNAT — если Asterisk или IP-телефоны за NAT и нужен входящий трафик. Без этого звук будет только исходящий.
  3. Увеличиваем UDP timeout/ip firewall connection tracking set udp-timeout=60s. Решает проблему обрывов через 30 секунд и пропадания регистрации.

Всё остальное — тюнинг и частные случаи. Но эти три шага закрывают подавляющее большинство обращений «почему не работает SIP через MikroTik».

Остались проблемы после всех настроек? Опишите в комментарии схему подключения, версию RouterOS и симптомы — разберём.

Оставайтесь на связи

Рецепты от IT-боли. Без воды, без рекламы, без маркетинговой шелухи.

Подписаться на IT-Аптеку →
Поделитесь:

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх