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

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

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

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

Настройка защищенного WebRTC в Asterisk: WSS, DTLS-SRTP, ICE и STUN

Обновлено: 24.08.2026 · Официальная документация ↗
  • Ошибка ICE failed, see about:webrtc for more details в браузере при попытке совершить вызов.
  • В консоли Asterisk ошибки DTLS failure / Handshake failed или No SRTP module to support crypto suite.
  • Веб-телефон успешно регистрируется по WSS, но при звонке наблюдается полная тишина и мгновенный сброс через 5 секунд.
  • Браузер блокирует подключение к сокету WebSocket connection to 'wss://...:8089/ws' failed: ERR_CERT_AUTHORITY_INVALID.

1. Настройка встроенного HTTP/WSS сервера в http.conf

Файл /etc/asterisk/http.conf:

[general]
enabled=yes
bindaddr=0.0.0.0
bindport=8088
tlsenable=yes
tlsbindaddr=0.0.0.0:8089
tlscertfile=/etc/letsencrypt/live/pbx.example.com/fullchain.pem
tlsprivatekey=/etc/letsencrypt/live/pbx.example.com/privkey.pem

2. Создание PJSIP WebRTC Transport и Endpoint

Файл /etc/asterisk/pjsip.conf:

[transport-wss]
type=transport
protocol=wss
bind=0.0.0.0:8089

; --- Шаблон для WebRTC клиентов ---
[webrtc_template](!)
type=endpoint
context=from-internal
disallow=all
allow=opus,ulaw,alaw
dtmf_mode=rfc4733
use_avpf=yes
media_encryption=dtls
dtls_verify=fingerprint
dtls_cert_file=/etc/letsencrypt/live/pbx.example.com/fullchain.pem
dtls_priv_key_file=/etc/letsencrypt/live/pbx.example.com/privkey.pem
dtls_setup=actpass
ice_support=yes
media_use_received_transport=yes
rtcp_mux=yes

[1001-ws](webrtc_template)
auth=1001-auth
aors=1001-aor

[1001-auth]
type=auth
auth_type=userpass
username=1001
password=VeryStrongWebRTCPassword

[1001-aor]
type=aor
max_contacts=3
remove_existing=yes

3. Настройка STUN-сервера в rtp.conf

Для корректного сбора ICE-кандидатов отредактируйте /etc/asterisk/rtp.conf:

[general]
rtpstart=10000
rtpend=20000
icesupport=yes
stunaddr=stun.l.google.com:19302

4. Применение и проверка

asterisk -rx "http show status"
asterisk -rx "pjsip reload"
asterisk -rx "rtp reload"
💡 Практика специалистов: Всегда проверяйте права доступа демона asterisk к сертификатам Let's Encrypt. Каталог /etc/letsencrypt/live/ по умолчанию закрыт от пользователя asterisk — настройте deploy-hook скрипт для копирования ключей с правами 640 и группой asterisk.

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

Почему WebRTC требует обязательного наличия валидного SSL-сертификата?

Современные браузеры блокируют доступ к API захвата микрофона/камеры (getUserMedia) и отклоняют соединения WebSockets без HTTPS/WSS с доверенным сертификатом (Let's Encrypt или коммерческий CA). Самоподписанные сертификаты вызывают ошибку handshake.

Что такое rtcp_mux и зачем он нужен в WebRTC?

rtcp_mux=yes мультиплексирует потоки RTP (медиа) и RTCP (управляющие пакеты) на один и тот же UDP-порт, что значительно упрощает прохождение межсетевых экранов и ускоряет согласование ICE.

Почему при звонках между WebRTC и обычным SIP-телефоном нет звука?

Обычный SIP-телефон использует незашифрованный RTP (SAVP profile off), а WebRTC строго требует DTLS-SRTP (SAVPF). Убедитесь, что Asterisk скомпилирован с модулями res_srtp, res_crypto и res_http_websocket, выполняя транскодирование и ре-шифрование медиапотока.

Нужен ли TURN-сервер для WebRTC в Asterisk?

Если клиенты находятся за жесткими симметричными NAT (Symmetric NAT / CGNAT в мобильных сетях), прямое P2P/STUN соединение с сервером может не установиться. В этом случае на клиенте (SIP.js) необходимо настроить TURN-сервер (например, Coturn).

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