Files
NeoTachyon/docs/knowledge-base/04_DPI_BYPASS_ENGINES.md
T

137 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 04. Движки обхода DPI и десинхронизации пакетов
Tachyon интегрирует три независимых локальных движка десинхронизации сетевых пакетов, которые функционируют непосредственно на оборудовании роутера без необходимости использования внешнего VPS или прокси-сервера (режим «Zero-VPS»).
---
## 1. Сравнительная матрица: Zapret v1 vs Zapret v2 vs ByeDPI
| Параметр | Zapret v1 (`nfqws`) | Zapret v2 (`nfqws2`) | ByeDPI (`ciadpi`) |
|---|---|---|---|
| **Исполняемый файл** | `/usr/bin/nfqws` | `/usr/bin/nfqws2` | `/usr/bin/ciadpi` |
| **Модель работы** | Перехват через Kernel NFQueue | Multi-Queue NFQueue с Lua | Локальный SOCKS5 / TProxy |
| **Целевые протоколы** | HTTP, TLS (ClientHello) | HTTP, TLS, QUIC, WireGuard, UDP | HTTP, TLS |
| **Методы фрагментации** | `split2`, `disorder`, `fake` | `multisplit`, `seqovl`, `wsize`, `fake` | `--split-pos`, `--disorder`, `--fake` |
| **Многоуровневые цепочки** | 1 стратегия на правило | Сложные составные цепочки | Составные аргументы SOCKS |
| **Нагрузка на CPU** | Минимальная (< 1%) | Низкая (< 2%) | Низкая (< 2%) |
| **Оптимально для** | Базового DPI, старых роутеров | YouTube 4K, Discord, ТСПУ | Не-root окружений, SOCKS-роутинга |
---
## 2. Принципы и техники десинхронизации пакетов
Системы глубокого анализа пакетов (DPI / ТСПУ) анализируют заголовки сетевых протоколов (такие как `SNI` в расширении TLS ClientHello или заголовок `Host` в HTTP) для блокировки или замедления трафика.
Десинхронизация обманывает конечный автомат DPI, заставляя его потерять контекст TCP-сессии или пропустить целевой заголовок, в то время как целевой сервер корректно собирает исходный поток данных.
```
Исходный поток: [TLS ClientHello с SNI] ──────────► (Блокируется ТСПУ / DPI)
Десинхронизация: [Fake-пакет с неверной суммой/TTL] ──► (DPI сбрасывает состояние)
[Фрагмент 1: Начало ClientHello] ───► (DPI не видит полный SNI)
[Фрагмент 2: Окончание данных] ─────► (Сервер собирает TCP-поток)
```
### 2.1. Основные стратегии обхода
1. **`split2` / `multisplit` (Многопозиционное разделение)**:
* Разрезает TCP-сегмент непосредственно внутри поля TLS SNI или заголовка HTTP Host. Оборудование DPI не выполняет глубокую реассемблинг-сборку мелких фрагментов, а стек TCP целевого сервера склеивает поток без потерь.
2. **`disorder` / `disorder2` (Изменение порядка доставки)**:
* Отправляет вторую часть пакета раньше первой с корректными TCP Sequence Numbers. DPI видит фрагменты не по порядку и пропускает инспекцию.
3. **`fake` / `fake_sni` (Внедрение фейковых пакетов)**:
* Отправляет поддельный пакет TLS ClientHello с намеренно заниженным TTL (Time To Live). DPI перехватывает поддельный пакет и считает соединение легитимным, после чего пакет угасает в сети, не доходя до целевого сервера.
4. **`seqovl` (Наложение порядковых номеров / Sequence Overlap)**:
* Посылает пакет с перекрывающимся диапазоном TCP Sequence. Стек TCP на сервере отбрасывает дублирующиеся байты, тогда как DPI парсит неверные данные и теряет контроль над сессией.
5. **`wsize` (Манипуляция размером окна TCP Window Size)**:
* Принудительно устанавливает размер TCP-окна в 1–2 байта, заставляя клиент слать данные микросегментами, что ломает эвристики DPI.
---
## 3. Конфигурация и управление в UCI
### 3.1. Пример настройки Zapret v2 (`/etc/config/tachyon`)
```ini
config provider 'zapret2'
option enabled '1'
option daemon_bin '/usr/bin/nfqws2'
option qnum '201'
option args_tcp '--dpi-desync=multisplit --dpi-desync-split-pos=1,midsld --dpi-desync-seqovl=1 --dpi-desync-fooling=badseq'
option args_udp '--dpi-desync=fake --dpi-desync-any-protocol=1 --dpi-desync-cutoff=d4'
config rule 'youtube_rule'
option enabled '1'
option name 'YouTube 4K Desync'
option action 'zapret2'
list domain_pattern 'googlevideo.com'
list domain_pattern 'youtube.com'
list domain_pattern 'ytimg.com'
list domain_pattern 'discord.gg'
list domain_pattern 'discord.com'
```
### 3.2. Пример настройки ByeDPI
```ini
config provider 'byedpi'
option enabled '1'
option daemon_bin '/usr/bin/ciadpi'
option listen_ip '127.0.0.1'
option listen_port '1080'
option args '--split-pos 1 --disorder 1 --fake -1 --ttl 8'
```
---
## 4. Мультиплексирование NFQueue и изоляция очередей
* Подсистема ядра Linux `nfnetlink_queue` требует уникальный номер очереди (`qnum`) для каждого запущенного процесса демона.
* Модуль `providers/nfqueue/runtime.uc` в Tachyon динамически управляет выделением очередей:
* Базовая очередь Zapret v1: `200`
* Базовая очередь Zapret v2: `201`
* Очередь Strategy Fuzzer: `298` / `299`
* При одновременной активации Zapret v1 и Zapret v2 для разных правил маршрутизации Tachyon гарантирует строгую изоляцию очередей и исключает конфликты PID и fwmark.
---
## 5. Интеграция AmneziaWG в sing-box-extended (2026)
Проверено против релизного бинарника `v1.13.18-extended-2.6.5` (`shtorm-7/sing-box-extended`):
- Секция `endpoint.amnezia` полностью реализована в форке: `AmneziaOptions` (`transport/wireguard/endpoint_options.go`) → параметры IPC `jc / jmin / jmax / s1-s4 / h1-h4 / i1-i5`.
- Форк `shtorm-7/wireguard-go v0.0.4-extended-1.5.3`: пакеты `I1–I5` отправляются отдельными дейтаграммами **перед** инициализацией рукопожатия (`SendHandshakeInitiation`), значение задается в hex-формате.
- Генератор Tachyon (`singbox/generator_outbounds.uc` -> `add_awg_endpoint`) формирует конфигурацию, полностью совместимую со схемой форка:
- Секция `peer` содержит обязательный `allowed_ips`.
- Параметры `pre_shared_key` и `persistent_keepalive_interval` опциональны.
- Hex-значения `i1–i5` передаются через `uci_bin_to_hex` без повторного кодирования.
- **Диагностика:** если AWG/WARP-туннель имеет состояние «TX есть, RX нет» на sing-box-extended, конфиг применен корректно — причина во внешней UDP-фильтрации провайдера или блокировке сервера.
---
## 6. Strategy Fuzzer и автоматический подбор стратегий
Tachyon включает встроенный модуль автоматического тестирования стратегий обхода — **Strategy Fuzzer & Auto-Tuner** (`diagnostics/fuzzer.uc`), который избавляет от необходимости вручную подбирать флаги `nfqws2` или `ciadpi`.
### 6.1. Механизм работы
- **Изолированный сэндбокс:** Тестирование выполняется через временные очереди `qnum 298/299` с сокетной меткой `0x08000000` (для Zapret) либо через локальный порт `127.0.0.1:11089` (для ByeDPI), не затрагивая активный домашний трафик.
- **Метрический скоринг:** Замеряются время TLS-рукопожатия, TTFB (время до первого байта), битрейт загрузки чанка потокового видео (MB/s) и HTTP-код ответа.
- **1-Click Apply:** Победившая стратегия мгновенно применяется к правилу YouTube/Discord или в глобальные параметры провайдера с автоматической перезагрузкой службы.
### 6.2. Команды управления через CLI
```sh
# Запуск бенчмарка стратегий
tachyon fuzzer_start <engine> <target> [custom_url] [rule_section]
# Просмотр текущего прогресса и результатов
tachyon fuzzer_status
# Остановка фонового бенчмарка
tachyon fuzzer_stop
# Применение выбранной стратегии в UCI
tachyon fuzzer_apply <engine> "<strategy_args>" [target_rule_or_global]
# Вывод доступной матрицы стратегий
tachyon fuzzer_strategies
```