Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

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

Asterisk WebRTC: настройка WSS и SRTP для SIP-звонков из браузера

Обновлено: 16.09.2026  ·  Официальная база знаний

Симптомы сбоев при установлении 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 sdpres_pjsip: Transport not valid for WebRTCВ эндпоинте PJSIP не включены обязательные опции DTLS и SRTP
ICE connection state failedpjproject: ICE Keepalive / Binding errorAsterisk находится за NAT, не указан stun_server или external_media_address

Конфигурация модулей HTTP, PJSIP и TLS для работы WebRTC

  1. Настройка встроенного 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
  2. Конфигурация транспорта и эндпоинта 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
  3. Настройка параметров NAT и сетевого адреса в pjsip.conf:
    [transport-wss]
    external_media_address=YOUR_PUBLIC_IP
    external_signaling_address=YOUR_PUBLIC_IP
  4. Применение настроек в консоли управления 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).

Практический опыт инженера: Практика ITSTM: При возникновении глухоты (нет звука) в 99% случаев проблема кроется в диапазоне RTP-портов. Убедитесь, что в файле /etc/asterisk/rtp.conf задан диапазон (например, 10000-20000) и этот диапазон портов UDP полностью проброшен через внешний маршрутизатор к вашему серверу.

Частые вопросы (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. Он обеспечивает адаптивный битрейт, отличное качество речи и минимальную задержку при нестабильном интернет-канале.