привет.....
Если не читали предыдущие статьи - кратко: в РФ сейчас работают белые списки ( а мы не знали ) подробнее тут, ТСПУ работает в режиме drop-all, пропуская только одобренные IP + SNI
Обходилось это легко - покупаешь у VK/Timeweb/Яндекса, получаешь подсеть которая есть в белых списках, поднимаешь VLESS
Только вот скоро это перестанет работать
VK и Яндекс начали детектить инстансы используемые как прокси - предположительно смотрят на паттерны трафика и так далее, MAX вообще давно палит IP
И в конце концов поставщики
Так что... способы обойти белые списки через попадание в белые списки - скоро станут невозможными
Так что делать? Плакать и смириться с чебурнетом ? Ну, как бы да и как бы нет, нам поможет 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к в таких плачевных обстоятельствах белых спиков
Автор: zarazaexe
