Что такое Zapret 2 (nfqws2)?
Определение автора (bol-van)
zapret2 является пакетным манипулятором, основная задача которого — совершение различных автономных атак на DPI в реальном времени с целью преодоления ограничений (блокировок) ресурсов или сетевых протоколов. Однако этим возможности zapret2 не ограничиваются. Архитектура позволяет выполнять и другие виды пакетных манипуляций. Например, двусторонняя (клиент+сервер) обфускация протоколов с целью их сокрытия от DPI. Возможны и иные применения.
Zapret 2 — программа авторства bol-van. На Linux её исполняемый файл называется nfqws2, на Windows — winws2; это одна и та же программа, а не две разные (подробно — в разделе о Windows и Linux ниже). Автор сознательно называет его не «обходчиком блокировок», а пакетным манипулятором: обход DPI — лишь самое известное, но не единственное его применение. Ниже определение разобрано по частям.
«Пакетный манипулятор». В основе лежит не «магия обхода», а универсальная способность: перехватывать сетевые пакеты на лету и как угодно их изменять, подменять, разрезать, дублировать, отправлять свои собственные. Всё остальное — надстройки над этим. Поэтому zapret2 не привязан к какой-то одной блокировке или протоколу: он умеет работать с трафиком вообще.
«Автономные атаки на DPI в реальном времени». DPI (Deep Packet Inspection, системы глубокого анализа трафика) — оборудование, которое читает содержимое пакетов и по сигнатурам (домен в SNI у TLS, Host: у HTTP) решает, пропустить соединение или заблокировать. В России это ТСПУ (технические средства противодействия угрозам), подробнее о них — в разделе DPI и ТСПУ. «Атака» здесь — не взлом DPI, а приёмы дурения (desync): пакеты формируются так, что DPI собирает из потока искажённую или неполную картину и не находит сигнатуру, тогда как сервер-получатель по правилам TCP/IP восстанавливает всё корректно. «Автономные» — потому что zapret2 работает сам, на стороне клиента, не требуя ни сервера-посредника, ни изменений в приложении: не VPN и не прокси. «В реальном времени» — решение по каждому пакету принимается прямо в момент его прохождения.
«Преодоление ограничений ресурсов или сетевых протоколов». Цель — не только разблокировать конкретный сайт, но и снять ограничения на уровне целых протоколов (например, когда DPI душит или рвёт QUIC, WireGuard, соединения мессенджеров по их сигнатуре, а не по адресу).
«Возможности не ограничиваются обходом». Ключевая мысль автора: та же архитектура пакетного манипулятора годится и для другого. Как пример bol-van называет двустороннюю (клиент + сервер) обфускацию протоколов — маскировку трафика так, чтобы DPI вообще не распознал, что за протокол идёт (в отличие от обхода, где протокол виден, но анализ сбивается). Возможны и иные применения — определение намеренно оставляет их открытыми.
Проще говоря
Zapret 2 — это инструмент, который сидит между вашим приложением и сетью и на ходу переделывает уходящие/приходящие пакеты. Чаще всего его используют, чтобы запутать цензурный DPI и открыть заблокированный сайт. Но по сути это конструктор для манипуляций пакетами, и обход блокировок — только одна из задач, которые он умеет решать.
Официальная документация автора — docs/manual.md в репозитории zapret2. Страницы этого раздела во многом опираются на неё и на исходный код 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-скрипты с техниками обхода — одни и те же файлы. Профили, фильтры профиля (порты, списки доменов и IP), —payload, —out-range, блобы и вызовы —lua-desync пишутся одинаково. Поэтому стратегию, найденную на Windows, можно перенести на Linux или роутер и наоборот: строки вида --filter-tcp=443 --lua-desync=fake:… менять не придётся.
Одна оговорка: одинаковая запись не гарантирует одинаковый результат. Некоторые обманки зависят от самой операционной системы и от того, стоит ли компьютер за домашним роутером. Например, обманка ts опирается на TCP timestamps, которые на Linux обычно включены, а на Windows по умолчанию выключены — разбор в заметке зачем фейк должен «умереть» до сервера.
Что отличается
Отличается способ, которым программа получает пакеты от операционной системы, и всё, что вокруг него: установка, запуск и часть флагов.
Windows (winws2) | Linux (nfqws2) | |
|---|---|---|
| Кто перехватывает пакеты | Драйвер WinDivert, встроенный в сам winws2. Отдельно ничего настраивать не нужно | Межсетевой экран системы — nftables или iptables. Его правила отправляют пакеты в очередь NFQUEUE, откуда их забирает nfqws2 |
| Как указать, какой трафик ловить | Флагами --wf-* в командной строке самого winws2 — см. фильтры WinDivert и режимы фильтрации | Правилами nftables/iptables. Их создают скрипты запуска автора, а программе передаётся номер очереди флагом --qnum |
| Флаги, которых нет на другой системе | --wf-*, --ssid-filter, --nlm-filter | --qnum, --fwmark, --bind-fix4, --filter-ssid |
| Графическая программа | Zapret 2 GUI — только для Windows 10 версии 1809 и новее | Графической оболочки от этого проекта нет: установка и настройка идут через терминал |
| Как ставится | Установщик .exe — см. как скачать | Скрипт автора install_easy.sh из репозитория zapret2; на Android — Magisk-модуль, на роутерах — см. установку на роутеры |
| Чей трафик обрабатывается | Только того компьютера, на котором запущен winws2. При раздаче интернета средствами Windows трафик других устройств не обрабатывается | И свой, и проходящий: nfqws2 на роутере снимает блокировки сразу для всех устройств в домашней сети |
Из таблицы следует главное практическое отличие. Пресет из Zapret 2 GUI нельзя целиком вставить в Linux: его первые строки — флаги --wf-*, а в сборке для Linux этих флагов просто нет. Переносится остальная часть — профили со стратегиями. В обратную сторону то же самое: команда запуска с Linux содержит --qnum и --fwmark, которых нет в winws2.
Подробнее о механизмах перехвата — в структуре проекта и в главе учебника о перехвате пакетов и вердиктах. Сведения этого раздела взяты из документации автора (разделы «Структура проекта» и «Перехват трафика из ядра ОС») и сверены с ней в октябре 2026 года.
Что выбрать под своё устройство
| Устройство | Что ставить |
|---|---|
| Компьютер или ноутбук с Windows 10 (1809+) или Windows 11 | Zapret 2 GUI — внутри него работает winws2 |
| Windows 7, 8 или старая сборка Windows 10 | Отдельная сборка — см. 🐳 Win 7 и 8 |
| Компьютер с Linux | nfqws2 через терминал. Готовые установщики собраны в заметке установка на Linux, но большинство из них ставит старый Zapret, а не Zapret 2 |
| Роутер с OpenWrt или Keenetic | Установка на роутеры — один раз настроенный роутер обслуживает все устройства дома, включая телевизор и приставку |
| Телефон на Android | С root — Magisk-модуль Zapret 2; без root — другие программы из заметки про 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 переносит тот же принцип на уровень настроек. Готовые наборы флагов хранятся в пресетах — обычных текстовых файлах, которыми можно обмениваться без правки Lua-кода. Благодаря этому сообщество может находить и распространять рабочие настройки самостоятельно, даже если автор программы надолго пропадёт. Так снижается фактор автобуса: риск, что проект остановится, если выбудет единственный человек, который в нём разбирается.
Проще говоря: старый Zapret — готовый инструмент, который делает только то, что в него заложили при сборке. Zapret 2 — конструктор, где способы обхода собирают, меняют и подстраивают под новые блокировки на ходу.
Установка на Windows | Установка на Linux | Установка на роутеры | Установка на Android
С чего начать
Настройки Zapret 2 вложены друг в друга, и изучать их удобнее от крупного к мелкому. Самый крупный уровень — пресет: файл со всеми настройками программы. Внутри него лежат профили: каждый описывает, какой трафик ловить и что с ним делать. Внутри профиля — фильтры и стратегии обхода. Если начать сразу с флагов стратегий, легко утонуть в деталях, не понимая, где они применяются.
- Настройка Zapret 2 GUI для новичков — первый запуск: выбор пресета, перебор стратегий и тонкая подстройка под свои сайты.
- Пресеты — как устроен файл настроек, из каких блоков он состоит, полные примеры и тот же набор флагов в виде
.bat. - Профили — чем профиль отличается от пресета, из чего он собирается и почему порядок профилей важен.
- Как добавить свой профиль — пошагово: копия пресета, новый профиль, домен в хостлисте, выбор стратегии.
- Как найти домены сайта через F12 — какие домены вписывать в профиль: вкладка «Сеть» в браузере, красные запросы и что означают их ошибки.
- Исключения — как вывести сайт из-под обработки, чтобы Zapret его не трогал.
Как устроена программа
Эти заметки объясняют, что происходит внутри программы (winws2 на Windows, nfqws2 на Linux) от момента перехвата пакета до решения, что с ним сделать. Они не обязательны для повседневной настройки, но без них сложно понять, почему одна и та же стратегия в одном месте работает, а в другом нет.
- структура проекта — C-ядро, Lua-скрипты, способы перехвата (NFQUEUE на Linux, WinDivert на Windows) и вспомогательные утилиты.
- схема обработки трафика — путь пакета: разбор, отслеживание соединения, распознавание протокола, выбор профиля, вызов Lua и итоговое решение.
- структура desync и диссекта — какие данные о пакете и соединении получает Lua-функция и какие решения (вердикты) она может вернуть.
- жизненный цикл desync-функции — общий скелет всех техник обхода: восемь стадий, через которые проходит каждая из них.
Из чего собирается профиль
Профиль отвечает на три вопроса: какой трафик обрабатывать, в какой момент соединения вмешиваться и что именно делать с пакетами. На первый вопрос отвечают фильтры, на второй — ограничения по типу данных и номеру пакета, на третий — вызовы техник обхода.
- Фильтры WinDivert (—wf-*) — какой трафик Windows вообще передаёт программе; всё, что сюда не попало, Zapret не увидит.
- Режимы фильтрации WinDivert — от точечного перехвата для Discord до захвата всех портов, и когда какой выбрать.
- Фильтры профиля — порты, протокол, IP-адреса (ipset) и списки доменов (hostlist), по которым пакет попадает в профиль.
- Фильтр —payload — к каким типам данных применяется стратегия: ClientHello TLS, HTTP-запрос, QUIC Initial и другие.
- Диапазоны —out-range — на каких по счёту пакетах соединения работает стратегия.
- Механизм —lua-desync — как вызываются Lua-функции обхода и какие из них есть.
- Блобы — заготовленные данные для фейковых пакетов: встроенные
fake_default_*, свои файлы и модификации черезtls_mod. - Обманки (fooling) — как сделать фейковый пакет, который DPI примет, а сервер отбросит: TTL, неверные номера последовательности,
tcp_md5и другие. - Порядок аргументов — какие флаги действуют на весь профиль, а какие только на идущие следом вызовы.
- Независимость профилей — одно соединение обрабатывает только первый подходящий профиль, и что из этого следует.
Техники дурения DPI
Дурение (desync) — это приёмы, при которых DPI собирает из потока неверную или неполную картину, а сервер получает данные без искажений. Каждая техника — отдельная Lua-функция со своими параметрами; общий механизм вызова описан в desync.
- fake — отправить перед настоящим пакетом поддельный, который DPI прочитает, а сервер отбросит.
- multisplit — разрезать данные на несколько TCP-сегментов, чтобы сигнатура не попала в один пакет целиком.
- multidisorder — то же, но части уходят в обратном порядке; multidisorder_legacy — вариант с поведением как в старом nfqws.
- fakedsplit и fakeddisorder — разрез с подмешиванием фейковых частей, в прямом и обратном порядке.
- hostfakesplit — разрез точно по границам имени сайта с фейковыми именами вокруг.
- tcpseg — отправка выбранного диапазона данных отдельным сегментом, в том числе с перекрытием (seqovl).
- oob — вставка байта «срочных данных» (флаг URG), который ломает сигнатуры DPI.
- syndata — данные прямо в первом пакете соединения (SYN).
- Зачем фейк должен «умереть» до сервера — механика обманок и риск опции
tsна Windows.
Автоматическое переключение стратегий
Оркестратор — Lua-надстройка, которая сама меняет стратегию, если текущая перестала работать: например, когда сервер отвечает сбросом соединения (RST) или пакеты приходится пересылать заново.
- circular — справочник оркестратора
circular: как он перебирает стратегии по кругу, параметры и примеры. - оркестратор — общая страница об оркестраторах (пока заготовка).
Когда не работает
Большинство жалоб «Запрет перестал работать» вызваны не поломкой программы, а тем, что провайдер обновил DPI. Эти заметки помогают отличить одно от другого и найти причину.
- «Не работает» — симптом, а не причина — что делать вместо слепого перебора пресетов.
- Проверка стратегии — почему автоподбор говорит «работает», а сайт не грузится, и как проверять честно.
- Анализ лога — как по debug-логу
winws2понять, какой профиль сработал и почему. - На каком CDN живёт сайт — как узнать, что сайт стоит за Cloudflare, Akamai или Amazon, и найти нужный профиль.
- Стратегия для игры — сбор IP-адресов игры, свой профиль и отдельный UDP-профиль.
- Steam и Zapret 2 — какие домены, порты и CDN использует клиент Steam и какой профиль под него собрать.
Отдельные разборы
- Распознавание MTProto — как Zapret 2 узнаёт трафик Telegram и какие стратегии к нему применяют.
- Почему n2<n3 попадает на ClientHello — как на самом деле считаются пакеты в
--out-rangeна Windows.
Учебник с нуля
Для тех, кто хочет понять программу глубже, чем нужно для настройки: учебник Zapret 2 для новичков проходит путь от сетевого стека и TCP до Lua-конвейера, а roadmap обучения раскладывает изучение по уровням, вплоть до чтения исходного кода. Главы учебника по порядку:
- Сетевой стек L2–L7 простыми словами — из каких уровней состоит сеть и на каком из них работает DPI.
- TCP: seq, ack, окно и MSS — номера последовательности и подтверждения, без которых не понять обманки и seqovl.
- Перехват пакетов и вердикты — как NFQUEUE и WinDivert передают пакеты программе и что она может с ними сделать.
- Dissect, reconstruct и объект desync — как пакет разбирается на поля и собирается обратно.
- Payload types, reasm, replay и маркеры — распознавание типа данных, сборка многопакетных сообщений и точки разреза.
- Lua pipeline — инстансы, аргументы и отладка.
- Start, cutoff и счётчик пакетов — как считаются пакеты в
--out-range.
Видеосерия «Как работает Zapret 2»
То же самое в формате видео, для сетевых инженеров: полный текст каждого выпуска опубликован статьёй с анимированными схемами. Выпуски выходят по порядку: сначала всё, что нужно для обхода, потом устройство программы.
- Видео 1. Письмо в сортировочном центре — как запрос превращается в пакеты, что может сделать наблюдатель на пути и почему против него возможны приёмы.
- Видео 2. Что видит наблюдатель — байты пакета и приветствия TLS, имя сайта, игрушечный инспектор и как выглядит разрез.
- Видео 3. Читаем командную строку zapret2 — профили, виды опций, строка стратегии, аргументы, условия и диапазоны: способ чтения настоящей команды.
- Видео 4. Где резать: метки — позиции разреза, метки host, sld, midsld, endhost, списки меток и границы.
- Видео 16. Внутри программы — правило ядра, очередь, главный цикл, обратный вызов, отправка через сырой сокет и защита от петли.
📚 См. также
- DPI и ТСПУ — как устроена инспекция трафика и хроника блокировок.
- Раздел Zapret — заметки о старом Zapret (
winws,nfqws) и сборках на его основе. - 🔗 Репозиторий zapret2 автора (bol-van) — исходный код, релизы и документация.
🤖 Эти статьи открыты — можно обучать на них ИИ
При желании вы можете натренировать ИИ на наших статьях. Исходное форматирование доступно в Forgejo: исходник этой заметки · скачать весь репозиторий одним zip-архивом.