Asterisk: Digest realm mismatch for endpoint — решение ошибки авторизации
- В логах появляется запись:
WARNING[...]: res_pjsip_authenticator_digest.c: Digest realm mismatch for endpoint 'XXX'. - SIP-телефоны не могут зарегистрироваться и возвращают
401 Unauthorizedили403 Forbidden. - Транки между Asterisk и внешними SIP-провайдерами сбрасывают входящие или исходящие вызовы.
- Утилита
sngrepпоказывает бесконечный цикл REGISTER -> 401 Unauthorized -> REGISTER.
1. Синхронизация параметра Realm в pjsip.conf
Убедитесь, что в секции auth значение realm совпадает с доменом PBX или оставлено пустым (для сопоставления с любым realm):
[auth_101]
type = auth
auth_type = userpass
username = 101
password = StrongSecretPassword123
realm = asterisk ; Либо укажите FQDN: pbx.company.com
[101]
type = endpoint
auth = auth_101
aors = 101
context = internal2. Настройка идентификации эндпоинта по Auth Username
Если имя пользователя в заголовке Digest отличается от SIP From пользователя, включите поиск по auth_username в /etc/asterisk/pjsip.conf:
[global]
type = global
endpoint_identifier_order = ip,username,auth_username3. Конфигурация Realm для внешних транков
При подключении к внешнему провайдеру задавайте realm точно так, как его ожидает оператор:
[trunk_provider_auth]
type = auth
auth_type = userpass
username = 79991234567
password = ProviderSecretPass
realm = sip.provider.ru
[trunk_provider]
type = endpoint
transport = transport-udp
context = from-trunk
outbound_auth = trunk_provider_auth
aors = trunk_provider4. Перезагрузка модуля авторизации PJSIP
asterisk -rx "pjsip reload"
asterisk -rx "pjsip show auths" Частые вопросы (FAQ)
Что такое SIP Digest Realm?
Realm — это строковый идентификатор домена безопасности, используемый при хешировании пароля по алгоритму MD5/SHA256 в заголовке SIP Authorization (RFC 2617).
Что делать, если SIP-клиент не передает realm в ответе на challenge?
Если оставить директиву realm пустой или закомментированной в секции [auth], Asterisk будет сопоставлять учетные данные независимо от переданного клиентом значения realm.
Почему транк без регистрации выдает Digest realm mismatch?
Для транков с авторизацией по IP заблокируйте требование аутентификации, удалив директиву auth = ... из секции [endpoint] и настроив секцию [identify] с адресом провайдера.
Как проверить успешность регистрации в консоли?
Используйте команду: pjsip show registrations (для исходящих транков) или pjsip show endpoints (для внутренних абонентов).