Исправление ошибки ICE 1010 в BigBlueButton

Дата: 2026-01-09
Контейнер: BBB-CONT22-1
Проблема: Ошибка ICE 1010 - тайм-аут согласования соединения

Обнаруженная проблема

Пользователи получают ошибку:

Попытка переподключения аудио. Тайм-аут согласования соединения (Ошибка ICE 1010)

Анализ логов

Из логов bbb-webrtc-sfu видно:
- ❌ MEDIA_SERVER_REQUEST_TIMEOUT - таймауты при запуске аудио сессий
- ❌ stopping transport before media established - RTP транспорты останавливаются до установления медиа
- ⚠️ ICE соединение устанавливается, но затем происходит таймаут

Причина

В конфигурации mediasoup.webrtc.announcedIp использовалось доменное имя school.cdto.life вместо IP адреса. Это вызывает проблемы с ICE (Interactive Connectivity Establishment), так как:

  1. Клиенты не могут правильно резолвить доменное имя для ICE candidates
  2. ICE candidates могут содержать неправильные адреса
  3. WebRTC не может установить соединение через NAT

Решение

Исправление конфигурации mediasoup

Изменить announcedIp с доменного имени на внешний IP адрес в /etc/bigbluebutton/bbb-webrtc-sfu/production.yml:

Было:

mediasoup:
  webrtc:
    listenIps:
      - ip: 0.0.0.0
        announcedIp: school.cdto.life  # ❌ Доменное имя
  plainRtp:
    listenIp:
      ip: 10.218.14.37
      announcedIp: 89.179.242.240

Стало:

mediasoup:
  webrtc:
    listenIps:
      - ip: 0.0.0.0
        announcedIp: 89.179.242.240  # ✅ Внешний IP
  plainRtp:
    listenIp:
      ip: 10.218.14.37
      announcedIp: 89.179.242.240

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

  1. ✅ Изменен mediasoup.webrtc.announcedIp с school.cdto.life на 89.179.242.240
  2. mediasoup.plainRtp.announcedIp уже был правильно настроен
  3. bbb-webrtc-sfu перезапущен

Почему это важно

announcedIp используется в SDP (Session Description Protocol) для указания IP адреса в ICE candidates. WebRTC использует ICE для установления соединения через NAT и файрволы. Если announcedIp содержит доменное имя:

  1. Клиенты могут не резолвить его правильно
  2. ICE candidates могут быть неправильными
  3. WebRTC не может установить соединение → ошибка ICE 1010

Использование IP адреса напрямую гарантирует, что ICE candidates будут правильными.

Дополнительные проверки

1. Проверка ICE candidates в логах

После исправления проверьте логи на наличие правильных ICE candidates:

lxc exec BBB-CONT22-1 -- journalctl -u bbb-webrtc-sfu -f | grep -i "ice\|candidate"

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

Убедитесь, что порты WebRTC проброшены:

# На хосте
sudo ss -tuln | grep -E "24577|32768"

# В контейнере
lxc exec BBB-CONT22-1 -- ss -tuln | grep -E "24577|32768"

3. Проверка TURN сервера (если используется)

Если используется TURN сервер, убедитесь, что он настроен правильно:

lxc exec BBB-CONT22-1 -- systemctl status coturn
lxc exec BBB-CONT22-1 -- cat /etc/turnserver.conf | grep -E "listening-ip|external-ip|realm"

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

  1. ✅ Конфигурация исправлена
  2. ✅ bbb-webrtc-sfu перезапущен
  3. ⏳ Требуется тестирование

Протестируйте:
- Создайте новую конференцию
- Подключитесь с микрофоном
- Проверьте, что ошибка ICE 1010 исчезла
- Проверьте, что звук работает

Дополнительная диагностика

Если проблема сохраняется:

1. Проверка файрвола

# На хосте
sudo ufw status
sudo iptables -L -n | grep -E "24577|32768|16384"

2. Проверка NAT на роутере

Убедитесь, что порты UDP 16384-32768 проброшены правильно на роутере.

3. Проверка в браузере

Откройте консоль браузера (F12) и проверьте:
- Ошибки WebRTC
- ICE candidates в SDP
- Статус ICE соединения

4. Проверка STUN/TURN

Если используется STUN/TURN, убедитесь, что серверы доступны:

# Тест STUN
stunclient stun.l.google.com 19302

# Тест TURN (если настроен)
turnutils_stunclient school.cdto.life:3478

Статус

  • ✅ Конфигурация исправлена
  • ✅ bbb-webrtc-sfu перезапущен
  • ⏳ Требуется тестирование

Примечание: Если проблема сохраняется после исправления, возможно, потребуется настройка TURN сервера для работы через сложные NAT конфигурации.