Files

10 KiB
Raw Permalink Blame History

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)

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

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

# Запуск бенчмарка стратегий
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