---
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).
