Зачем нужны серверы STUN и TURN
На WebRTC работают видеозвонки, демонстрация экрана и передача файлов между браузерами. Прежде чем два устройства смогут общаться напрямую, каждому нужно знать, по какому адресу доступно другое. Однако большинство устройств находятся за домашним роутером или корпоративным брандмауэром и используют частные адреса, преобразуемые через NAT. Эту задачу решают серверы STUN и TURN:
- STUN сообщает устройству, как оно выглядит из интернета: его публичный IP-адрес и порт. С этой информацией два узла часто могут соединиться напрямую.
- TURN работает как ретранслятор, когда прямое соединение невозможно, например за симметричным NAT, строгими брандмауэрами или в сетях, где разрешён только TCP.
Как провести тест
- Введите URL сервера с префиксом stun:, turn: или turns: (например, stun:server.example.com:3478 или turn:server.example.com:3478?transport=tcp).
- Для серверов TURN укажите имя пользователя и учётные данные. Если вы используете временные учётные данные, убедитесь, что срок их действия не истёк.
- При необходимости добавьте другие серверы и запустите тест. Браузер соберёт ICE-кандидаты и выведет каждый с указанием типа, адреса, протокола и времени получения.
Если у вас нет собственного сервера, воспользуйтесь проверкой наших серверов, чтобы увидеть, как выглядит рабочий результат.
Типы кандидатов
Каждая строка результата — это ICE-кандидат. Его значение зависит от типа:
- host: собственный локальный адрес устройства. Современные браузеры ради конфиденциальности скрывают его за случайным именем .local.
- srflx: публичный адрес, сообщённый сервером STUN. Если он есть, STUN работает.
- relay: адрес ретрансляции, выделенный сервером TURN. Если он есть, TURN и аутентификация работают.
- prflx: адрес, обнаруженный во время проверок связности; в одностороннем тесте встречается редко.
Столбец времени показывает, через сколько миллисекунд после начала пришёл каждый кандидат. Это даёт представление об удалённости и загрузке сервера; время в несколько сотен миллисекунд может заметно замедлить установку звонка.
Частые проблемы
- Нет кандидата relay: неверное имя пользователя или пароль, несовпадающий static-auth-secret на сервере или порт TURN, заблокированный брандмауэром.
- Работает только по UDP: для пользователей в сетях с ограничениями добавьте ?transport=tcp или turns: (TLS) на порту 443.
- turns: не работает, а turn: работает: TLS-сертификат может быть недействительным, просроченным или не соответствовать имени хоста.
- Неожиданный адрес srflx: при CGNAT или VPN публичный адрес принадлежит вашему провайдеру или VPN-сервису.
Тест полностью выполняется в вашем браузере; введённые учётные данные используются только браузером для подключения к указанному серверу. Чтобы узнать свой публичный IP и статус утечки WebRTC, откройте страницу «Какой у меня IP». Чтобы измерить реальную потерю пакетов через канал данных WebRTC, попробуйте тест потери пакетов, а базовую задержку проверьте тестом пинга, прежде чем настраивать качество звонков в своём приложении.