Доброго времени суток.
В работе наших некоммерческих проектов мы используем голосовую систему, написанную на основе открытого медиа-сервера mediasoup, использующее в свою очередь WebRTC и SFU-подход к подключению пиров, используем только для голосового чата. Как и положено, имеем self-hosted TURN сервера (используем coturn) для перенаправления траффика в случае проблем с прямым подключением.
Данное решение мы используем с 2018 года и все работало более, чем отлично. Массовые тревожные звонки о сбоях в работе начали получать 13 марта. Впервые человек пожаловался с похожей проблемой 9 марта. Причем как с нашего проекта, так и с проектов наших партнеров. У большого процента людей начали возникать перебои в связи: они могли слышать других клиентов, но их при этом никто не слышал, такое ощущение, что траффик даже не доходил до наших серверов. В любой нормальной ситуации, я бы подумал, что это проблема с оборудованием или какие-то атаки, но после тестирования с несколькими “жертвами” данной проблемы, мы обнаружили, что использование VPN в 100% случаях решает эти проблемы. Попросив массово использовать какие-либо VPN сервисы для дальнешей диагностики, тенденция подтвердилась - наличие VPN подключения в 100% случаях решает проблемы.
К сожалению, просить людей использовать VPN не очень удобное решение. Проведя небольшой анализ, мы обнаружили, что, скорее всего, проблемы идут с траффиком где-то на уровне TURN сервера, который должен через себя прогонять весь траффик пиров, которые не смогли подключиться напрямую (без NAT’а). К сожалению, найти конкретную причину мы так и не смогли.
Немного дополнительной информации, возможно бесполезной: медиа-сервера и TURN-сервера при этом хостились в разных датацентрах и в том числе в разных странах (Selectel, OVH, DataPro). Пользователи испытывали проблемы по всей России. Никаких обходных костылей не использовалось - прямые подключения без проксей. Сертификаты для WSS подключений к медиа-серверу генерировались через Let’s Encrypt. Доменные адреса в регионе .ru
. Мы так же обнаружили что как минимум у нескольких людей с подобной проблемой наш TURN сервер даже не определялся через Trickle ICE (возвращал “not reachable?” при полной работоспособности). Как временное решение попробовали голосовое решение на основе Mumble - работало отлично, т.к. по всей видимости проблемы именно с WebRTC.
Есть какие-то идеи как это можно анализировать и потенциально решить? По моему субъективно-непрофессиональному мнению все признаки на какую-то очень кривую блокировку. Буду рад услышать мнения и предложения.