Files
NeoTachyon/docs/knowledge-base/14_ZAPRET2_DEEP_DIVE_MANUAL.md
T

92 lines
7.6 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.
# 14. Руководство по Zapret v2 (nfqws2): Архитектура, Lua-десинхронизация и Стратегии
## 1. Введение и Архитектурные отличия Zapret v2
Zapret v2 (`nfqws2`) — это эволюция классического `nfqws`, переписанная с акцентом на **модульную Lua-логику десинхронизации** и высокопроизводительное мультипрофилирование. В отличие от Zapret v1, где все параметры передавались через монолитные CLI-флаги `--dpi-desync-*`, в `nfqws2` обработка пакетов построена на вызове Lua-скриптов (`--lua-init`) и специализированных действий `--lua-desync`.
### Ключевые преимущества `nfqws2`:
1. **Мультипрофилирование в одном процессе:** возможность разделять правила для разных протоколов (HTTP, TLS, QUIC, UDP Voice) и диапазонов портов без запуска отдельных демонов.
2. **Гибкое позиционирование фрагментов (`pos`):** поддержка составных позиций сплита (`pos=1,midsld,sniext+4`), позволяющих резать пакет ровно в уязвимых местах сигнатур DPI.
3. **Управление перекрытием (`seqovl`):** внедрение контролируемого наложения TCP Sequence чисел (`seqovl=1..2`), сбивающего стейтфул-реассемблеры ТСПУ.
4. **Контроль размера TCP окна (`wsize`):** принудительное занижение Window Size в исходящих пакетах (`wsize=1`), заставляющее сервер и стек дробить поток на однобайтовые сегменты.
---
## 2. Формат командной строки и Lua-инициализация
Tachyon запускает `nfqws2` со стандартным набором Lua-библиотек из `/opt/zapret2/lua/`:
```bash
/opt/zapret2/nfq2/nfqws2 \
--qnum=<QNUM> \
--fwmark=<FWMARK> \
--lua-init=@/opt/zapret2/lua/zapret-lib.lua \
--lua-init=@/opt/zapret2/lua/zapret-antidpi.lua \
--lua-init=@/opt/zapret2/lua/zapret-auto.lua \
[СТРАТЕГИИ]
```
---
## 3. Функции Lua-десинхронизации (`--lua-desync`)
В `nfqws2` действия десинхронизации задаются через параметр `--lua-desync=<функция>[:ключ=значение[:ключ2=значение2]]`.
### 3.1. `multisplit` (Многосегментная фрагментация)
Основная и самая эффективная функция против современных ТСПУ.
- **Синтаксис:** `--lua-desync=multisplit:pos=<позиции>[:seqovl=<N>][:fooling=<метод>][:wsize=<N>]`
- **Параметры `pos`:**
- `pos=1` — сплит на 1-м байте payload (режет TLS ClientHello на этапе Handshake Type).
- `pos=midsld` — сплит посередине Second Level Domain внутри SNI (например, `you` | `tube.com`).
- `pos=sniext` — сплит в начале блока расширений TLS SNI.
- `pos=sniext+4` — сплит на 4 байта глубже расширения SNI (разрывает парсер расширений DPI).
- `pos=1,midsld,sniext+2` — тройной сплит, создающий 3 фрагмента с высоким уровнем энтропии.
- **Параметр `seqovl` (Sequence Overlap):**
- `seqovl=1` или `seqovl=2` — второй фрагмент отправляется со сдвигом TCP Sequence назад на 1–2 байта. DPI видит конфликт перекрытия данных и пропускает поток, в то время как целевой сервер корректно отбрасывает дублирующийся байт.
- **Параметр `wsize`:**
- `wsize=1` — зажимает размер TCP-окна, препятствуя реассемблингу со стороны DPI.
### 3.2. `fake` (Инжекция фейковых пакетов)
Отправка ложного ClientHello с некорректным SNI или контрольной суммой перед настоящим пакетом.
- **Синтаксис:** `--lua-desync=fake[:ttl=<N>][:fooling=<метод>]`
- **Параметры:**
- `ttl=6` / `ttl=8` — Time-To-Live фейкового пакета. Должен быть достаточным, чтобы долететь до ТСПУ провайдера, но недостаточным, чтобы дойти до сервера назначения.
- `fooling=badseq` — отправка фейка с невалидным TCP Sequence номером.
- `fooling=md5sig` — добавление TCP Option 19 (MD5 Signature) в фейковый пакет. ТСПУ часто пассивно анализирует такой пакет и сбрасывает стейт сессии, а сервер назначения дропает его из-за отсутствия MD5-ключа.
### 3.3. `split2` и `disorder2`
- `split2:pos=<N>` — классическое деление пакета на 2 части в указанной позиции.
- `disorder2:pos=<N>` — деление на 2 части с обратным порядком отправки (сначала хвост, затем голова).
---
## 4. Методы дурения DPI (`fooling`)
| Метод | Механизм действия | Когда применять |
|---|---|---|
| `badseq` | Фейковый пакет имеет ACK/SEQ вне текущего окна TCP. | Универсально против большинства ТСПУ (Ростелеком, МТС, Мегафон, Билайн). |
| `md5sig` | Пакет содержит TCP MD5 Signature Option (RFC 2385). | Эффективно, если ТСПУ валидирует опции TCP и дропает сессию. |
| `badack` | Инвертированный или повреждённый ACK-номер. | Против DPI с жестким контролем двустороннего TCP-хэндшейка. |
| `datanoack` | Данные в сегменте передаются без флага ACK. | Обход сигнатур, триггерящихся только на валидные ACK-сегменты. |
---
## 5. Готовые шаблоны стратегий под сервисы
### YouTube 4K (GoogleVideo chunk stream)
```text
--lua-desync=multisplit:pos=1,midsld:seqovl=1:fooling=badseq
```
*Разрывает SNI googlevideo и ClientHello, предотвращая троттлинг видеопотока 2160p60.*
### Discord (Gateway, API и Голосовые каналы UDP)
```text
--filter-tcp=443 --lua-desync=multisplit:pos=1,sniext+4:seqovl=1:fooling=badseq --new --filter-udp=50000-65535 --lua-desync=fake:ttl=8
```
*Комбинированный профиль: TCP 443 для шлюза сообщений и UDP-фейк для RTC Voice серверов.*
### Instagram & Meta (TLS 1.3 / ECH)
```text
--lua-desync=fake:ttl=8 --lua-desync=multisplit:pos=midsld:fooling=badseq
```
*Низко-TTL фейк перегружает стейт ТСПУ, после чего фрагментированный TLS 1.3 хэндшейк проходит без сброса.*