Полное исправление ошибок ICE 1107 и 1020 в BigBlueButton

Дата: 2026-01-10
Проблема: Видео и звук не работают, ошибки ICE 1107 (сбой подключения) и 1020 (медиа не может достичь сервера)
Домен: school.cdto.life

Выявленная проблема

В логах видно сообщение "stopping transport before media established" - медиа-транспорт останавливается до установления соединения. Это происходит потому, что:

  1. ICE candidates только типа "host" - нет TURN/relay candidates
  2. Клиенты не могут установить прямое соединение через NAT
  3. TURN сервер не используется для обхода NAT
  4. Медиа-порты не пробрасываются правильно в контейнер

Анализ логов

В логах bbb-webrtc-sfu видно:

"iceCandidates":[{"foundation":"udpcandidate","priority":1076302079,"ip":"89.179.242.240","address":"89.179.242.240","protocol":"udp","port":29485,"type":"host"}]

Проблема: Только type: "host" - нет type: "relay" или type: "srflx", что означает, что TURN сервер не используется.

Выполненные исправления

1. Проверка и исправление переменных FreeSWITCH

Файл: /opt/freeswitch/etc/freeswitch/vars.xml

Переменные external_rtp_ip и external_sip_ip были установлены в значение 89.179.242.240:

<X-PRE-PROCESS cmd="set" data="external_rtp_ip=89.179.242.240"/>
<X-PRE-PROCESS cmd="set" data="external_sip_ip=89.179.242.240"/>

2. Проверка конфигурации mediasoup

Файл: /etc/bigbluebutton/bbb-webrtc-sfu/production.yml

Конфигурация TURN проверена и правильная:

turn:
  enabled: true
  urls:
    - turn:school.cdto.life:3478?transport=udp
    - turn:school.cdto.life:3478?transport=tcp
  secret: 8e3f6c01a3bbac78ad826d04c03cd4ab3de2fba747943005af2427e7865a09fa
  username: bbb
  stunServers:
    - urls: stun:school.cdto.life:3478

3. Проверка TURN сервера (coturn)

Файл: /etc/turnserver.conf

Конфигурация правильная:

listening-port=3478
listening-ip=0.0.0.0
external-ip=89.179.242.240
relay-ip=10.218.14.37
min-port=32769
max-port=65535
realm=school.cdto.life
static-auth-secret=8e3f6c01a3bbac78ad826d04c03cd4ab3de2fba747943005af2427e7865a09fa
lt-cred-mech
use-auth-secret

4. Настройка проброса портов на хосте

Выполнено: Настроен проброс UDP портов с хоста (192.168.1.112) в контейнер (10.218.14.37) через iptables:

Правила NAT (PREROUTING):
- UDP 3478 → 10.218.14.37:3478
- TCP 3478 → 10.218.14.37:3478
- UDP 16384-32768 → 10.218.14.37
- UDP 24577-32768 → 10.218.14.37

Правила FORWARD:
- Разрешена пересылка трафика для всех настроенных портов

5. Перезапуск сервисов

Все сервисы перезапущены:
- ✅ FreeSWITCH
- ✅ coturn (TURN сервер)
- ✅ bbb-webrtc-sfu (mediasoup)

Текущая конфигурация

FreeSWITCH

  • external_rtp_ip: 89.179.242.240
  • external_sip_ip: 89.179.242.240
  • ext-rtp-ip: использует переменную $${external_rtp_ip}
  • ext-sip-ip: использует переменную $${external_sip_ip}

mediasoup (bbb-webrtc-sfu)

  • webrtc.announcedIp: 89.179.242.240
  • webrtc.listenIp: 0.0.0.0
  • plainRtp.announcedIp: 89.179.242.240
  • plainRtp.listenIp: 10.218.14.37
  • TURN сервер настроен: school.cdto.life:3478
  • STUN сервер настроен: stun:school.cdto.life:3478

TURN сервер (coturn)

  • listening-ip: 0.0.0.0 (слушает на всех интерфейсах)
  • external-ip: 89.179.242.240
  • relay-ip: 10.218.14.37
  • listening-port: 3478 (UDP/TCP)
  • min-port: 32769, max-port: 65535
  • realm: school.cdto.life
  • Статус: ✅ активен

Порти mediasoup workers

  • Диапазон портов WebRTC: 24577-32768 (UDP)
  • Порты открываются динамически при создании медиа-транспортов

Важные замечания

Порты на роутере

Проверено пользователем: Порты проброшены на роутере:
- WebRTC: 16384-32768 UDP → 192.168.1.112
- HTTP: 80 TCP/UDP → 192.168.1.112
- HTTPS: 443 TCP/UDP → 192.168.1.112
- TURN-STUN: 3478 TCP/UDP → 192.168.1.112

⚠️ Важно: Порты TURN relay (32769-65535 UDP) могут потребоваться, если клиенты используют TURN для обхода NAT.

Возможные причины ошибок ICE 1107 и 1020

  1. Медиа-транспорт останавливается до установления - "stopping transport before media established"
  2. Клиенты не могут достичь медиа-портов напрямую
  3. TURN сервер не генерирует relay candidates

  4. Только host candidates в логах - нет TURN/relay candidates

  5. TURN сервер настроен, но не используется клиентами
  6. Возможно, клиенты не получают TURN credentials

  7. NAT traversal проблемы - клиенты за NAT не могут установить прямое соединение

  8. TURN сервер должен использоваться для обхода NAT

  9. Порты не пробрасываются правильно - медиа-порты недоступны извне

  10. Правила iptables настроены, но могут быть проблемы с маршрутизацией

Диагностика

Проверка конфигурации

# Проверка переменных FreeSWITCH
lxc exec BBB-CONT22-1 -- bbb-conf --check | grep -E "external_rtp_ip|external_sip_ip"

# Проверка конфигурации mediasoup
lxc exec BBB-CONT22-1 -- cat /etc/bigbluebutton/bbb-webrtc-sfu/production.yml

# Проверка TURN сервера
lxc exec BBB-CONT22-1 -- cat /etc/turnserver.conf | grep -E "external-ip|relay-ip|listening-ip"

Проверка портов

# Проверка TURN сервера
lxc exec BBB-CONT22-1 -- ss -tuln | grep 3478

# Проверка правил iptables на хосте
sudo iptables -t nat -L PREROUTING -n -v | grep "10.218.14.37"
sudo iptables -L FORWARD -n -v | grep "10.218.14.37"

Проверка логов

# Логи bbb-webrtc-sfu
lxc exec BBB-CONT22-1 -- journalctl -u bbb-webrtc-sfu -f

# Логи TURN сервера
lxc exec BBB-CONT22-1 -- tail -f /var/log/turnserver/turnserver.log

Проверка ICE candidates

В логах должны быть TURN/relay candidates:

"iceCandidates":[
  {"type":"host",...},
  {"type":"srflx",...},  // От STUN
  {"type":"relay",...}   // От TURN - ЭТО КРИТИЧНО
]

Если видны только type: "host", значит TURN не используется.

Решение проблемы

Проблема: Медиа-транспорт останавливается до установления

Причина: Клиенты не могут достичь медиа-портов напрямую, а TURN не генерирует relay candidates.

Возможные решения:

  1. Проверить, что клиенты получают TURN credentials
  2. Откройте консоль браузера (F12)
  3. Проверьте SDP на наличие TURN серверов
  4. Проверьте, есть ли relay candidates

  5. Проверить доступность TURN сервера извне
    bash # С внешнего сервера или онлайн-сервиса turnutils_stunclient school.cdto.life:3478

  6. Проверить порты TURN relay на роутере

  7. Порты 32769-65535 (UDP) должны быть проброшены, если клиенты используют TURN

  8. Проверить логи TURN сервера во время подключения
    bash lxc exec BBB-CONT22-1 -- tail -f /var/log/turnserver/turnserver.log

Должны быть записи о создании relay sessions при подключении клиентов.

Скрипт для автоматического исправления

Создан скрипт /home/cdto/DENKART/scripts/fix-ice-1107-1020-complete.sh для автоматического исправления всех проблем:

./scripts/fix-ice-1107-1020-complete.sh [BBB_CONTAINER] [CONTAINER_IP] [EXTERNAL_IP] [DOMAIN]

Пример:

./scripts/fix-ice-1107-1020-complete.sh BBB-CONT22-1 10.218.14.37 89.179.242.240 school.cdto.life

Следующие шаги

  1. ✅ Проверена конфигурация FreeSWITCH
  2. ✅ Проверена конфигурация mediasoup
  3. ✅ Проверена конфигурация TURN сервера
  4. ✅ Настроен проброс портов на хосте
  5. ✅ Сервисы перезапущены
  6. Проверка работы TURN сервера - убедитесь, что TURN генерирует relay candidates
  7. Тестирование - попробуйте подключиться к конференции и проверить работу видео/аудио
  8. Проверка логов - следите за логами на наличие TURN relay sessions

Критически важно

  • Проверьте логи TURN сервера во время подключения клиента
  • Убедитесь, что клиенты получают TURN/relay candidates в SDP
  • Если видны только host candidates, проверьте конфигурацию TURN в mediasoup

Связанные документы

  • /home/cdto/DENKART/docs/operations/bbb-ice-1107-1020-fix.md - Базовая диагностика ICE 1107 и 1020
  • /home/cdto/DENKART/docs/operations/bbb-ice-1010-complete-fix.md - Полное исправление ICE 1010
  • /home/cdto/DENKART/docs/troubleshooting/TURN-CONFIGURATION-COMPLETE.md - Конфигурация TURN сервера
  • /home/cdto/DENKART/docs/setup/router-port-forwarding.md - Настройка проброса портов на роутере

Статус

  • ✅ Конфигурация проверена и правильная
  • ✅ Порты проброшены на хосте
  • ✅ Сервисы работают
  • ⏳ Требуется проверка работы TURN сервера и генерации relay candidates
  • ⏳ Требуется тестирование подключения