todo/Zapret2/Zapret2.md
loop-uh 4c5219e8ba
Some checks failed
Published content check / validate (push) Failing after 7s
Видеосерия: статьи к видео 7
Полный текст выпусков с анимированными SVG-схемами: «Фейк и его условия». Список видео в Zapret2/Zapret2.md обновлён.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 14:59:21 -04:00

215 lines
35 KiB
Markdown
Raw Permalink 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.

---
date: 2026-07-17
tags:
- zapret
- zapret2
- nfqws2
- dpi
- overview
link: https://github.com/bol-van/zapret2/blob/master/docs/manual.md
aliases:
- Zapret 2
- Запрет 2
- nfqws2
- winws2
- Что такое Zapret 2
- Чем Zapret 2 отличается от Zapret
- Zapret 2 с чего начать
- Zapret 2 на Linux или на Windows в чём разница
- Чем nfqws2 отличается от winws2
- Есть ли Zapret 2 GUI для Linux
description: "Что такое Zapret 2 (nfqws2/winws2): пакетный манипулятор bol-van с Lua-стратегиями против DPI, отличия от старого Zapret и карта раздела."
---
> [!mirror] Резервное зеркало
> Актуальная версия этой страницы — на основной вики: [wiki2.zapret.moe/Zapret2/Zapret2](https://wiki2.zapret.moe/Zapret2/Zapret2)
# Что такое Zapret 2 (*nfqws2*)?
> [!quote] Определение автора (bol-van)
> zapret2 является пакетным манипулятором, основная задача которого — совершение различных автономных атак на DPI в реальном времени с целью преодоления ограничений (блокировок) ресурсов или сетевых протоколов. Однако этим возможности zapret2 не ограничиваются. Архитектура позволяет выполнять и другие виды пакетных манипуляций. Например, двусторонняя (клиент+сервер) обфускация протоколов с целью их сокрытия от DPI. Возможны и иные применения.
**[[home|Zapret 2]]** — программа авторства [bol-van](https://github.com/bol-van/zapret2). На Linux её исполняемый файл называется `nfqws2`, на Windows — `winws2`; это одна и та же программа, а не две разные (подробно — в разделе [[#Zapret 2 на Windows и на Linux — одна программа под разными именами|о Windows и Linux]] ниже). Автор сознательно называет его не «обходчиком блокировок», а **пакетным манипулятором**: обход DPI — лишь самое известное, но не единственное его применение. Ниже определение разобрано по частям.
**«Пакетный манипулятор».** В основе лежит не «магия обхода», а универсальная способность: перехватывать сетевые пакеты на лету и как угодно их изменять, подменять, разрезать, дублировать, отправлять свои собственные. Всё остальное — надстройки над этим. Поэтому zapret2 не привязан к какой-то одной блокировке или протоколу: он умеет работать с трафиком вообще.
**«Автономные атаки на DPI в реальном времени».** DPI *(Deep Packet Inspection, системы глубокого анализа трафика)* — оборудование, которое читает содержимое пакетов и по сигнатурам (домен в SNI у TLS, `Host:` у HTTP) решает, пропустить соединение или заблокировать. В России это **ТСПУ** *(технические средства противодействия угрозам)*, подробнее о них — в разделе [[DPI/DPI|DPI и ТСПУ]]. «Атака» здесь — не взлом DPI, а приёмы [[desync|дурения]] (desync): пакеты формируются так, что DPI собирает из потока искажённую или неполную картину и не находит сигнатуру, тогда как сервер-получатель по правилам TCP/IP восстанавливает всё корректно. «Автономные» — потому что zapret2 работает сам, на стороне клиента, не требуя ни сервера-посредника, ни изменений в приложении: не VPN и не прокси. «В реальном времени» — решение по каждому пакету принимается прямо в момент его прохождения.
**«Преодоление ограничений ресурсов или сетевых протоколов».** Цель — не только разблокировать конкретный сайт, но и снять ограничения на уровне целых протоколов (например, когда DPI душит или рвёт QUIC, WireGuard, соединения мессенджеров по их сигнатуре, а не по адресу).
**«Возможности не ограничиваются обходом».** Ключевая мысль автора: та же архитектура пакетного манипулятора годится и для другого. Как пример bol-van называет **двустороннюю (клиент + сервер) обфускацию протоколов** — маскировку трафика так, чтобы DPI вообще не распознал, что за протокол идёт (в отличие от обхода, где протокол виден, но анализ сбивается). Возможны и иные применения — определение намеренно оставляет их открытыми.
> [!note] Проще говоря
> Zapret 2 — это инструмент, который сидит между вашим приложением и сетью и на ходу переделывает уходящие/приходящие пакеты. Чаще всего его используют, чтобы запутать цензурный DPI и открыть заблокированный сайт. Но по сути это конструктор для манипуляций пакетами, и обход блокировок — только одна из задач, которые он умеет решать.
Официальная документация автора — [docs/manual.md в репозитории zapret2](https://github.com/bol-van/zapret2/blob/master/docs/manual.md). Страницы этого раздела во многом опираются на неё и на исходный код Lua-скриптов.
## Zapret 2 на Windows и на Linux — одна программа под разными именами
Названия `nfqws2` и `winws2` часто принимают за две разные программы или за «старую» и «новую» версии. На деле это один и тот же Zapret 2, собранный из одного исходного кода под разные операционные системы. Имя файла говорит только о том, где он запускается.
| Имя файла | Где работает | Откуда название |
| --- | --- | --- |
| `winws2` | Windows | `win` — Windows |
| `nfqws2` | Linux, а также всё, что построено на Linux: роутеры с OpenWrt, Android с root | `nfq` — NFQUEUE, механизм Linux, через который программа получает пакеты |
| `dvtws2` | FreeBSD и OpenBSD | `dvt` — divert, аналогичный механизм в BSD |
На macOS Zapret 2 не работает: по объяснению автора, в системе нет подходящего средства перехвата пакетов.
Проще говоря: если у вас Windows — всё, что вы читаете про `winws2`, относится к вам, а `nfqws2` — это та же программа у соседа на Linux или на роутере. Когда в заметках этого раздела написано `nfqws2` без уточнения, чаще всего имеется в виду программа вообще, на любой системе: так её называет сам автор в документации.
### Что одинаково на обеих системах
Одинакова вся часть, которая отвечает на вопрос «как обмануть DPI». Lua-скрипты с техниками обхода — одни и те же файлы. [[profile|Профили]], [[filter|фильтры профиля]] (порты, списки доменов и IP), [[payload|--payload]], [[out-range|--out-range]], [[blob|блобы]] и вызовы [[desync|--lua-desync]] пишутся одинаково. Поэтому стратегию, найденную на Windows, можно перенести на Linux или роутер и наоборот: строки вида `--filter-tcp=443 --lua-desync=fake:…` менять не придётся.
Одна оговорка: одинаковая запись не гарантирует одинаковый результат. Некоторые [[основные флаги|обманки]] зависят от самой операционной системы и от того, стоит ли компьютер за домашним роутером. Например, обманка `ts` опирается на TCP timestamps, которые на Linux обычно включены, а на Windows по умолчанию выключены — разбор в заметке [[ts-and-fooling|зачем фейк должен «умереть» до сервера]].
### Что отличается
Отличается способ, которым программа получает пакеты от операционной системы, и всё, что вокруг него: установка, запуск и часть флагов.
| | Windows (`winws2`) | Linux (`nfqws2`) |
| --- | --- | --- |
| Кто перехватывает пакеты | Драйвер WinDivert, встроенный в сам `winws2`. Отдельно ничего настраивать не нужно | Межсетевой экран системы — `nftables` или `iptables`. Его правила отправляют пакеты в очередь NFQUEUE, откуда их забирает `nfqws2` |
| Как указать, какой трафик ловить | Флагами `--wf-*` в командной строке самого `winws2` — см. [[wf\|фильтры WinDivert]] и [[windivert\|режимы фильтрации]] | Правилами `nftables`/`iptables`. Их создают скрипты запуска автора, а программе передаётся номер очереди флагом `--qnum` |
| Флаги, которых нет на другой системе | `--wf-*`, `--ssid-filter`, `--nlm-filter` | `--qnum`, `--fwmark`, `--bind-fix4`, `--filter-ssid` |
| Графическая программа | [[guide\|Zapret 2 GUI]] — только для Windows 10 версии 1809 и новее | Графической оболочки от этого проекта нет: установка и настройка идут через терминал |
| Как ставится | Установщик `.exe` — см. [[download\|как скачать]] | Скрипт автора `install_easy.sh` из репозитория zapret2; на Android — [[Zapret/magisk-zapret2\|Magisk-модуль]], на роутерах — см. [[router\|установку на роутеры]] |
| Чей трафик обрабатывается | Только того компьютера, на котором запущен `winws2`. При раздаче интернета средствами Windows трафик других устройств не обрабатывается | И свой, и проходящий: `nfqws2` на роутере снимает блокировки сразу для всех устройств в домашней сети |
Из таблицы следует главное практическое отличие. [[preset|Пресет]] из Zapret 2 GUI нельзя целиком вставить в Linux: его первые строки — флаги `--wf-*`, а в сборке для Linux этих флагов просто нет. Переносится остальная часть — профили со стратегиями. В обратную сторону то же самое: команда запуска с Linux содержит `--qnum` и `--fwmark`, которых нет в `winws2`.
Подробнее о механизмах перехвата — в [[структура проекта|структуре проекта]] и в главе учебника [[Zapret/manual/zapret2_03|о перехвате пакетов и вердиктах]]. Сведения этого раздела взяты из [документации автора](https://github.com/bol-van/zapret2/blob/master/docs/manual.md) (разделы «Структура проекта» и «Перехват трафика из ядра ОС») и сверены с ней в октябре 2026 года.
### Что выбрать под своё устройство
| Устройство | Что ставить |
| --- | --- |
| Компьютер или ноутбук с Windows 10 (1809+) или Windows 11 | [[download\|Zapret 2 GUI]] — внутри него работает `winws2` |
| Windows 7, 8 или старая сборка Windows 10 | Отдельная сборка — см. [[🐳 Win 7 и 8]] |
| Компьютер с Linux | `nfqws2` через терминал. Готовые установщики собраны в заметке [[linux\|установка на Linux]], но большинство из них ставит старый Zapret, а не Zapret 2 |
| Роутер с OpenWrt или Keenetic | [[router\|Установка на роутеры]] — один раз настроенный роутер обслуживает все устройства дома, включая телевизор и приставку |
| Телефон на Android | С root — [[Zapret/magisk-zapret2\|Magisk-модуль Zapret 2]]; без root — другие программы из заметки [[android\|про Android]] |
| macOS, iPhone, iPad | Zapret 2 не запускается. Вариант — поставить его на роутер |
## Чем Zapret 2 отличается от обычного Zapret (*winws, nfqws*)
Здесь сравниваются уже не операционные системы, а поколения программы: старый Zapret (`winws` на Windows, `nfqws` на Linux — без двойки в имени) и Zapret 2. В старом Zapret все методы обхода блокировок зашиты прямо в код на языке C. Программа делает ровно то, что в неё заложил разработчик при сборке. Чтобы что-то изменить, нужно разбираться в исходниках, править C-код и компилировать заново. Для большинства пользователей это невозможно, поэтому после каждого обновления ТСПУ приходится ждать, когда автор выпустит новую версию с исправлениями.
В Zapret 2 архитектуру разделили на две части. Ядро на C осталось: оно перехватывает и отправляет пакеты и работает так же быстро, как раньше. А логика обмана DPI вынесена в отдельные скрипты на языке Lua. Это обычные текстовые файлы с инструкциями: как подменить пакет, как его разрезать, как запутать анализатор. Их можно открыть в любом редакторе, поправить пару строк или заменить чужим скриптом, и программа подхватит изменения без перекомпиляции. Из каких файлов и частей состоит программа, разобрано в [[структура проекта]].
Для пользователя это значит, что реакция на новую блокировку больше не упирается в одного разработчика. Если ТСПУ научился распознавать старый приём, скрипт можно поправить и проверить сразу, не дожидаясь релиза. Найденный кем-то рабочий способ оформляется как Lua-файл или просто как набор флагов, и им можно поделиться. В комплекте уже идёт библиотека готовых функций для TLS, QUIC и HTTP, которые свободно комбинируются между собой; каталог этих функций — в [[desync]].
Графическая оболочка Zapret 2 GUI переносит тот же принцип на уровень настроек. Готовые наборы флагов хранятся в [[preset|пресетах]] — обычных текстовых файлах, которыми можно обмениваться без правки Lua-кода. Благодаря этому сообщество может находить и распространять рабочие настройки самостоятельно, даже если автор программы надолго пропадёт. Так снижается [фактор автобуса](https://ru.wikipedia.org/wiki/%D0%A4%D0%B0%D0%BA%D1%82%D0%BE%D1%80_%D0%B0%D0%B2%D1%82%D0%BE%D0%B1%D1%83%D1%81%D0%B0): риск, что проект остановится, если выбудет единственный человек, который в нём разбирается.
Проще говоря: старый Zapret — готовый инструмент, который делает только то, что в него заложили при сборке. Zapret 2 — конструктор, где способы обхода собирают, меняют и подстраивают под новые блокировки на ходу.
## ![[windows-logo.png|25]] [[download|Установка на Windows]] | [[linux|Установка на Linux]] | [[router|Установка на роутеры]] | [[android|Установка на Android]]
## С чего начать
Настройки Zapret 2 вложены друг в друга, и изучать их удобнее от крупного к мелкому. Самый крупный уровень — пресет: файл со всеми настройками программы. Внутри него лежат профили: каждый описывает, какой трафик ловить и что с ним делать. Внутри профиля — фильтры и стратегии обхода. Если начать сразу с флагов стратегий, легко утонуть в деталях, не понимая, где они применяются.
- [[guide|Настройка Zapret 2 GUI для новичков]] — первый запуск: выбор пресета, перебор стратегий и тонкая подстройка под свои сайты.
- [[preset|Пресеты]] — как устроен файл настроек, из каких блоков он состоит, полные примеры и тот же набор флагов в виде `.bat`.
- [[profile|Профили]] — чем профиль отличается от пресета, из чего он собирается и почему порядок профилей важен.
- [[add-profile|Как добавить свой профиль]] — пошагово: копия пресета, новый профиль, домен в хостлисте, выбор стратегии.
- [[find-site-domains|Как найти домены сайта через F12]] — какие домены вписывать в профиль: вкладка «Сеть» в браузере, красные запросы и что означают их ошибки.
- [[exclusions|Исключения]] — как вывести сайт из-под обработки, чтобы Zapret его не трогал.
## Как устроена программа
Эти заметки объясняют, что происходит внутри программы (`winws2` на Windows, `nfqws2` на Linux) от момента перехвата пакета до решения, что с ним сделать. Они не обязательны для повседневной настройки, но без них сложно понять, почему одна и та же стратегия в одном месте работает, а в другом нет.
- [[структура проекта]] — C-ядро, Lua-скрипты, способы перехвата (NFQUEUE на Linux, WinDivert на Windows) и вспомогательные утилиты.
- [[схема обработки трафика]] — путь пакета: разбор, отслеживание соединения, распознавание протокола, выбор профиля, вызов Lua и итоговое решение.
- [[структура desync и диссекта]] — какие данные о пакете и соединении получает Lua-функция и какие решения (вердикты) она может вернуть.
- [[жизненный цикл desync-функции]] — общий скелет всех техник обхода: восемь стадий, через которые проходит каждая из них.
## Из чего собирается профиль
Профиль отвечает на три вопроса: какой трафик обрабатывать, в какой момент соединения вмешиваться и что именно делать с пакетами. На первый вопрос отвечают фильтры, на второй — ограничения по типу данных и номеру пакета, на третий — вызовы техник обхода.
- [[wf|Фильтры WinDivert (--wf-*)]] — какой трафик Windows вообще передаёт программе; всё, что сюда не попало, Zapret не увидит.
- [[windivert|Режимы фильтрации WinDivert]] — от точечного перехвата для Discord до захвата всех портов, и когда какой выбрать.
- [[filter|Фильтры профиля]] — порты, протокол, IP-адреса (ipset) и списки доменов (hostlist), по которым пакет попадает в профиль.
- [[payload|Фильтр --payload]] — к каким типам данных применяется стратегия: ClientHello TLS, HTTP-запрос, QUIC Initial и другие.
- [[out-range|Диапазоны --out-range]] — на каких по счёту пакетах соединения работает стратегия.
- [[desync|Механизм --lua-desync]] — как вызываются Lua-функции обхода и какие из них есть.
- [[blob|Блобы]] — заготовленные данные для фейковых пакетов: встроенные `fake_default_*`, свои файлы и модификации через `tls_mod`.
- [[основные флаги|Обманки (fooling)]] — как сделать фейковый пакет, который DPI примет, а сервер отбросит: TTL, неверные номера последовательности, `tcp_md5` и другие.
- [[последовательность аргументов|Порядок аргументов]] — какие флаги действуют на весь профиль, а какие только на идущие следом вызовы.
- [[profile-independence|Независимость профилей]] — одно соединение обрабатывает только первый подходящий профиль, и что из этого следует.
## Техники дурения DPI
Дурение (desync) — это приёмы, при которых DPI собирает из потока неверную или неполную картину, а сервер получает данные без искажений. Каждая техника — отдельная Lua-функция со своими параметрами; общий механизм вызова описан в [[desync]].
- [[fake]] — отправить перед настоящим пакетом поддельный, который DPI прочитает, а сервер отбросит.
- [[multisplit]] — разрезать данные на несколько TCP-сегментов, чтобы сигнатура не попала в один пакет целиком.
- [[multidisorder]] — то же, но части уходят в обратном порядке; [[multidisorder_legacy]] — вариант с поведением как в старом nfqws.
- [[fakedsplit]] и [[fakeddisorder]] — разрез с подмешиванием фейковых частей, в прямом и обратном порядке.
- [[hostfakesplit]] — разрез точно по границам имени сайта с фейковыми именами вокруг.
- [[tcpseg]] — отправка выбранного диапазона данных отдельным сегментом, в том числе с перекрытием (seqovl).
- [[oob]] — вставка байта «срочных данных» (флаг URG), который ломает сигнатуры DPI.
- [[syndata]] — данные прямо в первом пакете соединения (SYN).
- [[ts-and-fooling|Зачем фейк должен «умереть» до сервера]] — механика обманок и риск опции `ts` на Windows.
## Автоматическое переключение стратегий
Оркестратор — Lua-надстройка, которая сама меняет стратегию, если текущая перестала работать: например, когда сервер отвечает сбросом соединения (RST) или пакеты приходится пересылать заново.
- [[circular]] — справочник оркестратора `circular`: как он перебирает стратегии по кругу, параметры и примеры.
- [[оркестратор]] — общая страница об оркестраторах (пока заготовка).
## Когда не работает
Большинство жалоб «Запрет перестал работать» вызваны не поломкой программы, а тем, что провайдер обновил DPI. Эти заметки помогают отличить одно от другого и найти причину.
- [[symptom-not-cause|«Не работает» — симптом, а не причина]] — что делать вместо слепого перебора пресетов.
- [[verify-strategy|Проверка стратегии]] — почему автоподбор говорит «работает», а сайт не грузится, и как проверять честно.
- [[log-analyzer|Анализ лога]] — как по debug-логу `winws2` понять, какой профиль сработал и почему.
- [[find-domain-owner|На каком CDN живёт сайт]] — как узнать, что сайт стоит за Cloudflare, Akamai или Amazon, и найти нужный профиль.
- [[find-game-strategy|Стратегия для игры]] — сбор IP-адресов игры, свой профиль и отдельный UDP-профиль.
- [[steam|Steam и Zapret 2]] — какие домены, порты и CDN использует клиент Steam и какой профиль под него собрать.
## Отдельные разборы
- [[распознавание mtproto|Распознавание MTProto]] — как Zapret 2 узнаёт трафик Telegram и какие стратегии к нему применяют.
- [[zapret2_start_cutoff|Почему n2<n3 попадает на ClientHello]] — как на самом деле считаются пакеты в `--out-range` на Windows.
## Учебник с нуля
Для тех, кто хочет понять программу глубже, чем нужно для настройки: [[manual|учебник Zapret 2 для новичков]] проходит путь от сетевого стека и TCP до Lua-конвейера, а [[roadmap обучения]] раскладывает изучение по уровням, вплоть до чтения исходного кода. Главы учебника по порядку:
1. [[Zapret/manual/zapret2_01|Сетевой стек L2–L7 простыми словами]] — из каких уровней состоит сеть и на каком из них работает DPI.
2. [[Zapret/manual/zapret2_02|TCP: seq, ack, окно и MSS]] — номера последовательности и подтверждения, без которых не понять обманки и seqovl.
3. [[Zapret/manual/zapret2_03|Перехват пакетов и вердикты]] — как NFQUEUE и WinDivert передают пакеты программе и что она может с ними сделать.
4. [[Zapret/manual/zapret2_04|Dissect, reconstruct и объект desync]] — как пакет разбирается на поля и собирается обратно.
5. [[Zapret/manual/zapret2_05|Payload types, reasm, replay и маркеры]] — распознавание типа данных, сборка многопакетных сообщений и точки разреза.
6. [[Zapret/manual/zapret2_06|Lua pipeline]] — инстансы, аргументы и отладка.
7. [[zapret2_start_cutoff|Start, cutoff и счётчик пакетов]] — как считаются пакеты в `--out-range`.
### Видеосерия «Как работает Zapret 2»
То же самое в формате видео, для сетевых инженеров: полный текст каждого выпуска опубликован статьёй с анимированными схемами. Выпуски выходят по порядку: сначала всё, что нужно для обхода, потом устройство программы.
- Видео 1. [[01-pismo-v-sortirovochnom-centre|Письмо в сортировочном центре]] — как запрос превращается в пакеты, что может сделать наблюдатель на пути и почему против него возможны приёмы.
- Видео 2. [[02-chto-vidit-nablyudatel|Что видит наблюдатель]] — байты пакета и приветствия TLS, имя сайта, игрушечный инспектор и как выглядит разрез.
- Видео 3. [[03-chitaem-komandnuyu-stroku-zapret2|Читаем командную строку zapret2]] — профили, виды опций, строка стратегии, аргументы, условия и диапазоны: способ чтения настоящей команды.
- Видео 4. [[04-gde-rezat-metki|Где резать: метки]] — позиции разреза, метки host, sld, midsld, endhost, списки меток и границы.
- Видео 5. [[05-multisplit-rezat-na-chasti|multisplit: резать на части]] — как multisplit режет пакет на части и отправляет их по порядку.
- Видео 6. [[06-peremeshat-disorder|Перемешать: disorder]] — как multidisorder отправляет части в обратном порядке и что происходит с сервером.
- Видео 7. [[07-fake-i-ego-usloviya|Фейк и его условия]] — поддельные пакеты и условия, при которых они доходят до DPI, но не до сервера.
- Видео 16. [[16-vnutri-programmy|Внутри программы]] — правило ядра, очередь, главный цикл, обратный вызов, отправка через сырой сокет и защита от петли.
## 📚 См. также
- [[DPI/DPI|DPI и ТСПУ]] — как устроена инспекция трафика и хроника блокировок.
- [[Zapret/Zapret|Раздел Zapret]] — заметки о старом Zapret (`winws`, `nfqws`) и сборках на его основе.
- 🔗 [Репозиторий zapret2 автора (bol-van)](https://github.com/bol-van/zapret2) — исходный код, релизы и документация.
---
> [!quote] 🤖 Эти статьи открыты — можно обучать на них ИИ
> При желании вы можете натренировать ИИ на наших статьях. Исходное форматирование доступно в Forgejo: [исходник этой заметки](https://git2.zapret.moe/zapretdiscordyoutube/todo/src/branch/main/Zapret2/Zapret2.md) · [скачать весь репозиторий одним zip-архивом](https://git2.zapret.moe/zapretdiscordyoutube/todo/archive/main.zip).