Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

SIP_ACK_TIMEOUT_30SEC IP-Телефония и СКУД

Траблшутинг сброса звонков ровно на 30-й секунде в Asterisk (NAT / ACK Timeout)

Обновлено: 24.08.2026 · Официальная документация ↗
  • Входящие или исходящие звонки стабильно сбрасываются ровно на 30–32 секунде после поднятия трубки.
  • Односторонняя слышимость или полное отсутствие звука первые 30 секунд разговора.
  • В системном логе Asterisk фиксируется предупреждение: Retransmission timeout reached on transmission ... for seqno ... (Critical Response).
  • В дампе трафика sngrep видно, что вызывающая сторона отправляет пакет 200 OK, но не получает в ответ подтверждающий пакет ACK.

1. Причина сброса звонка на 30-й секунде

В протоколе SIP при установлении вызова сторона, принявшая звонок, отправляет пакет 200 OK. Инициатор обязан подтвердить прием пакетом ACK. Если из-за NAT, неправильной маршрутизации или некорректного IP в заголовке Contact пакет ACK не доходит за время таймера транзакции SIP (T1/T2, стандартно 32 секунды), станция разрывает сессию отправкой BYE.

2. Корректная настройка NAT в /etc/asterisk/pjsip.conf

В секции транспорта необходимо явно указать внешний публичный белый IP-адрес и локальные подсети:

[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0:5060
; Укажите ваш внешний публичный статический IP-адрес
external_media_address=203.0.113.50
external_signaling_address=203.0.113.50
; Укажите локальные подсети, которые НЕ нужно натить
local_net=192.168.0.0/16
local_net=10.0.0.0/8
local_net=172.16.0.0/12

3. Конфигурация параметров эндпоинта за NAT

[trunk-provider]
type=endpoint
context=from-pstn
disallow=all
allow=alaw
allow=ulaw
rtp_symmetric=yes
force_rport=yes
rewrite_contact=yes
ice_support=no
aors=trunk-provider-aor
  • rtp_symmetric=yes: отправляет медиапоток RTP обратно на тот же IP/порт, с которого он пришел;
  • force_rport=yes: отвечает на порт, с которого фактически пришел UDP-пакет (RFC 3581);
  • rewrite_contact=yes: переписывает заголовок Contact адресом из сетевого уровня IP-пакета.

4. Настройка параметров межсетевого экрана (Router/Firewall)

На пограничном маршрутизаторе (MikroTik, pfSense, Cisco, FortiGate):

  1. Обязательно отключите SIP ALG (SIP Helper):
    # Для MikroTik:
    /ip firewall service-port disable sip
  2. Увеличьте таймаут UDP-соединений для SIP (UDP Timeout) до 300 секунд.
  3. Пробросьте диапазон RTP портов на PBX (по умолчанию UDP 10000-20000).

5. Проверка диаграммы вызова через sngrep

sngrep -c

Найдите звонок, завершившийся за 32 секунды. Убедитесь, что после SIP/2.0 200 OK отправляется и успешно принимается ACK.

💡 Практика специалистов: Если Asterisk находится за двойным NAT (например, в облаке AWS/GCP или за роутером провайдера), не полагайтесь на автоматическое определение IP. Всегда жестко прописывайте директивы external_media_address и external_signaling_address в transport.

Частые вопросы (FAQ)

Почему звонок рвется именно на 30-й, а не на 10-й или 60-й секунде?

Стандарт RFC 3261 определяет таймер транзакции Timer B/Timer F (64*T1 = 32 секунды). В течение этого времени отправляющая сторона 7 раз повторяет пакет 200 OK. Если ACK так и не получен, соединение принудительно разрывается по таймауту.

Почему включенный SIP ALG на роутере ломает связь?

SIP ALG пытается на лету модифицировать SIP-пакеты в памяти роутера, но часто делает это с ошибками: портит контрольные суммы, некорректно меняет Call-ID или заголовки Via/Contact, приводя к потере ACK и отсутствию звука.

Как исправить проблему 30 секунд, если у сервера динамический внешний IP?

Используйте параметр external_signaling_address = your-dynamic-host.ddns.net, настроив регулярное обновление Dynamic DNS через cron или демон ddclient.

Что делать, если ACK теряется только на софтфонах вне офиса?

Убедитесь, что в конфигурации эндпоинта включены директивы force_rport=yes и rewrite_contact=yes, а на клиентском софтфоне отключен STUN (если PBX сама обрабатывает NAT).

Полезные материалы
Рекомендуем