Что такое Zapret 2 (nfqws2)?
Определение автора (bol-van)
zapret2 является пакетным манипулятором, основная задача которого — совершение различных автономных атак на DPI в реальном времени с целью преодоления ограничений (блокировок) ресурсов или сетевых протоколов. Однако этим возможности zapret2 не ограничиваются. Архитектура позволяет выполнять и другие виды пакетных манипуляций. Например, двусторонняя (клиент+сервер) обфускация протоколов с целью их сокрытия от DPI. Возможны и иные применения.
Zapret 2 (nfqws2 на Linux, winws2 на Windows) — авторства bol-van. Автор сознательно называет его не «обходчиком блокировок», а пакетным манипулятором: обход 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 отличается от обычного Zapret (winws, nfqws)
В старом Zapret все методы обхода блокировок зашиты прямо в код на языке C. Программа делает ровно то, что в неё заложил разработчик при сборке. Чтобы что-то изменить, нужно разбираться в исходниках, править C-код и компилировать заново. Для большинства пользователей это невозможно, поэтому после каждого обновления ТСПУ приходится ждать, когда автор выпустит новую версию с исправлениями.
В Zapret 2 архитектуру разделили на две части. Ядро на C осталось: оно перехватывает и отправляет пакеты и работает так же быстро, как раньше. А логика обмана DPI вынесена в отдельные скрипты на языке Lua. Это обычные текстовые файлы с инструкциями: как подменить пакет, как его разрезать, как запутать анализатор. Их можно открыть в любом редакторе, поправить пару строк или заменить чужим скриптом, и программа подхватит изменения без перекомпиляции. Из каких файлов и частей состоит программа, разобрано в структура проекта.
Для пользователя это значит, что реакция на новую блокировку больше не упирается в одного разработчика. Если ТСПУ научился распознавать старый приём, скрипт можно поправить и проверить сразу, не дожидаясь релиза. Найденный кем-то рабочий способ оформляется как Lua-файл или просто как набор флагов, и им можно поделиться. В комплекте уже идёт библиотека готовых функций для TLS, QUIC и HTTP, которые свободно комбинируются между собой; каталог этих функций — в desync.
Графическая оболочка Zapret 2 GUI переносит тот же принцип на уровень настроек. Готовые наборы флагов хранятся в пресетах — обычных текстовых файлах, которыми можно обмениваться без правки Lua-кода. Благодаря этому сообщество может находить и распространять рабочие настройки самостоятельно, даже если автор программы надолго пропадёт. Так снижается фактор автобуса: риск, что проект остановится, если выбудет единственный человек, который в нём разбирается.
Проще говоря: старый Zapret — готовый инструмент, который делает только то, что в него заложили при сборке. Zapret 2 — конструктор, где способы обхода собирают, меняют и подстраивают под новые блокировки на ходу.
Установка на Windows | Установка на роутеры | Установка на Android
С чего начать
Настройки Zapret 2 вложены друг в друга, и изучать их удобнее от крупного к мелкому. Самый крупный уровень — пресет: файл со всеми настройками программы. Внутри него лежат профили: каждый описывает, какой трафик ловить и что с ним делать. Внутри профиля — фильтры и стратегии обхода. Если начать сразу с флагов стратегий, легко утонуть в деталях, не понимая, где они применяются.
- Настройка Zapret 2 GUI для новичков — первый запуск: выбор пресета, перебор стратегий и тонкая подстройка под свои сайты.
- Пресеты — как устроен файл настроек, из каких блоков он состоит, полные примеры и тот же набор флагов в виде
.bat. - Профили — чем профиль отличается от пресета, из чего он собирается и почему порядок профилей важен.
- Как добавить свой профиль — пошагово: копия пресета, новый профиль, домен в хостлисте, выбор стратегии.
- Как найти домены сайта через F12 — какие домены вписывать в профиль: вкладка «Сеть» в браузере, красные запросы и что означают их ошибки.
- Исключения — как вывести сайт из-под обработки, чтобы Zapret его не трогал.
Как устроена программа
Эти заметки объясняют, что происходит внутри nfqws2/winws2 от момента перехвата пакета до решения, что с ним сделать. Они не обязательны для повседневной настройки, но без них сложно понять, почему одна и та же стратегия в одном месте работает, а в другом нет.
- структура проекта — 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.
📚 См. также
- DPI и ТСПУ — как устроена инспекция трафика и хроника блокировок.
- Раздел Zapret — заметки о старом Zapret (
winws,nfqws) и сборках на его основе. - 🔗 Репозиторий zapret2 автора (bol-van) — исходный код, релизы и документация.
🤖 Эти статьи открыты — можно обучать на них ИИ
При желании вы можете натренировать ИИ на наших статьях. Исходное форматирование доступно в Forgejo: исходник этой заметки · скачать весь репозиторий одним zip-архивом.