Исправление ошибки ICE 1010 через настройку TURN сервера

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

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

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

Анализ

Из проверки видно:
- ✅ TURN сервер (coturn) работает на порту 3478
- ✅ Конфигурация TURN сервера правильная
- ❌ TURN сервер не настроен в конфигурации bbb-webrtc-sfu
- ❌ Клиенты не могут использовать TURN для обхода NAT

Причина

Ошибка ICE 1010 возникает, когда WebRTC не может установить соединение через NAT. Это происходит потому, что:

  1. Клиенты не могут напрямую подключиться к серверу через NAT
  2. TURN сервер не настроен в конфигурации bbb-webrtc-sfu
  3. Клиенты не получают TURN сервер в ICE candidates

Решение

Настройка TURN сервера в bbb-webrtc-sfu

Добавить конфигурацию TURN сервера в /etc/bigbluebutton/bbb-webrtc-sfu/production.yml:

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

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

  1. ✅ Добавлена конфигурация TURN сервера в production.yml
  2. ✅ TURN сервер включен (enabled: true)
  3. ✅ Настроены URL для UDP и TCP транспортов
  4. ✅ Указан секрет для аутентификации
  5. ✅ bbb-webrtc-sfu перезапущен

Полная конфигурация production.yml

mediasoup:
  webrtc:
    listenIps:
      - ip: 0.0.0.0
        announcedIp: 89.179.242.240
  plainRtp:
    listenIp:
      ip: 10.218.14.37
      announcedIp: 89.179.242.240
freeswitch:
  ip: 10.218.14.37
  sip_ip: 10.218.14.37
  esl_password: 0d2fdc71733c127c
turn:
  enabled: true
  urls:
    - turn:school.cdto.life:3478?transport=udp
    - turn:school.cdto.life:3478?transport=tcp
  secret: 8e3f6c01a3bbac78ad826d04c03cd4ab3de2fba747943005af2427e7865a09fa
  username: bbb

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

TURN (Traversal Using Relays around NAT) сервер необходим для:
1. Обхода проблем с NAT и файрволами
2. Установления соединения между клиентами, которые не могут подключиться напрямую
3. Обеспечения стабильного WebRTC соединения

Без TURN сервера:
- Клиенты за NAT не могут установить соединение
- Возникают ошибки ICE 1010
- Соединения нестабильны или не устанавливаются

С TURN сервером:
- Клиенты могут использовать TURN для ретрансляции трафика
- ICE соединение устанавливается успешно
- Соединения стабильны

Проверка работы

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

После перезапуска проверьте логи:

lxc exec BBB-CONT22-1 -- journalctl -u bbb-webrtc-sfu --since "1 minute ago" | grep -i "turn\|error"

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

  1. Откройте конференцию BigBlueButton
  2. Откройте консоль браузера (F12)
  3. Проверьте, что в SDP есть TURN серверы
  4. Откройте about:webrtc в Firefox или chrome://webrtc-internals в Chrome
  5. Проверьте, что используется TURN сервер

3. Проверка TURN сервера

Убедитесь, что TURN сервер доступен:

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

# Проверка логов TURN
lxc exec BBB-CONT22-1 -- tail -f /var/log/turnserver/turnserver.log

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

1. Порты TURN на роутере

Убедитесь, что на роутере проброшены порты:
- 3478 (UDP/TCP) - для TURN протокола
- 32769-65535 (UDP) - для relay трафика (если настроено)

2. Конфигурация TURN сервера

Проверьте конфигурацию /etc/turnserver.conf:

lxc exec BBB-CONT22-1 -- cat /etc/turnserver.conf | grep -E "listening-ip|external-ip|realm|static-auth-secret"

Должно быть:
- listening-ip=0.0.0.0 или listening-ip=10.218.14.37
- external-ip=89.179.242.240
- realm=school.cdto.life
- static-auth-secret=8e3f6c01a3bbac78ad826d04c03cd4ab3de2fba747943005af2427e7865a09fa

3. Проверка доступности TURN

Проверьте, что TURN сервер доступен извне:

# С внешнего сервера или через онлайн-сервис
turnutils_stunclient school.cdto.life:3478

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

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

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

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

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

1. Проверка ICE candidates

В браузере откройте about:webrtc и проверьте:
- Есть ли TURN candidates
- Какой тип соединения используется (host, srflx, relay)
- Есть ли ошибки ICE

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

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

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

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

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

Убедитесь, что файрвол не блокирует трафик:

sudo ufw status
sudo iptables -L -n | grep -E "3478|24577|32768"

Статус

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

Примечание: После настройки TURN сервера клиенты должны автоматически получать TURN сервер в ICE candidates и использовать его для обхода NAT. Это должно решить проблему ICE 1010.