zapret2: практический гайд по anti-DPI для обхода блокировок без VPN

Пошаговый гайд по zapret2: установка и базовая настройка anti-DPI на Linux и Windows, чтобы обойти блокировки без сторонних серверов.

2026-04-14 GIGATAP Team #vpn
#vpn#anti-dpi#censorship-circumvention#freebsd#linux#openbsd

zapret - anti-DPI toolkit для случаев, когда трафик блокируется или портится packet inspection, а не самим сервисом. Его нужно внедрять аккуратно: выбирать минимальный interception scope, тестировать стратегии по одной и держать rollback до маршрутизации чувствительных приложений, особенно на рабочих устройствах.

Что такое zapret2#

zapret2 — это набор инструментов против DPI (Deep Packet Inspection), то есть против «умной» фильтрации трафика провайдером или регулятором. В отличие от VPN, zapret2 не отправляет ваши данные через сторонний сервер и не создает «туннель». Он локально изменяет сетевые пакеты так, чтобы DPI сложнее было распознать протокол или «сигнатуру» (например, попытку заблокировать HTTPS-сайт или определить VPN по характерным признакам).

Кому это полезно:

  • тем, у кого блокируются отдельные сайты/сервисы по HTTP(S);
  • тем, у кого «режется» QUIC/HTTP3 (часто это UDP 443) или выборочно замедляются домены;
  • тем, кто хочет точечно усложнить сигнатурный анализ (частичная обфускация), не поднимая VPN.

Важно понимать: zapret2 — не «волшебная кнопка». DPI меняется, и рабочая схема может перестать работать. Сильная сторона zapret2 — гибкость: логика «атаки» на DPI выносится в Lua-стратегии, которые проще адаптировать, чем переписывать C-код.

Установка#

Ниже — базовые варианты. Старайтесь ставить и запускать zapret2 на устройстве, через которое проходит трафик (часто это роутер/OpenWrt или ПК, который раздает интернет).

Linux (сборка из исходников)#

  1. Установите зависимости для сборки (пример для Debian/Ubuntu):
sudo apt update
sudo apt install -y git build-essential pkg-config lua5.4 liblua5.4-dev
  1. Скачайте репозиторий и соберите:
git clone https://github.com/bol-van/zapret2.git
cd zapret2
make
  1. Проверьте, что бинарники собрались (названия могут отличаться в зависимости от платформы/целей сборки):
ls -la

Если в проекте есть отдельные цели сборки (например, make nfqws2), используйте их:

make nfqws2

Windows (запуск winws2 + WinDivert)#

На Windows перехват трафика обычно делается через движок winws2, который использует драйвер WinDivert.

  1. Скачайте релиз zapret2 (v0.9.5) со страницы Releases на GitHub и распакуйте в папку, например:
mkdir C:\zapret2
  1. Запускайте консоль PowerShell от имени администратора.

  2. Убедитесь, что WinDivert присутствует рядом с winws2.exe (обычно он идет в комплекте релиза). Если драйвер блокируется системой, проверьте SmartScreen/антивирус и политики подписи драйверов.

Проверочная команда (пример — вывести справку):

cd C:\zapret2
.\winws2.exe --help

macOS#

zapret2 ориентирован на Linux/BSD/Windows. Для macOS «из коробки» это не основной сценарий. Если вам нужен обход DPI на macOS, чаще используют VPN/прокси или решения на уровне роутера. Самый практичный путь для новичка — поставить zapret2 на роутер или Linux-шлюз, через который идет трафик macOS.

Базовая настройка#

Ключевая идея: трафик сначала «вытаскивается» из сетевого стека ОС и перенаправляется в zapret2 (на Linux — через nftables/iptables в NFQUEUE, на Windows — через фильтры WinDivert). Чем точнее вы отфильтруете нужные пакеты в ядре, тем меньше нагрузка.

Linux: минимальный перехват через nftables + NFQUEUE#

Пример ниже перехватывает только первые пакеты соединений на:

  • TCP 80/443 (HTTP/HTTPS)
  • UDP 443 (часто QUIC/HTTP3)

и отправляет их в очередь NFQUEUE 200. Это хороший старт: DPI часто «узнает» протокол по первым пакетам.

  1. Включите необходимые модули/параметры и создайте таблицу/правила:
sudo nft delete table inet ztest 2>/dev/null || true
sudo nft create table inet ztest
sudo nft add chain inet ztest post "{type filter hook postrouting priority 101;}"
sudo nft add rule inet ztest post meta mark and 0x40000000 == 0 tcp dport "{80,443}" ct original packets 1-12 queue num 200 bypass
sudo nft add rule inet ztest post meta mark and 0x40000000 == 0 udp dport "{443}" ct original packets 1-12 queue num 200 bypass

sudo sysctl -w net.netfilter.nf_conntrack_tcp_be_liberal=1

sudo nft add chain inet ztest pre "{type filter hook prerouting priority -101;}"
sudo nft add rule inet ztest pre meta mark and 0x40000000 == 0 tcp sport "{80,443}" ct reply packets 1-12 queue num 200 bypass
sudo nft add rule inet ztest pre meta mark and 0x40000000 == 0 udp sport "{443}" ct reply packets 1-12 queue num 200 bypass

sudo nft add chain inet ztest predefrag "{type filter hook output priority -401;}"
sudo nft add rule inet ztest predefrag "mark & 0x40000000 != 0x00000000 notrack"
  1. Запустите nfqws2, указав номер очереди и Lua-стратегию.

В репозитории zapret2 обычно есть готовые Lua-скрипты/стратегии. Для первого запуска начните с демонстрационного/базового скрипта из набора проекта (путь зависит от структуры репозитория). Пример:

sudo ./nfqws2 --qnum=200 --lua=./strategies/default.lua

Если вы не знаете, какие Lua-скрипты доступны, найдите их:

rg -n "function|strategy|return" -S strategies 2>/dev/null || true
ls -la strategies 2>/dev/null || true

Идея простая: nftables отправляет пакеты в NFQUEUE, nfqws2 читает их, применяет стратегию и возвращает обратно в стек.

Windows: минимальный перехват портов через winws2#

На Windows проще стартовать с перехвата портов целиком.

Пример: перехватываем исходящий TCP на 80/443 и UDP на 443:

cd C:\zapret2
.\winws2.exe --wf-tcp-out=80,443 --wf-udp-out=443 --lua .\strategies\default.lua

Если вам нужно перехватывать и входящий трафик (реже нужно, но иногда помогает), добавьте:

.\winws2.exe --wf-tcp-in=80,443 --wf-udp-in=443 --wf-tcp-out=80,443 --wf-udp-out=443 --lua .\strategies\default.lua

Если фильтр слишком широкий и дает нагрузку, сужайте: перехватывайте только нужные порты и только первые пакеты (если стратегия/движок это поддерживает), либо добавляйте более точные raw-фильтры WinDivert.

Основные сценарии использования#

Ниже — 3 практичных сценария, которые обычно дают быстрый результат у новичков.

Сценарий 1: обход блокировок HTTPS (TCP 443) на Linux#

Цель: изменить первые пакеты TLS-сессии так, чтобы DPI не распознал «запрещенный» домен по SNI/поведенческим признакам.

  1. Включите NFQUEUE только для TCP 443 (чтобы не трогать лишнее):
sudo nft delete table inet ztest 2>/dev/null || true
sudo nft create table inet ztest
sudo nft add chain inet ztest post "{type filter hook postrouting priority 101;}"
sudo nft add rule inet ztest post tcp dport 443 ct original packets 1-12 queue num 200 bypass
  1. Запустите nfqws2 с TLS-ориентированной стратегией (примерное имя; выбирайте из реальных файлов в strategies/):
sudo ./nfqws2 --qnum=200 --lua=./strategies/tls_basic.lua

Проверка: попробуйте открыть проблемный домен и параллельно посмотреть, не растет ли нагрузка и нет ли обрывов.

Сценарий 2: проблемы с QUIC/HTTP3 (UDP 443) — точечная обработка#

Частая ситуация: сайты/видео/мессенджеры «не грузятся» именно по QUIC. Тогда помогает обработка UDP 443 или даже принудительное «сломать» QUIC, чтобы клиент откатился на TCP (это зависит от стратегии).

Linux (NFQUEUE на UDP 443):

sudo nft delete table inet ztest 2>/dev/null || true
sudo nft create table inet ztest
sudo nft add chain inet ztest post "{type filter hook postrouting priority 101;}"
sudo nft add rule inet ztest post udp dport 443 ct original packets 1-12 queue num 200 bypass
sudo ./nfqws2 --qnum=200 --lua=./strategies/quic_basic.lua

Windows:

cd C:\zapret2
.\winws2.exe --wf-udp-out=443 --lua .\strategies\quic_basic.lua

Проверка: если сервис ожил, но появились задержки — сузьте перехват до «первых пакетов» (если доступно) или отключите обработку входящих пакетов.

Сценарий 3: не ломать весь интернет — таргетировать только отдельные домены/сети#

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

Практическая схема:

  1. В стратегии используйте hostlist (список доменов) или ipset/списки подсетей (если проект поддерживает это в вашей сборке).
  2. В nftables перехватывайте только 80/443/443udp, но внутри стратегии включайте «атаки» только для целевых хостов.

Пример структуры hostlist (файл hosts.txt):

example.com
sub.example.com
video.example.net

Пример запуска nfqws2 с передачей hostlist (параметр может отличаться, смотрите --help вашего бинарника):

sudo ./nfqws2 --qnum=200 --lua=./strategies/default.lua --hostlist=./hosts.txt

Если отдельного параметра --hostlist нет, hostlist часто читают прямо в Lua-скрипте (тогда путь задается внутри .lua).

Советы и нюансы#

  • Держите перехват узким: начинайте с tcp dport 443 или udp dport 443 и с первых 1–12 пакетов, как в примерах nftables; так меньше нагрузка и меньше побочных эффектов.
  • Диагностика по шагам: если «вообще не работает», сначала проверьте, что пакеты реально попадают в NFQUEUE/WinDivert (на Linux временно расширьте правило и посмотрите счетчики nft list ruleset, на Windows — убедитесь, что запуск от администратора).
  • Не мешайте сразу много техник: включите одну стратегию, проверьте, затем добавляйте следующую; иначе вы не поймете, что именно дало эффект или что сломало соединения.
  • Учтите, что zapret2 не шифрует трафик: он помогает обходить DPI, но не заменяет VPN по privacy-модели; провайдер все равно видит IP-адреса и метаданные (и иногда домены по DNS, если вы не защищаете DNS отдельно).
  • Комбинируйте с базовым OPSEC: используйте DoH/DoT (или хотя бы надежный DNS), обновляйте браузер, отключайте «экспериментальные» сетевые фичи только при необходимости, и ведите журнал изменений (какие правила/стратегии включали).

Вывод#

zapret2 — хороший инструмент для тех, кому нужен локальный anti-DPI без сторонних серверов и кто готов аккуратно настраивать перехват и стратегии. Новичкам он подходит, если действовать пошагово: узкий перехват, одна стратегия, проверка, затем расширение.

Что читать дальше?#

Если проблема похожа на mismatch между оплатой, entitlement и реальным provider state, сначала фиксируйте симптомы клиента и только потом меняйте протокол или профиль.

Определение#

  • zapret - anti-DPI toolkit, который меняет обработку пакетов и поведение соединений, чтобы снизить блокировки или вмешательство deep packet inspection систем.

Comparison#

Стратегия Когда использовать На что смотреть
zapret anti-DPI Фильтрация бьет по packet patterns или setup соединения. Широкие interception rules могут сломать другой трафик.
VPN Нужна шифрованная маршрутизация через провайдера. Фильтр может блокировать именно VPN protocol.
DNS change Блокировка только на уровне domain resolution. Не поможет при фильтрации IP, SNI или поведения пакетов.

FAQ#

zapret проще VPN?#

zapret может быть легче VPN для конкретных DPI-проблем, но он менее turnkey. Нужно понимать interception scope, поддержку платформы и способ отката стратегии, если обычный трафик сломается.

Что тестировать первым?#

Сначала тестируйте один домен или приложение, одну стратегию и один network path. Если сработало, расширяйте аккуратно; если нет, маленький тест упрощает rollback и диагностику.