Полное исправление ошибок ICE 1107 и 1020 в BigBlueButton
Дата: 2026-01-10
Проблема: Видео и звук не работают, ошибки ICE 1107 (сбой подключения) и 1020 (медиа не может достичь сервера)
Домен: school.cdto.life
Выявленная проблема
В логах видно сообщение "stopping transport before media established" - медиа-транспорт останавливается до установления соединения. Это происходит потому, что:
- ICE candidates только типа "host" - нет TURN/relay candidates
- Клиенты не могут установить прямое соединение через NAT
- TURN сервер не используется для обхода NAT
- Медиа-порты не пробрасываются правильно в контейнер
Анализ логов
В логах 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.240external_sip_ip: 89.179.242.240ext-rtp-ip: использует переменную$${external_rtp_ip}ext-sip-ip: использует переменную$${external_sip_ip}
mediasoup (bbb-webrtc-sfu)
webrtc.announcedIp: 89.179.242.240webrtc.listenIp: 0.0.0.0plainRtp.announcedIp: 89.179.242.240plainRtp.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.240relay-ip: 10.218.14.37listening-port: 3478 (UDP/TCP)min-port: 32769,max-port: 65535realm: 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
- Медиа-транспорт останавливается до установления - "stopping transport before media established"
- Клиенты не могут достичь медиа-портов напрямую
-
TURN сервер не генерирует relay candidates
-
Только host candidates в логах - нет TURN/relay candidates
- TURN сервер настроен, но не используется клиентами
-
Возможно, клиенты не получают TURN credentials
-
NAT traversal проблемы - клиенты за NAT не могут установить прямое соединение
-
TURN сервер должен использоваться для обхода NAT
-
Порты не пробрасываются правильно - медиа-порты недоступны извне
- Правила 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.
Возможные решения:
- Проверить, что клиенты получают TURN credentials
- Откройте консоль браузера (F12)
- Проверьте SDP на наличие TURN серверов
-
Проверьте, есть ли relay candidates
-
Проверить доступность TURN сервера извне
bash # С внешнего сервера или онлайн-сервиса turnutils_stunclient school.cdto.life:3478 -
Проверить порты TURN relay на роутере
-
Порты 32769-65535 (UDP) должны быть проброшены, если клиенты используют TURN
-
Проверить логи 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
Следующие шаги
- ✅ Проверена конфигурация FreeSWITCH
- ✅ Проверена конфигурация mediasoup
- ✅ Проверена конфигурация TURN сервера
- ✅ Настроен проброс портов на хосте
- ✅ Сервисы перезапущены
- ⏳ Проверка работы TURN сервера - убедитесь, что TURN генерирует relay candidates
- ⏳ Тестирование - попробуйте подключиться к конференции и проверить работу видео/аудио
- ⏳ Проверка логов - следите за логами на наличие 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
- ⏳ Требуется тестирование подключения