Skip to content

Latest commit

 

History

23 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenStream Engine 🧪

Universal Cross-Platform Traffic Orchestrator & Declarative Policy Routing Engine
«One Rule. Every Platform. Zero Overhead.»

CI Status Package release License: MIT Rust OpenWrt 24.10

О проекте • Возможности • Архитектура • Установка • Платформы • Структура • Безопасность • Интеграции • Документация • English


Note

🧪 Исследовательский статус (Experimental Beta / Research Project)

OpenStream Engine — это открытый исследовательский проект и высокопроизводительный кроссплатформенный движок декларативной маршрутизации сетевого трафика (Policy-Based Routing).
Проект исследует методы интеллектуальной гранулярной маршрутизации медиасервисов (Twitch, YouTube, Discord, Crunchyroll и др.), локальной десинхронизации DPI (Anti-DPI) и выборочного туннелирования без расшифровки TLS (No MITM) и без установки сторонних корневых CA-сертификатов на клиентские устройства.


🌟 Философия 2.1: «One Rule. Every Platform. Zero Overhead.»

Большинство существующих сетевых утилит делятся на две крайности: либо тяжелые VPN-клиенты, заворачивающие весь трафик в один туннель и создающие задержки, либо узкоспециализированные скрипты под конкретную операционную систему.

OpenStream Engine 2.1 предлагает унифицированный подход:

  • Единый формат правил (.osrule.yaml): одно и то же правило сервиса детерминированно исполняется на OpenWrt-роутерах, iOS, Android, macOS, Windows и Linux.
  • Сверхлегкое нативное Rust-ядро (openstream-core): прямое сопоставление FQDN через Reverse Suffix Trie ($O(k)$, где $k$ — число меток домена) и поиск подсетей по Longest Prefix Match. Аллокаций в hot-path нет, сборщик мусора отсутствует (Zero GC) — это даёт предсказуемый отклик и совместимость с жестким лимитом Apple NetworkExtension Jetsam (15–50 МБ). Замеренный VmRSS idle процесса streamproxyd — ≈ 2.8 МБ на GL-MT6000 (методика).
  • Многоуровневые стратегии выхода: в рамках одного правила домен может направляться по оптимальному сетевому пути без перегрузки VPN-каналов.

🚀 Ключевые возможности

1. Интеллектуальная гибридная маршрутизация

  • ⏩ Действие «Bypass» (Прямое исключение в WAN): Приоритетное правило ip daddr @bypass_targets return в самом верху цепочки mangle_prerouting исключает выбранные сервисы (банки, Госуслуги, рабочая почта) из Zapret2 и VPN до их обработки.
  • 🚀 Интеграция с Zapret2 (nfqws2): Локальная десинхронизация TCP/UDP пакетов (обход замедления YouTube 4K, Discord Voice) через NFQUEUE 1088 без снижения скорости провайдера. Поддержка готовых пресетов и произвольных пользовательских флагов (custom_args).
  • 🌐 Туннелирование sing-box: Направление заблокированных ресурсов в зашифрованные туннели с привязкой к TPROXY :10888.
  • 🛡️ Локальный StreamProxy (:8888): Очистка потоков HLS/DASH от серверной рекламы (SSAI) без буферизации.
  • ⛔ DNS Sinkhole: Мгновенная блокировка трекеров и рекламных сетей на уровне DNS (0.0.0.0 / ::).

2. Универсальный менеджер подписок и серверов

  • Поддержка протоколов нового поколения: VLESS (Reality, xHTTP, Vision), Hysteria 2 / hy2 (QUIC UDP), TUIC v5 (BBR), Shadowsocks 2022, Trojan, VMess.
  • Импорт подписок: Прямой парсинг ссылок из буфера обмена, подписок по URL https://..., Base64-списков и конфигураций Clash / Mihomo YAML (proxies:).
  • ⚡ URLTest Latency Selector: Автоматический фоновый замер задержки серверов (https://cp.cloudflare.com/generate_204) и автопереключение на самый быстрый узел.

3. Отказоустойчивый Multi-DNS Failover и Bootstrap DNS

  • Устранение DNS-дедлоков: Выделенный пул статических Bootstrap-резолверов (77.88.8.8, 1.1.1.1) работает напрямую через WAN (detour: direct), гарантируя мгновенный старт DoH-серверов.
  • Каскадный Failover: Автоматическое переключение на резервные резолверы при сбоях или деградации основного DNS.

4. Сетевая безопасность и фильтрация в nftables

  • Блокировка QUIC (UDP 443): udp dport 443 reject — форсирует TCP TLS 1.3 в браузерах, обеспечивая 100% эффективность десинхронизации Zapret2 для YouTube 4K.
  • Блокировка прямого DoH (TCP 853): Предотвращает неконтролируемые утечки DNS в обход маршрутизации роутера.
  • Защита NTP (UDP 123): Прямой пропуск системного времени без искажений.

5. Раздельные обновления и фоновое автообновление (Cron)

  • Раздельные обновления: Независимое обновление каждого компонента в 1 клик (ядро OSE, LuCI, sing-box, zapret2, каталог правил).
  • 4 сборки sing-box: Stable, Extended (xHTTP), Tiny (<8 МБ Flash / <15 МБ RAM), Extended Compress (UPX сжатие для экономии 65% Flash).
  • Cron Автообновление: Фоновая синхронизация по расписанию с проверкой контрольных сумм SHA-256 и безопасным откатом (Safe Fallback).

6. Самодиагностика в 1 клик (Self-Diagnostics)

  • Экспресс-проверка работоспособности nftables, dnsmasq, сокетов sing-box, очередей Zapret2 и отсутствия утечек DNS прямо в веб-интерфейсе.

7. Современный LuCI Web UI (Mobile First)

  • Разработан строго по принципам Mobile First (без архаичных HTML-таблиц).
  • Адаптивный дизайн OLED Dark (#020617, #0b1329) с карточным представлением, живыми графиками и микроанимациями.

📐 Архитектура системы

                     ┌──────────────────────────────────────────────┐
                     │    Декларативные манифесты (*.osrule.yaml)   │
                     └──────────────────────┬───────────────────────┘
                                            │
                     ┌──────────────────────▼───────────────────────┐
                     │   openstream-core (Zero-Alloc Trie, <2 MB)   │
                     └──────┬───────────────┬───────────────┬───────┘
                            │               │               │
             ┌──────────────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐
             │   OpenWrt Router    │ │   Desktop   │ │   Mobile    │
             │ (nftables + dnsmasq)│ │(Windows/Lin)│ │ (iOS/Android)│
             └──────┬──────────────┘ └──────┬──────┘ └──────┬──────┘
                    │                       │               │
     ┌──────────────┴────────┬──────────────┴────────┬──────┴────────┐
     ▼                       ▼                       ▼               ▼
[ ⏩ Bypass ]         [ 🚀 Zapret2 ]          [ 🌐 sing-box ]  [ ⛔ Block ]
 Direct WAN           NFQUEUE 1088            urltest Selector  0.0.0.0
 (Исключения)         (DPI Desync/Custom)     (Multi-DNS/Hy2)  (Sinkhole)

📋 Пример декларативного правила (.osrule.yaml)

schema_version: "2.1"
id: "org.openstream.rules.twitch"
name: "Twitch Live Optimizer"
version: "2.1.0"

matches:
  - group: "auth_token"
    domains: ["gql.twitch.tv"]
    strategy: "adfree_egress" # Выход через регион без рекламы (UA/AL/KZ)

  - group: "master_playlist"
    domains: ["usher.ttvnw.net"]
    strategy: "quality_unlock" # SmartDNS / EU VPN для доступа к 1080p60/1440p

  - group: "video_cdn"
    domains: ["*.live-video.net", "*.ttvnw.net"]
    action: "direct" # Прямой канал от провайдера на максимальной скорости

  - group: "tracker_ads"
    domains: ["edge.ads.twitch.tv"]
    action: "block" # DNS Sinkhole (0.0.0.0)

strategies:
  adfree_egress:
    preference: ["proxy:al_clean", "proxy:ua_clean", "direct"]
  quality_unlock:
    preference: ["smartdns:eu", "proxy:de_fast", "direct"]

📱 Кроссплатформенная поддержка

Платформа Стек реализации Механизм перехвата Статус
OpenWrt 24.10 / 23.05 Rust + ucode RPC + LuCI JS nftables + dnsmasq + NFQUEUE Стабильный релиз (Готовые IPK)
Linux Desktop / Server Rust (openstream-backend-desktop) TUN (tun-rs) / systemd Поддерживается
Windows 10 / 11 Rust + Wintun driver TUN adapter Поддерживается
Android 10+ Kotlin + NDK + JNI + Compose M3 Android VpnService Реализовано (platforms/android)
Apple iOS 17+ / macOS Swift 6 Strict Concurrency + UniFFI NEPacketTunnelProvider Реализовано (platforms/ios)

⚡ Быстрый старт: Установка на OpenWrt

Требования

Пакет рассчитан на OpenWrt 24.10 / 23.05, архитектура aarch64 (Cortex-A53).

Обязательные зависимости устанавливаются автоматически через Depends, но важно понимать, что именно они дают:

Пакет Зачем нужен
dnsmasq-full Только эта сборка умеет nftset=. Базовый dnsmasq её не поддерживает — без него не наполнится ни один сет адресов.
kmod-nft-queue NFQUEUE 1088 — направление трафика в Zapret2 (nfqws2).
kmod-nft-tproxy Statement tproxy — перехват в sing-box.
ip-full ip rule / ip route для policy routing по метке (busybox ip не гарантирует поддержку rule).
ucode, ucode-mod-fs, ucode-mod-uci Исполнение рендерера openstream-render.uc.

Установка

Готовые пакеты лежат в каталоге dist/openwrt-24.10-a53/ipk/. Сначала скопируйте их на роутер, затем установите:

# 1. Скопируйте пакеты на роутер (выполняется на локальной машине)
scp dist/openwrt-24.10-a53/ipk/openstream-engine_*.ipk \
    dist/openwrt-24.10-a53/ipk/luci-app-openstream_*.ipk \
    dist/openwrt-24.10-a53/ipk/luci-i18n-openstream-ru_*.ipk \
    root@192.168.1.1:/tmp/

# 2. Проверьте целостность (файл лежит рядом с пакетами)
ssh root@192.168.1.1 'cd /tmp && sha256sum -c /dev/stdin' \
    < dist/openwrt-24.10-a53/SHA256SUMS

# 3. На роутере: обновите индексы (нужны для зависимостей) и установите
opkg update
opkg install /tmp/openstream-engine_*.ipk
opkg install /tmp/luci-app-openstream_*.ipk
opkg install /tmp/luci-i18n-openstream-ru_*.ipk

# 4. Перезапустите RPC и веб-сервер LuCI
/etc/init.d/rpcd restart
/etc/init.d/uhttpd restart

Указывайте полный путь (/tmp/... или ./пакет.ipk). opkg install имя.ipk без пути ищет пакет в удалённых фидах и завершится ошибкой.

Проверка работоспособности

# Сервис запущен и слушает
/etc/init.d/streamproxyd status
wget -qO- http://127.0.0.1:18080/api/status

# Правила применились: таблица существует и сеты наполнены
nft list table inet openstream | head -40
nft -j list table inet openstream | grep -c '"elem"'

# Отобраны ли ваши правила
ls -1 /etc/openstream/rules/

# Если правила не применились — смотрите журнал
logread -e openstream

При ошибке синтаксиса сгенерированного набора в журнал попадёт строка nft check FAILED с указанием причины, а текущий рабочий набор не будет изменён (перед применением выполняется nft -c).

После установки откройте веб-интерфейс: Службы → OpenStream Engine.


📂 Структура репозитория

├── crates/
│   ├── openstream-rule/          # AST парсер, схема .osrule.yaml, Ed25519 подписи
│   ├── openstream-core/          # Reverse Suffix Trie, LPM IP-дерево, PolicyEngine
│   ├── openstream-backend-openwrt/  # Генераторы nftables, dnsmasq, Zapret2, sing-box
│   ├── openstream-backend-desktop/  # TUN сетевой адаптер для настольных ОС
│   ├── openstream-ffi/           # UniFFI Swift-биндинги для iOS и macOS
│   ├── openstream-jni/           # NDK JNI-мост для Android
│   ├── openstream-cli/           # CLI: линтер правил, keygen/sign/verify, индексатор каталога
│   ├── streamproxyd/             # Системный демон (HLS/DASH прокси, компиляция правил)
│   └── ose-*/                    # Слой обработки медиа: ose-proxy, ose-manifest, ose-dash,
│                                 #   ose-plugin-{twitch,hls,dash}, ose-detector, ose-cache,
│                                 #   ose-rules, ose-api, ose-config, ose-observe и др.
├── luci-app-openstream/          # LuCI Web UI (ucode RPC демон + LuCI JS OLED Dark)
│   └── root/
│       ├── usr/share/rpcd/ucode/ # Серверный RPC плагин (openstream.uc)
│       └── www/luci-static/      # routing.js, servers.js, monitor.js, services.js, updates.js
├── platforms/
│   ├── android/                  # Android приложение (VpnService + Jetpack Compose M3)
│   └── ios/                      # iOS приложение (NetworkExtension + SwiftUI)
├── package/openwrt/              # Метаданные пакета и файлы для установки на роутер
├── rules/                        # Каталог декларативных правил (streaming/, privacy/)
├── dist/                         # Готовые скомпилированные IPK пакеты для OpenWrt
├── docs/                         # Архитектурная документация, ADR, CHANGELOG, аудиты
├── research/                     # Исследовательские материалы и референсные реализации
└── scripts/                      # Упаковка IPK, проверка nftables и ucode

🛡️ Безопасность (Security by Design)

  • Zero MITM: Движок принципиально не расшифровывает TLS-трафик и не требует установки сторонних CA-сертификатов на клиентские устройства. Все SSL/TLS соединения проверяются напрямую конечными серверами.
  • SecOps защита системных зон: На уровне ядра запрещен перехват критических зон (*.apple.com, windowsupdate.com, банковские и платежные домены) без явного подтверждения администратором (allow_sensitive: true).
  • Подписание правил: Подпись и проверка манифестов Ed25519 реализованы в CLI (openstream-cli keygen|sign|verify). Проверка подписи при загрузке правил в рантайме пока не выполняется — не рассматривайте её как действующий контроль целостности.
  • Обработка ввода в RPC: Параметры RPC валидируются по allowlist, внешние команды формируются из массива аргументов с экранированием (без конкатенации в строку shell). В версиях до 0.4.2-r36 в методах импорта подписок и проверки задержки присутствовали уязвимости выполнения команд от root — см. CHANGELOG.
  • Юридическая ответственность: Инструмент предназначен для управления собственным сетевым трафиком на собственном оборудовании. Использование может регулироваться законодательством вашей юрисдикции и условиями вашего провайдера — ответственность за применение лежит на пользователе.

📚 Документация

Документ Содержание
docs/INDEX.md Полный индекс документации
docs/ARCHITECTURE.md Архитектура: слои, матрица действий, кроссплатформенная модель
docs/POLICY_ROUTING_ARCHITECTURE.md Детальная спецификация маршрутизации: nftables, dnsmasq, sing-box, Zapret2
docs/BUILD_OPENWRT.md Сборка пакетов .ipk и .apk из исходников
docs/PERFORMANCE.md Замеры потребления памяти и размера артефактов
docs/COEXISTENCE.md Сосуществование с Podkop / Forkop / Zapret / PassWall
docs/CHANGELOG.md История изменений
docs/ROADMAP.md План развития и исследовательские задачи
docs/adr/ Architecture Decision Records

Разработка

cargo test --workspace                 # тесты
cargo clippy --workspace -- -D warnings # линтер (как в CI)
cargo build -p streamproxyd            # демон

# Проверка генерируемых конфигураций реальным парсером (требуется nft)
scripts/check-nft-syntax.sh
# Проверка ucode-скриптов компиляцией И исполнением (требуется ucode)
scripts/check-ucode.sh

🤝 Участие в разработке

Мы приветствуем вклад сообщества!


🔗 Интеграции и используемые компоненты

Архитектура OpenStream Engine построена на оркестрации и глубокой интеграции проверенных решений с открытым исходным кодом:

  • bol-van/zapret2 (автор @bol-van):
    Инструмент десинхронизации пакетов на уровне L4. В OpenStream интегрирован демон nfqws2 через выделенную очередь NFQUEUE 1088 со встроенными пресетами для YouTube 4K, Discord Voice и поддержкой произвольных пользовательских аргументов.
  • SagerNet/sing-box (проект @SagerNet):
    Универсальная кроссплатформенная прокси-платформа. Используется в качестве исходящего туннельного движка (TPROXY :10888), обеспечивая поддержку протоколов VLESS Reality/xHTTP, Hysteria 2, TUIC v5, Shadowsocks 2022, а также селектора задержки urltest и отказоустойчивого Multi-DNS.
  • 1andrevich/zapret2-openwrt:
    Официальный фид и сборки nfqws2 для экосистемы OpenWrt.
  • tun-rs:
    Кроссплатформенный асинхронный сетевой драйвер TUN для системного перехвата пакетов в настольных ОС (Windows, Linux, macOS).
  • mozilla/uniffi-rs:
    Инструментарий генерации высокопроизводительных FFI-биндингов между Rust-ядром и нативными клиентскими стеками (Swift 6 Strict Concurrency для iOS и JNI/Kotlin для Android).

📄 Лицензия

Проект распространяется под свободной лицензией MIT © 2026 Denis Ershov.

About

🧪 Кроссплатформенный оркестратор сетевого трафика и декларативных политик маршрутизации (OpenWrt, Desktop, Android, iOS). Обход DPI (Zapret2), sing-box туннелирование, Multi-DNS Failover и умный сплит стриминга без MITM и без сторонних сертификатов на клиентах.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages