Universal Cross-Platform Traffic Orchestrator & Declarative Policy Routing Engine
«One Rule. Every Platform. Zero Overhead.»
О проекте • Возможности • Архитектура • Установка • Платформы • Структура • Безопасность • Интеграции • Документация • English
Note
OpenStream Engine — это открытый исследовательский проект и высокопроизводительный кроссплатформенный движок декларативной маршрутизации сетевого трафика (Policy-Based Routing).
Проект исследует методы интеллектуальной гранулярной маршрутизации медиасервисов (Twitch, YouTube, Discord, Crunchyroll и др.), локальной десинхронизации DPI (Anti-DPI) и выборочного туннелирования без расшифровки TLS (No MITM) и без установки сторонних корневых CA-сертификатов на клиентские устройства.
Большинство существующих сетевых утилит делятся на две крайности: либо тяжелые 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-каналов.
- ⏩ Действие «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/::).
- Поддержка протоколов нового поколения: 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) и автопереключение на самый быстрый узел.
- Устранение DNS-дедлоков: Выделенный пул статических Bootstrap-резолверов (
77.88.8.8,1.1.1.1) работает напрямую через WAN (detour: direct), гарантируя мгновенный старт DoH-серверов. - Каскадный Failover: Автоматическое переключение на резервные резолверы при сбоях или деградации основного DNS.
- Блокировка QUIC (UDP 443):
udp dport 443 reject— форсирует TCP TLS 1.3 в браузерах, обеспечивая 100% эффективность десинхронизации Zapret2 для YouTube 4K. - Блокировка прямого DoH (TCP 853): Предотвращает неконтролируемые утечки DNS в обход маршрутизации роутера.
- Защита NTP (UDP 123): Прямой пропуск системного времени без искажений.
- Раздельные обновления: Независимое обновление каждого компонента в 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).
- Экспресс-проверка работоспособности nftables, dnsmasq, сокетов sing-box, очередей Zapret2 и отсутствия утечек DNS прямо в веб-интерфейсе.
- Разработан строго по принципам 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)
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 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
- 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Мы приветствуем вклад сообщества!
- Ознакомьтесь с Руководством контрибьютора.
- Ознакомьтесь с Политикой безопасности.
- Посетите Кодекс поведения.
- История версий и изменений доступна в CHANGELOG.md.
Архитектура 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.