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

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

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

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

SIP Error 420 Bad Extension: диагностика заголовков Require и Unsupported

Обновлено: 24.08.2026
  • Входящий или исходящий звонок отклоняется сервером с кодом 420 Bad Extension.
  • В теле ответа 420 присутствует обязательный заголовок Unsupported со списком отвергнутых расширений протокола (например, Unsupported: 100rel, timer).
  • Сессия завершается сразу после первичного INVITE, не доходя до этапа вызова абонента (Ringing).

1. Анализ заголовка Require в SIP-трейсе

Откройте сигнатурный трейс и найдите заголовок Require или Proxy-Require в отправленном запросе:

INVITE sip:user@provider.com SIP/2.0
Require: 100rel, sec-agree, path
Supported: replaces, timer

Ответ удаленной стороны:

SIP/2.0 420 Bad Extension
Unsupported: sec-agree, path

Ошибка 420 означает, что инициатор принудительно затребовал поддержку функций через Require, которых сервер не имеет в своем стеке.

2. Исправление настроек 100rel (PRACK) в Asterisk

Если сервер отклоняет надежную доставку предварительных ответов (RFC 3262 100rel), отключите принудительное требование в /etc/asterisk/pjsip.conf:

[my-endpoint]
type=endpoint
# Варианты: no (выключено), yes (поддерживается), required (строго требуется)
100rel=yes

Если оператор не поддерживает 100rel, установите значение в no:

100rel=no

3. Корректировка заголовков в FreeSWITCH

В файле конфигурации SIP-профиля vars.xml или internal.xml измените принудительные флаги:

<!-- Переместить флаг из Require в Supported -->
<param name="enable-100rel" value="true"/>
<param name="session-timers" value="supported"/>

4. Очистка кастомных заголовков Require через диалплан

В Asterisk extensions.conf можно удалить лишние параметры перед отправкой вызова в транк:

exten => _X.,1,NoOp(Cleaning Require Headers)
 same => n,Set(PJSIP_HEADER(remove,Require)=)
 same => n,Dial(PJSIP/${EXTEN}@my-outbound-trunk)
💡 Практика специалистов: Никогда не используйте заголовок 'Require' для опций, без которых вызов может физически состояться (например, session-timers). Помещайте их исключительно в заголовок 'Supported'.

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

В чем фундаментальная разница между заголовками Supported и Require?

Заголовок 'Supported' сообщает узлу, что клиент понимает расширение, но не настаивает на нем. Заголовок 'Require' делает использование расширения строго обязательным для продолжения вызова; если узел его не знает, он обязан выдать ошибку 420.

Какой заголовок обязательно должен присутствовать в ответе SIP 420?

Согласно RFC 3261, сервер, возвращающий 420 Bad Extension, обязан включить заголовок 'Unsupported', перечислив в нем все неподдерживаемые им опции из заголовка Require.

Что такое расширение 100rel и почему оно часто вызывает 420 ошибку?

100rel обеспечивает гарантированную доставку временных ответов (180 Ringing, 183 Session Progress) с использованием запроса PRACK и подтверждения. Устаревшие софтсвитчи не поддерживают PRACK и отвечают 420.

Как софтфон должен реагировать на ответ 420 Bad Extension?

Корректный клиент должен повторить отправку запроса INVITE, предварительно исключив из заголовка Require те опции, которые были перечислены в заголовке Unsupported полученного ответа 420.

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