Привет, хабр.....
Если не читали предыдущие статьи - кратко: в РФ сейчас работают белые списки ( а мы не знали ) подробнее тут, ТСПУ работает в режиме drop-all, пропуская только одобренные IP + SNI.
Обходилось это легко - покупаешь VPS у VK/Timeweb/Яндекса, получаешь подсеть которая есть в белых списках, поднимаешь VLESS.
Только вот скоро это перестанет работать.
VK и Яндекс начали детектить инстансы используемые как прокси - предположительно смотрят на паттерны трафика и так далее, MAX вообще давно палит IP VPS через HOST_REACHABILITY - подробнее тут. Мне самому забанили VPS за перебор IP в Yandex Cloud.
И в конце концов поставщики VPS просто уберут смертным доступ к пулам из вайтлиста - тогда вся схема умрёт окончательно.
Так что... способы обойти белые списки через попадание в белые списки - скоро станут невозможными.
Так что делать? Плакать и смириться с чебурнетом ? Ну, как бы да и как бы нет, нам поможет BB22.
Не буду томить. Мы будем эксплуатировать готовые сервисы которые уже в белых списках. А точнее - звонки.
Сначало заранее : почему не Mail/API? Потому что звонки дают огромную пропускную способность. Не только текст а видео и аудио. А SMTP легко DPI-шится: если трафик последователен а сообщения похожи на кашу - блок.
То есть мы будем гнать данные через WebRTC SFU.
выбор сервиса
Для публичной демо сцены выбрали Яндекс Телемост
У Телемоста два важных плюса:
Уже в белых списках (проверено)

пруф. работы телемоста в РФ Не требует регистрации со стороны участника - войти в аккаунт должен только инициатор, второй участник может остаться гостем.
архитектура
Телемост использует SFU, не P2P. Трафик идёт:
Ваш клиент -> Сервер Яндекса (в белом списке) -> Ваш VPS (второй гость)
У Телемоста есть DataChannel - SCTP over DTLS, порт 5000. По SDP максимальный размер - 1023MB. Реальный лимит сервера - 8KB. Сообщения больше 8KB молча дропаются. Яндекс если вы это читаете то фиксите, не профессионально делаете вещи блин. Решается чанкингом на уровне приложения.
Есть и видеоканал - через него можно гнать данные QR-кодами. медленнее, но fallback если DC закроют.
Аудиоканал - не подходит. Opus с DTX, FEC и шумоподавлением убивает любые не-голосовые данные на уровне кодека. Потеря энергии сигнала >99%. Забудьте.
Еще проект исползует MAX но публично этот код не выкладывали, причина будет описана дальше.
реализация BareBone2022: OlcRTC
Проект называется OlcRTC в честь OpenLibreCommunity
Основаной проект написан на GO, PoC на PY
В репо есть несколько PoC файлов:
code/poc.py - Базовый proof of concept. Два гостя подключаются к одной конференции и обмениваются сообщениями через DC
:P TEST PASSED - OlcRTC PoC works!
code/vcsend.py - Передача данных через видеопоток. Данные кодируются в QR-коды, передаются в видеотреке с 1 FPS, декодируются на приёмнике через pyzbar + OpenCV
-> QR COMPLETE: 892 bytes :P got 892 bytes
code/limits.py - Проверка всех лимитов. Запускаете, получаете реальные цифры по своему соединению, создан для проверки начали ли Telemost вводить ограничения
:P 1KB: SUCCESS :P 6KB: SUCCESS :P 8KB: SUCCESS X 10KB: Never reached server :P Max working size: 8,192 bytes (8KB)
code/dcsend.py - HTTP прокси через DataChannel. Клиент шлёт URL, сервер скачивает файл и отдаёт чанками по 8KB с заголовками (transfer_id + sequence)
code/info.py - Полная информация о конференции: участники, кодеки, ICE серверы, SDP
code/flood.py - Не запускайте, флуд участников

И еще пара не нужных вам файлов, кому интересно сам чекнет
Реальные цифры скорости Yandex Telemost
latency (RTT):
100 байт: ~57ms
1KB: ~70ms
4KB: ~73ms
8KB: ~130ms
throughput:
64KB: 2.1s (~244 Kbps)
128KB: 2.2s (~477 Kbps)
256KB: 2.2s (~973 Kbps)
При стриминге большого файла (42MB APK OlcNG):
:P Streamed 44628865 bytes in 7.00s (44.61 Mbps)
Да, 44 Mbps. DC реально быстрый

Тянет даже 4к ютуб видео
Установка Golang версии OlcRTC, требуется любой VPS
На сервере:

sudo -v bash <(curl -sL zarazaex.xyz/srv.sh)
Вводите ID конференции (создайте свою, не используйте мою )
Получаете ключ шифрования

На клиенте:

sudo -v bash <(curl -sL zarazaex.xyz/cnc.sh)
Вводите ID, ключ, порт (по умолчанию 8809) - получаете локальный SOCKS5h прокси
Проверка:
all_proxy=socks5h://localhost:8809 curl -fsSL zarazaex.xyz
Известные проблемы и пометки которые скоро будут пофикшены
Трафик не маскируется под реальные сообщения - нет искусственного замедления пакетов в стиле NYM. Паттерны отличаются от живого звонка, к сожалению реализация такого заняла бы слишком много времени, в общем, ждите
Нет инициализации звонка изнутри - конференцию надо создавать руками заранее
Используется кастомный мультиплексор вместо готовых реализаций
Не шлёт фоновые XHR запросы телеметрии как оригинальный клиент Телемоста
Яндекс может убрать DC или ограничить скорость - тогда переходим на видеоканал
Реализация для MAX существует, но не опубликована по понятным причинам
Яндекс может запретить созваниваться Русским с Американцами
Яндекс может запретить звонки без подтверждения номера
РКН может исключить телемост из бс
Реализация BB22 тоесть OlcRTC существует только на Linux
Используются имена "srv" которые можно тупо ввести в блеклист
По факту этот метод вечный и не блокируемый, проблема в реализации BareBone2022
Придется очень много притворятся легит трафиком, эт сложно но возможно
Но самое главное - этот способ теоретически не заблокировать не отключив MAX / Telemost
Итого
Идея работает. Данные идут через серверы Яндекса и в будущем макса, они в белом списке. Скорость достаточная.
Яндекс рано или поздно закроет DC - именно поэтому параллельно готовим поддерджку VC и версию для MAX. Когда чебурнет настанет по-настоящему - будем готовы.
Проект под WTFPL. PR не принимаем. issue нету, хотите свою реализацию - делайте с нуля, лучше не форкайте.
Участники: @zarazaex, @zowue и все причастные из openlibrecommunity.
Гитхаб: zarazaex69/olcRTC
По проблемам: zarazaex@tuta.io
UPD: Вот недавно ТГ канал создал, там способы ускорения и обходы белых списков есть, кто хочет может подписатся t.me/openlibrecommunity а еще там самые крутые новости и ваще лучший канал во всем телеграме подпишитесь там еще бесплатно все и анонсы статей будут кароче круто ваще просто.
UPD: собственно OlcRTC все еще в этапе разработки, за пару месяцев все вышеописанные проблемы я уже решу.
UPD: и проект создавался не для скорости а для минимального стриминга аудио, я не ожидал что оно будет грузить 8к в таких плачевных обстоятельствах белых спиков.
