Исправление ошибки 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), так как:
- Клиенты не могут правильно резолвить доменное имя для ICE candidates
- ICE candidates могут содержать неправильные адреса
- 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
Выполненные исправления
- ✅ Изменен
mediasoup.webrtc.announcedIpсschool.cdto.lifeна89.179.242.240 - ✅
mediasoup.plainRtp.announcedIpуже был правильно настроен - ✅
bbb-webrtc-sfuперезапущен
Почему это важно
announcedIp используется в SDP (Session Description Protocol) для указания IP адреса в ICE candidates. WebRTC использует ICE для установления соединения через NAT и файрволы. Если announcedIp содержит доменное имя:
- Клиенты могут не резолвить его правильно
- ICE candidates могут быть неправильными
- 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"
Следующие шаги
- ✅ Конфигурация исправлена
- ✅ bbb-webrtc-sfu перезапущен
- ⏳ Требуется тестирование
Протестируйте:
- Создайте новую конференцию
- Подключитесь с микрофоном
- Проверьте, что ошибка 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 конфигурации.