Траблшутинг SIP регистрации (REGISTER) за CGNAT и LTE-роутерами
- Периодическая потеря входящих вызовов на удаленных телефонах за LTE-модемами («Абонент временно недоступен»).
- Статус транка или пира в АТС случайным образом меняется с
OKнаUNREACHABLE. - Входящие звонки проходят, но исходящие сбрасываются с ошибкой
403 Forbiddenили408 Request Timeout. - Односторонняя слышимость или полное отсутствие звука в обоих направлениях после 15-й секунды звонка.
1. Отключение SIP ALG на мобильном роутере
Мобильные операторы и роутеры с поддержкой LTE (MikroTik, Huawei, Keenetic) часто имеют включенный функционал SIP Application Layer Gateway (ALG), который повреждает SIP-заголовки (подменяет реальные порты на 5060 и ломает хеши контрольных сумм):
- На роутерах MikroTik:
/ip firewall service-port disable sip - На LTE роутерах Keenetic/Huawei: перейдите в веб-интерфейс -> Сетевые экраны/Безопасность -> Снимите галочку
SIP ALG / SIP Passthrough.
2. Принудительное включение Symmetric NAT (rport) на IP-АТС
В Asterisk PJSIP настройте параметры эндпоинта для работы через CGNAT (/etc/asterisk/pjsip.conf):
[remote-lte-endpoint]
type=endpoint
context=from-internal
disallow=all
allow=alaw,ulaw,g729
# Обязательные параметры для работы за CGNAT:
rtp_symmetric=yes
force_rport=yes
rewrite_contact=yes
direct_media=no
# Уменьшение времени регистрации для удержания NAT-сессии
[remote-lte-aor]
type=aor
max_contacts=1
minimum_expiration=30
default_expiration=60
maximum_expiration=120
qualify_frequency=15
qualify_timeout=3.03. Использование внешних серверов STUN / TURN
Если у оператора используется симметричный жесткий NAT (Symmetric Port-Overloading NAT), пропишите публичный STUN-сервер в настройках IP-телефона:
- STUN Server:
stun.l.google.com:19302илиstun.cloudflare.com:3478 - NAT Traversal Mode:
STUN - Keep-Alive Interval:
15 seconds(отправка dummy UDP пакетов).
4. Переключение сигнального протокола на TCP / TLS
Большинство LTE-операторов принудительно закрывают неактивные UDP-трансляции через 30 секунд. TCP-сессии живут значительно дольше:
- Переведите порт регистрации на
TCP 5060илиTLS 5061. - Настройте софтфон/телефон на использование
Transport: TLS.
Частые вопросы (FAQ)
Что делает опция rewrite_contact=yes в PJSIP?
Она указывает серверу игнорировать локальный 'серый' IP-адрес, который телефон сам вписал в заголовок Contact, и отправлять все последующие ответы (включая INVITE и NOTIFY) на фактический публичный IP и порт CGNAT, с которого пришел пакет.
Почему время регистрации (Registration Expiry) за LTE нужно уменьшать до 60 секунд?
Таблицы трансляций мобильных операторов (CGNAT) сбрасывают неактивные UDP сессии через 30-60 секунд. Короткий интервал перерегистрации постоянно держит сокет открытым со стороны клиента.
Почему при звонках через 4G возникает односторонняя слышимость?
Причина в том, что в SDP теле запроса указан локальный IP-адрес клиента (например, 192.168.8.100). Без включенного rtp_symmetric=yes АТС пытается слать аудиопоток на этот недостижимый адрес вместо реального публичного сокета оператора.
Как проверить, включен ли SIP ALG у провайдера?
Снимите дамп пакетов sngrep/tcpdump на АТС. Если в пакете REGISTER порт в заголовке Via: равен 5060, а фактический порт отправки пакета в заголовке IP отличается (например, 41253), промежуточный узел или модем модифицирует трафик через ALG.