67 lines
4.2 KiB
Markdown
67 lines
4.2 KiB
Markdown
# 15. Руководство по Zapret v1 (nfqws): Полная спецификация и рецепты
|
|
|
|
## 1. Архитектура и принцип работы `nfqws` (Zapret v1)
|
|
|
|
Классический `nfqws` — это высокопроизводительный демон перехвата пакетов через Linux Netfilter Queue (`NFQUEUE`). Он работает на уровне ядра и L4/L7 сетевого стека, перехватывая исходящие TCP и UDP соединения до отправки в физический сетевой интерфейс и модифицируя структуру пакетов.
|
|
|
|
---
|
|
|
|
## 2. Основные параметры десинхронизации (`--dpi-desync`)
|
|
|
|
В Zapret v1 режим десинхронизации задается флагом `--dpi-desync=<режим1>,<режим2>`.
|
|
|
|
| Режим | Описание | Механика |
|
|
|---|---|---|
|
|
| `split2` | Деление пакета на 2 части | Пакет режется на 2 TCP-сегмента по указанной позиции. |
|
|
| `disorder2` | Деление с обратной отправкой | Сегменты отправляются в порядке [хвост, голова]. |
|
|
| `fake` | Инжекция фейкового пакета | Перед реальным запросом отправляется ложный payload с низким TTL. |
|
|
| `multisplit` | Множественная фрагментация | Пакет делится на 3+ сегмента по списку позиций. |
|
|
| `ipfrag2` | IP-фрагментация | Фрагментация на сетевом уровне L3 (IP-пакет делится на части). |
|
|
| `syndata` | Данные в SYN пакете | Внедрение полезной нагрузки в первый TCP SYN пакет (TCP Fast Open). |
|
|
|
|
---
|
|
|
|
## 3. Позиционирование сплита (`--dpi-desync-split-pos`)
|
|
|
|
Параметр `--dpi-desync-split-pos` определяет точное смещение (байт), по которому происходит разрезание TCP-сегмента:
|
|
- `--dpi-desync-split-pos=1` — сплит на 1-м байте payload. Разрывает первый байт TLS Content Type (`0x16`).
|
|
- `--dpi-desync-split-pos=2` — сплит на 2-м байте. Разрывает версию TLS (`0x0301`).
|
|
- `--dpi-desync-split-pos=midsld` — сплит посередине доменного имени второго уровня в SNI.
|
|
- `--dpi-desync-split-pos=sniext+4` — сплит в блоке TLS расширений.
|
|
- `--dpi-desync-split-pos=1,midsld` — комбинированное разделение.
|
|
|
|
---
|
|
|
|
## 4. Перекрытие Sequence (`--dpi-desync-split-seqovl`)
|
|
|
|
- `--dpi-desync-split-seqovl=1` или `2` — при сплите второй сегмент имеет начальный Sequence номер, заходящий на N байт назад (перекрывает конец первого сегмента).
|
|
- ТСПУ видит коллизию данных в потоке и сбрасывает проверку, а сервер назначения корректно дедуплицирует байты по RFC 793.
|
|
|
|
---
|
|
|
|
## 5. Методы дурения ТСПУ (`--dpi-desync-fooling`)
|
|
|
|
- `badseq` — отправка фейка с невалидным Sequence номером.
|
|
- `md5sig` — добавление опции TCP MD5 signature, заставляющей DPI дропнуть фейк или пропустить сессию.
|
|
- `badack` — невалидный номер подтверждения ACK.
|
|
- `hopbyhop` — добавление IPv6 Hop-by-Hop extension header.
|
|
|
|
---
|
|
|
|
## 6. Проверенные рецепты для Zapret v1
|
|
|
|
### 1. YouTube 4K / Web
|
|
```text
|
|
--dpi-desync=fake,split2 --dpi-desync-split-pos=1 --dpi-desync-ttl=8 --dpi-desync-fooling=badseq
|
|
```
|
|
|
|
### 2. RuTracker & Заблокированные HTTP/HTTPS ресурсы
|
|
```text
|
|
--dpi-desync=disorder2 --dpi-desync-split-pos=1 --dpi-desync-fooling=badseq
|
|
```
|
|
|
|
### 3. State-DPI Bypass (Перекрытие TCP Sequence)
|
|
```text
|
|
--dpi-desync=split2 --dpi-desync-split-seqovl=1 --dpi-desync-fooling=badseq
|
|
```
|