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 (сборка из исходников)#
- Установите зависимости для сборки (пример для Debian/Ubuntu):
sudo apt update
sudo apt install -y git build-essential pkg-config lua5.4 liblua5.4-dev
- Скачайте репозиторий и соберите:
git clone https://github.com/bol-van/zapret2.git
cd zapret2
make
- Проверьте, что бинарники собрались (названия могут отличаться в зависимости от платформы/целей сборки):
ls -la
Если в проекте есть отдельные цели сборки (например, make nfqws2), используйте их:
make nfqws2
Windows (запуск winws2 + WinDivert)#
На Windows перехват трафика обычно делается через движок winws2, который использует драйвер WinDivert.
- Скачайте релиз zapret2 (v0.9.5) со страницы Releases на GitHub и распакуйте в папку, например:
mkdir C:\zapret2
-
Запускайте консоль PowerShell от имени администратора.
-
Убедитесь, что 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 часто «узнает» протокол по первым пакетам.
- Включите необходимые модули/параметры и создайте таблицу/правила:
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"
- Запустите
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/поведенческим признакам.
- Включите 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
- Запустите
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: не ломать весь интернет — таргетировать только отдельные домены/сети#
Самая частая ошибка новичков — включить перехват «на все», после чего начинаются странные обрывы, падает скорость, ломаются банки/игры. Правильный подход: ограничить воздействие.
Практическая схема:
- В стратегии используйте hostlist (список доменов) или ipset/списки подсетей (если проект поддерживает это в вашей сборке).
- В 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 без сторонних серверов и кто готов аккуратно настраивать перехват и стратегии. Новичкам он подходит, если действовать пошагово: узкий перехват, одна стратегия, проверка, затем расширение.
Что читать дальше?#
- Откройте VPN-гайды GigaTap, чтобы пройти маршрут от настройки до диагностики.
- Используйте помощник VPN start, если нужно выбрать между настройкой, клиентом, docs или профилем.
- Для device-specific импорта откройте VPN client setup hub.
- Сверьте продуктовые шаги в официальных docs GigaTap перед изменением клиентского профиля.
- Для соседнего сценария посмотрите гайд по ByeDPIManager для Windows.
Если проблема похожа на 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 и диагностику.