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

35 KiB
Raw Permalink Blame History

date tags link aliases description
2026-07-17
zapret
zapret2
nfqws2
dpi
overview
https://github.com/bol-van/zapret2/blob/master/docs/manual.md
Zapret 2
Запрет 2
nfqws2
winws2
Что такое Zapret 2
Чем Zapret 2 отличается от Zapret
Zapret 2 с чего начать
Zapret 2 на Linux или на Windows в чём разница
Чем nfqws2 отличается от winws2
Есть ли Zapret 2 GUI для Linux
Что такое Zapret 2 (nfqws2/winws2): пакетный манипулятор bol-van с Lua-стратегиями против DPI, отличия от старого Zapret и карта раздела.

[!mirror] Резервное зеркало Актуальная версия этой страницы — на основной вики: wiki2.zapret.moe/Zapret2/Zapret2

Что такое Zapret 2 (nfqws2)?

[!quote] Определение автора (bol-van) zapret2 является пакетным манипулятором, основная задача которого — совершение различных автономных атак на DPI в реальном времени с целью преодоления ограничений (блокировок) ресурсов или сетевых протоколов. Однако этим возможности zapret2 не ограничиваются. Архитектура позволяет выполнять и другие виды пакетных манипуляций. Например, двусторонняя (клиент+сервер) обфускация протоколов с целью их сокрытия от DPI. Возможны и иные применения.

home — программа авторства bol-van. На Linux её исполняемый файл называется nfqws2, на Windows — winws2; это одна и та же программа, а не две разные (подробно — в разделе #Zapret 2 на Windows и на Linux — одна программа под разными именами ниже). Автор сознательно называет его не «обходчиком блокировок», а пакетным манипулятором: обход DPI — лишь самое известное, но не единственное его применение. Ниже определение разобрано по частям.

«Пакетный манипулятор». В основе лежит не «магия обхода», а универсальная способность: перехватывать сетевые пакеты на лету и как угодно их изменять, подменять, разрезать, дублировать, отправлять свои собственные. Всё остальное — надстройки над этим. Поэтому zapret2 не привязан к какой-то одной блокировке или протоколу: он умеет работать с трафиком вообще.

«Автономные атаки на DPI в реальном времени». DPI (Deep Packet Inspection, системы глубокого анализа трафика) — оборудование, которое читает содержимое пакетов и по сигнатурам (домен в SNI у TLS, Host: у HTTP) решает, пропустить соединение или заблокировать. В России это ТСПУ (технические средства противодействия угрозам), подробнее о них — в разделе DPI/DPI. «Атака» здесь — не взлом DPI, а приёмы desync (desync): пакеты формируются так, что DPI собирает из потока искажённую или неполную картину и не находит сигнатуру, тогда как сервер-получатель по правилам TCP/IP восстанавливает всё корректно. «Автономные» — потому что zapret2 работает сам, на стороне клиента, не требуя ни сервера-посредника, ни изменений в приложении: не VPN и не прокси. «В реальном времени» — решение по каждому пакету принимается прямо в момент его прохождения.

«Преодоление ограничений ресурсов или сетевых протоколов». Цель — не только разблокировать конкретный сайт, но и снять ограничения на уровне целых протоколов (например, когда DPI душит или рвёт QUIC, WireGuard, соединения мессенджеров по их сигнатуре, а не по адресу).

«Возможности не ограничиваются обходом». Ключевая мысль автора: та же архитектура пакетного манипулятора годится и для другого. Как пример bol-van называет двустороннюю (клиент + сервер) обфускацию протоколов — маскировку трафика так, чтобы DPI вообще не распознал, что за протокол идёт (в отличие от обхода, где протокол виден, но анализ сбивается). Возможны и иные применения — определение намеренно оставляет их открытыми.

[!note] Проще говоря 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-скрипты с техниками обхода — одни и те же файлы. profile, filter (порты, списки доменов и IP), payload, out-range, blob и вызовы 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 Правилами nftables/iptables. Их создают скрипты запуска автора, а программе передаётся номер очереди флагом --qnum
Флаги, которых нет на другой системе --wf-*, --ssid-filter, --nlm-filter --qnum, --fwmark, --bind-fix4, --filter-ssid
Графическая программа guide — только для Windows 10 версии 1809 и новее Графической оболочки от этого проекта нет: установка и настройка идут через терминал
Как ставится Установщик .exe — см. download Скрипт автора install_easy.sh из репозитория zapret2; на Android — Zapret/magisk-zapret2, на роутерах — см. router
Чей трафик обрабатывается Только того компьютера, на котором запущен winws2. При раздаче интернета средствами Windows трафик других устройств не обрабатывается И свой, и проходящий: nfqws2 на роутере снимает блокировки сразу для всех устройств в домашней сети

Из таблицы следует главное практическое отличие. preset из Zapret 2 GUI нельзя целиком вставить в Linux: его первые строки — флаги --wf-*, а в сборке для Linux этих флагов просто нет. Переносится остальная часть — профили со стратегиями. В обратную сторону то же самое: команда запуска с Linux содержит --qnum и --fwmark, которых нет в winws2.

Подробнее о механизмах перехвата — в структура проекта и в главе учебника Zapret/manual/zapret2_03. Сведения этого раздела взяты из документации автора (разделы «Структура проекта» и «Перехват трафика из ядра ОС») и сверены с ней в октябре 2026 года.

Что выбрать под своё устройство

Устройство Что ставить
Компьютер или ноутбук с Windows 10 (1809+) или Windows 11 download — внутри него работает winws2
Windows 7, 8 или старая сборка Windows 10 Отдельная сборка — см. 🐳 Win 7 и 8
Компьютер с Linux nfqws2 через терминал. Готовые установщики собраны в заметке linux, но большинство из них ставит старый Zapret, а не Zapret 2
Роутер с OpenWrt или Keenetic router — один раз настроенный роутер обслуживает все устройства дома, включая телевизор и приставку
Телефон на Android С root — Zapret/magisk-zapret2; без 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 переносит тот же принцип на уровень настроек. Готовые наборы флагов хранятся в preset — обычных текстовых файлах, которыми можно обмениваться без правки Lua-кода. Благодаря этому сообщество может находить и распространять рабочие настройки самостоятельно, даже если автор программы надолго пропадёт. Так снижается фактор автобуса: риск, что проект остановится, если выбудет единственный человек, который в нём разбирается.

Проще говоря: старый Zapret — готовый инструмент, который делает только то, что в него заложили при сборке. Zapret 2 — конструктор, где способы обхода собирают, меняют и подстраивают под новые блокировки на ходу.

!windows-logo.png download | linux | router | android

С чего начать

Настройки Zapret 2 вложены друг в друга, и изучать их удобнее от крупного к мелкому. Самый крупный уровень — пресет: файл со всеми настройками программы. Внутри него лежат профили: каждый описывает, какой трафик ловить и что с ним делать. Внутри профиля — фильтры и стратегии обхода. Если начать сразу с флагов стратегий, легко утонуть в деталях, не понимая, где они применяются.

  • guide — первый запуск: выбор пресета, перебор стратегий и тонкая подстройка под свои сайты.
  • preset — как устроен файл настроек, из каких блоков он состоит, полные примеры и тот же набор флагов в виде .bat.
  • profile — чем профиль отличается от пресета, из чего он собирается и почему порядок профилей важен.
  • add-profile — пошагово: копия пресета, новый профиль, домен в хостлисте, выбор стратегии.
  • find-site-domains — какие домены вписывать в профиль: вкладка «Сеть» в браузере, красные запросы и что означают их ошибки.
  • exclusions — как вывести сайт из-под обработки, чтобы Zapret его не трогал.

Как устроена программа

Эти заметки объясняют, что происходит внутри программы (winws2 на Windows, nfqws2 на Linux) от момента перехвата пакета до решения, что с ним сделать. Они не обязательны для повседневной настройки, но без них сложно понять, почему одна и та же стратегия в одном месте работает, а в другом нет.

  • структура проекта — C-ядро, Lua-скрипты, способы перехвата (NFQUEUE на Linux, WinDivert на Windows) и вспомогательные утилиты.
  • схема обработки трафика — путь пакета: разбор, отслеживание соединения, распознавание протокола, выбор профиля, вызов Lua и итоговое решение.
  • структура desync и диссекта — какие данные о пакете и соединении получает Lua-функция и какие решения (вердикты) она может вернуть.
  • жизненный цикл desync-функции — общий скелет всех техник обхода: восемь стадий, через которые проходит каждая из них.

Из чего собирается профиль

Профиль отвечает на три вопроса: какой трафик обрабатывать, в какой момент соединения вмешиваться и что именно делать с пакетами. На первый вопрос отвечают фильтры, на второй — ограничения по типу данных и номеру пакета, на третий — вызовы техник обхода.

  • wf — какой трафик Windows вообще передаёт программе; всё, что сюда не попало, Zapret не увидит.
  • windivert — от точечного перехвата для Discord до захвата всех портов, и когда какой выбрать.
  • filter — порты, протокол, IP-адреса (ipset) и списки доменов (hostlist), по которым пакет попадает в профиль.
  • payload — к каким типам данных применяется стратегия: ClientHello TLS, HTTP-запрос, QUIC Initial и другие.
  • out-range — на каких по счёту пакетах соединения работает стратегия.
  • desync — как вызываются Lua-функции обхода и какие из них есть.
  • blob — заготовленные данные для фейковых пакетов: встроенные fake_default_*, свои файлы и модификации через tls_mod.
  • основные флаги — как сделать фейковый пакет, который 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 — как узнать, что сайт стоит за Cloudflare, Akamai или Amazon, и найти нужный профиль.
  • find-game-strategy — сбор IP-адресов игры, свой профиль и отдельный UDP-профиль.
  • steam — какие домены, порты и CDN использует клиент Steam и какой профиль под него собрать.

Отдельные разборы

  • распознавание mtproto — как Zapret 2 узнаёт трафик Telegram и какие стратегии к нему применяют.
  • zapret2_start_cutoff — как на самом деле считаются пакеты в --out-range на Windows.

Учебник с нуля

Для тех, кто хочет понять программу глубже, чем нужно для настройки: manual проходит путь от сетевого стека и TCP до Lua-конвейера, а roadmap обучения раскладывает изучение по уровням, вплоть до чтения исходного кода. Главы учебника по порядку:

  1. Zapret/manual/zapret2_01 — из каких уровней состоит сеть и на каком из них работает DPI.
  2. Zapret/manual/zapret2_02 — номера последовательности и подтверждения, без которых не понять обманки и seqovl.
  3. Zapret/manual/zapret2_03 — как NFQUEUE и WinDivert передают пакеты программе и что она может с ними сделать.
  4. Zapret/manual/zapret2_04 — как пакет разбирается на поля и собирается обратно.
  5. Zapret/manual/zapret2_05 — распознавание типа данных, сборка многопакетных сообщений и точки разреза.
  6. Zapret/manual/zapret2_06 — инстансы, аргументы и отладка.
  7. zapret2_start_cutoff — как считаются пакеты в --out-range.

Видеосерия «Как работает Zapret 2»

То же самое в формате видео, для сетевых инженеров: полный текст каждого выпуска опубликован статьёй с анимированными схемами. Выпуски выходят по порядку: сначала всё, что нужно для обхода, потом устройство программы.

  • Видео 1. 01-pismo-v-sortirovochnom-centre — как запрос превращается в пакеты, что может сделать наблюдатель на пути и почему против него возможны приёмы.
  • Видео 2. 02-chto-vidit-nablyudatel — байты пакета и приветствия TLS, имя сайта, игрушечный инспектор и как выглядит разрез.
  • Видео 3. 03-chitaem-komandnuyu-stroku-zapret2 — профили, виды опций, строка стратегии, аргументы, условия и диапазоны: способ чтения настоящей команды.
  • Видео 4. 04-gde-rezat-metki — позиции разреза, метки host, sld, midsld, endhost, списки меток и границы.
  • Видео 5. 05-multisplit-rezat-na-chasti — как multisplit режет пакет на части и отправляет их по порядку.
  • Видео 6. 06-peremeshat-disorder — как multidisorder отправляет части в обратном порядке и что происходит с сервером.
  • Видео 7. 07-fake-i-ego-usloviya — поддельные пакеты и условия, при которых они доходят до DPI, но не до сервера.
  • Видео 16. 16-vnutri-programmy — правило ядра, очередь, главный цикл, обратный вызов, отправка через сырой сокет и защита от петли.

📚 См. также


[!quote] 🤖 Эти статьи открыты — можно обучать на них ИИ При желании вы можете натренировать ИИ на наших статьях. Исходное форматирование доступно в Forgejo: исходник этой заметки · скачать весь репозиторий одним zip-архивом.