10 KiB
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. Основные стратегии обхода
split2/multisplit(Многопозиционное разделение):- Разрезает TCP-сегмент непосредственно внутри поля TLS SNI или заголовка HTTP Host. Оборудование DPI не выполняет глубокую реассемблинг-сборку мелких фрагментов, а стек TCP целевого сервера склеивает поток без потерь.
disorder/disorder2(Изменение порядка доставки):- Отправляет вторую часть пакета раньше первой с корректными TCP Sequence Numbers. DPI видит фрагменты не по порядку и пропускает инспекцию.
fake/fake_sni(Внедрение фейковых пакетов):- Отправляет поддельный пакет TLS ClientHello с намеренно заниженным TTL (Time To Live). DPI перехватывает поддельный пакет и считает соединение легитимным, после чего пакет угасает в сети, не доходя до целевого сервера.
seqovl(Наложение порядковых номеров / Sequence Overlap):- Посылает пакет с перекрывающимся диапазоном TCP Sequence. Стек TCP на сервере отбрасывает дублирующиеся байты, тогда как DPI парсит неверные данные и теряет контроль над сессией.
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 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) → параметры IPCjc / 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