Asterisk WebRTC: настройка WSS и SRTP для SIP-звонков из браузера
Симптомы сбоев при установлении WebRTC сессий в Asterisk
Попытки подключения софтфонов на базе браузеров (SIP.js, JsSIP, Webphone) к серверу Asterisk завершаются ошибками на этапе рукопожатия WebSocket (WebSocket Handshake), сбоями согласования медиапотоков (ICE/SDP) или односторонней слышимостью (No Audio).
| Ошибка в консоли браузера | Событие в CLI Asterisk | Причина |
|---|---|---|
| WebSocket connection to 'wss://...:8089' failed | Нет событий в CLI (Connection Refused) | Не настроен HTTPS/WSS транспорт или используется самоподписанный SSL без доверия |
| Failed to set remote offer sdp | res_pjsip: Transport not valid for WebRTC | В эндпоинте PJSIP не включены обязательные опции DTLS и SRTP |
| ICE connection state failed | pjproject: ICE Keepalive / Binding error | Asterisk находится за NAT, не указан stun_server или external_media_address |
Конфигурация модулей HTTP, PJSIP и TLS для работы WebRTC
- Настройка встроенного HTTP-сервера для Secure WebSockets (
/etc/asterisk/http.conf):[general] enabled=yes bindaddr=0.0.0.0 bindport=8088 tlsenable=yes tlsbindaddr=0.0.0.0:8089 tlscertfile=/etc/asterisk/keys/asterisk.crt tlsprivatekey=/etc/asterisk/keys/asterisk.key - Конфигурация транспорта и эндпоинта WebRTC в
/etc/asterisk/pjsip.conf:; Определение защищенного транспорта WebSocket [transport-wss] type=transport protocol=wss bind=0.0.0.0:8089 ; Шаблон настроек для WebRTC-клиентов [webrtc_client](!) type=endpoint transport=transport-wss 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/asterisk/keys/asterisk.crt dtls_private_key=/etc/asterisk/keys/asterisk.key dtls_setup=actpass ice_support=yes media_use_received_transport=yes rtcp_mux=yes ; Создание абонента 1001 [1001](webrtc_client) auth=auth1001 aors=1001 [auth1001] type=auth auth_type=userpass password=StrongSecurePassword123! username=1001 [1001] type=aor max_contacts=5 remove_existing=yes - Настройка параметров NAT и сетевого адреса в
pjsip.conf:[transport-wss] external_media_address=YOUR_PUBLIC_IP external_signaling_address=YOUR_PUBLIC_IP - Применение настроек в консоли управления Asterisk:
asterisk -rx "module reload http" asterisk -rx "pjsip reload" asterisk -rx "http show status"
Критическое требование: Современные браузеры (Chrome, Firefox, Safari) блокируют микрофон и WebRTC на сайтах без протокола HTTPS, а также наотрез отказываются устанавливать WSS-соединение с серверами, на которых установлен самоподписанный (Self-Signed) SSL-сертификат. На сервере Asterisk обязательно должен быть установлен валидный доверенный сертификат (например, Let's Encrypt).
Частые вопросы (FAQ)
Зачем в WebRTC обязательно включать параметр use_avpf=yes?
Профиль AVPF (Audio-Visual Profile with Feedback) необходим для передачи сообщений обратной связи RTCCP, обработки джиттера и оперативного подтверждения потерь пакетов, что является базовым стандартом спецификации WebRTC.
Почему соединение WebSockets рвется ровно через 30-60 секунд?
Сетевые шлюзы и роутеры сбрасывают неактивные TCP-сессии. В JS-клиенте (SIP.js/JsSIP) необходимо включить параметр передачи ping-пакетов WebSocket (keep-alive таймер каждые 15-20 секунд).
Что такое rtcp_mux и почему его нужно активировать?
Параметр rtcp_mux=yes мультиплексирует потоки RTP (медиа) и RTCP (управление) на один и тот же порт UDP, сокращая число необходимых открытых портов на файрволе в два раза.
Какой кодек лучше использовать для браузерных звонков?
Кодек Opus является основным и стандартным для WebRTC. Он обеспечивает адаптивный битрейт, отличное качество речи и минимальную задержку при нестабильном интернет-канале.