Диагностика проблем с регистрацией и слышимостью
В процессе эксплуатации корпоративных АТС мы часто сталкиваемся с ситуациями, когда система кажется настроенной верно, но связи нет. Мы уже изучили, как перехватывать трафик и анализировать его в Wireshark — это база для глубокой диагностики. Теперь перейдем к алгоритму решения двух самых частых проблем: когда устройство не регистрируется и когда вызов проходит, но участники не слышат друг друга.
Проблема регистрации: телефон не в сети
Проблема регистрации — это состояние, при котором SIP-клиент (IP-телефон, софтфон или шлюз) не может авторизоваться на сервере Asterisk. Без этого сервер не знает, на какой IP-адрес отправлять входящий вызов.
Для диагностики используем метод исключения: от сетевого уровня к прикладному. Как показано в Схеме 1, процесс может прерваться на любом этапе.
1. Проверка статуса в CLI
Прежде чем анализировать дампы, проверьте состояние эндпоинта в консоли Asterisk:
asterisk -rvv
pjsip show endpoints
Статус Unavailable или Unknown означает, что сервер не получал от устройства успешных запросов.
2. Анализ SIP-сообщений в реальном времени
Включите логирование PJSIP, чтобы увидеть входящие пакеты:
pjsip set logger on
Возможны три сценария:
- В консоли тишина. Пакеты не доходят до Asterisk. Проверьте
firewalldна сервере и настройки NAT на роутере. - Ответ 401 Unauthorized. Это стандартный запрос пароля. Если за ним не следует повторный запрос с хешем пароля от клиента — устройство настроено неверно или «сдалось».
- Ответ 403 Forbidden. Сервер отклонил регистрацию. Обычно это ошибка в пароле или включенная опция
auth_rejection_permanentв настройках PJSIP.
Проблемы со слышимостью и RTP
Если регистрация активна и вызов устанавливается, возникают RTP-проблемы. Сигнализация (SIP) работает, но передача голоса (RTP) нарушена.
Односторонняя связь и тишина
Односторонняя связь — классический симптом проблем с NAT или маршрутизацией UDP-пакетов. Asterisk ожидает RTP-трафик на портах 10000–20000. Если роутер не знает, куда переслать ответные пакеты, один из собеседников ничего не услышит.
Если сервер за NAT, а параметр external_media_address не указан, Asterisk передаст в SIP-пакете свой локальный IP (например, 192.168.1.10). Удаленный клиент попытается отправить звук на этот адрес, который недоступен из интернета.
Для быстрой диагностики используйте встроенную команду:
rtp set debug on
Got RTP packet from...— пакеты приходят на сервер.Sent RTP packet to...— сервер отправляет пакеты.
Если вы видите только исходящие пакеты (Sent), но не видите входящих (Got) — трафик блокирует сетевой экран или NAT перед сервером.
Алгоритм устранения проблем со звуком
- Диапазон портов. Убедитесь, что UDP 10000–20000 открыты на всех файрволах.
- Symmetric RTP. В настройках PJSIP-экстеншена включите
rtp_symmetric=yes. Это заставит Asterisk отправлять звук на тот IP и порт, с которых он сам получил первый RTP-пакет, игнорируя (возможно, неверные) данные из заголовков SIP. - Direct Media. Отключите
direct_media, чтобы звук всегда шел через Asterisk. Это упрощает отладку.
Проверьте состояние RTP-потоков:
- Совершите звонок между двумя номерами.
- В консоли введите
rtp set debug on. - Убедитесь, что видите строки
Got RTPот обоих участников. Если от одного их нет — вы нашли сторону, где блокируется трафик. - Выключите отладку:
rtp set debug off.
Мы научились проверять прохождение пакетов на уровне протоколов. Но если регистрация есть и звук ходит, а звонок обрывается с ошибкой «Номер не существует» — проблема в логике. В следующей теме разберем, как Asterisk принимает решения внутри себя и как искать ошибки в диалплане.
Понравился урок?
Сохраните прогресс и получите персональный курс по любой теме — без форм и паролей
Продолжить в Telegram