No description
  • Rust 98.3%
  • Nix 1.7%
Find a file
2026-09-30 23:39:02 +03:00
.github chore(master): release zapret-rust 2.2.0 2026-09-30 23:39:02 +03:00
crates feat: add router mode 2026-09-30 23:37:04 +03:00
docs fix: ttl flags works 2026-09-30 23:37:04 +03:00
locales feat: add router mode 2026-09-30 23:37:04 +03:00
nix chore: add background service support for NixOS 2026-09-07 09:50:56 +03:00
src style: better main ui 2026-09-30 23:37:04 +03:00
.gitignore Переделывание работы пресетов доменов и убирание не нужного пресета 2026-07-23 11:40:12 +10:00
Cargo.lock chore(master): release zapret-rust 2.2.0 2026-09-30 23:39:02 +03:00
Cargo.toml chore(master): release zapret-rust 2.2.0 2026-09-30 23:39:02 +03:00
CHANGELOG.md chore(master): release zapret-rust 2.2.0 2026-09-30 23:39:02 +03:00
CONTRIBUTING.md docs: rewrite the package map for the five-crate split 2026-09-30 23:37:04 +03:00
flake.lock chore: add nix flake 2026-08-04 09:52:54 +03:00
flake.nix chore: add background service support for NixOS 2026-09-07 09:50:56 +03:00
README.md feat: add router mode 2026-09-30 23:37:04 +03:00
rustfmt.toml style: add rustfmt.toml with max_width = 120 and apply it 2026-08-05 00:23:43 +03:00

💻 Zapret-Rust TUI

Plug&Play решение для обхода DPI блокировок


🔧 Требования к системе

Операционная система Требования к окружению Используемый бэкенд
Linux nftables (или iptables), права root (для настройки фаервола и установки службы) nftables (через API) / iptables
Windows Права Администратора (для установки службы и драйвера WinDivert) WinDivert (автоматически скачивается вместе с бинарниками)

Быстрый старт

1. Сборка из исходников

Для сборки проекта вам понадобится установленный Rust-инструментарий (cargo).

git clone https://github.com/Sergeydigl3/zapret-discord-youtube-rust.git
cd zapret-discord-youtube-rust

cargo build --release

Готовый бинарный файл будет находиться по пути target/release/zapret-rust.


1.1 Готовый файл

Если собирать проект не хочется то стабильные версии находятся во вкладке releases. Их нужно положить в любую директорию и открыть.


1.2 Установка через Nix (Flakes)

Если у вас установлен Nix с поддержкой Flakes, вы можете запустить или установить утилиту прямо из репозитория. Учтите, что пакет собирается из исходников - у проекта нет бинарного кэша, поэтому при первом запуске произойдёт локальная компиляция:

nix run github:Sergeydigl3/zapret-discord-youtube-rust

Использование в качестве пакета

Добавление в конфигурацию NixOS (пример):

{
  inputs.zapret-rust.url = "github:Sergeydigl3/zapret-discord-youtube-rust";

  outputs = { self, nixpkgs, zapret-rust, ... }: {
    nixosConfigurations.my-host = nixpkgs.lib.nixosSystem {
      system = "x86_64-linux";
      modules = [
        ./configuration.nix
        {
          environment.systemPackages = [
            zapret-rust.packages.x86_64-linux.default
          ];
        }
      ];
    };
  };
}

Бинарник оборачивается (wrapProgram) так, что при запуске ему доступны nftables и polkit из PATH.

Использование в качестве системной службы (NixOS Module)

Репозиторий предоставляет NixOS-модуль для удобной настройки и автоматического запуска zapret-rust в фоне через systemd.

Пример подключения модуля и настройки службы:

{
  inputs.zapret-rust.url = "github:Sergeydigl3/zapret-discord-youtube-rust";

  outputs = { self, nixpkgs, zapret-rust, ... }: {
    nixosConfigurations.my-host = nixpkgs.lib.nixosSystem {
      system = "x86_64-linux";
      modules = [
        ./configuration.nix
        zapret-rust.nixosModules.zapret-rust
        {
          services.zapret-rust = {
            enable = true;
            interface = "any";
            strategy = "general.bat";
            backend = "nftables";
          };
        }
      ];
    };
  };
}

Среда разработки

Используйте предоставленный dev-шелл (flake):

nix develop .

Он включает компоненты Rust-тулчейна: cargo, rustc, rustfmt, clippy, rust-analyzer, а также nftables и polkit.


2. Запуск в интерактивном режиме (TUI)

Просто запустите утилиту без аргументов. Она сама проверит права и при необходимости запросит пароль:

./target/release/zapret-rust #Linux

На Windows открыть файл можно мышью

Tip

При первом запуске перейдите в меню 📥 Загрузчик (Downloader) -> 📦 Скачать всё (по умолчанию) (Download All). Программа скачает необходимые бинарные файлы nfqws/winws и актуальные файлы стратегий. После этого выберите интерфейс и стратегию в главном меню и нажмите 🚀 Запустить (Run).

Управление

Навигация по всем меню — стрелками либо vim-motions (h j k l):

Клавиши Действие
↑ / ↓ или k / j Перемещение по пунктам меню
← / → или h / l Переключение значения пункта
ENTER / SPACE Переключить значение, открыть подменю или выполнить действие
ESC / q Назад в предыдущее меню, из главного — выход (во время работы автотюна — мгновенная отмена)

💻 Использование CLI (Неинтерактивный режим)

Утилиту можно запускать из консоли с передачей параметров (например, для использования в собственных скриптах или автозапуске).

Доступные флаги и опции:

Использование: run [опции]

Запуск zapret на переднем плане (полезно для тестов).

Опции:
   -c, --config ФАЙЛ       Загрузить конфигурацию из файла (например, conf.env)
   -s, --strategy ИМЯ      Использовать конкретную стратегию (например, discord.bat)
   -i, --interface ИМЯ     Сетевой интерфейс (по умолчанию: any)
   -t, --gamefiltertcp     Включить игровой TCP фильтр
   -u, --gamefilterudp     Включить игровой UDP фильтр
   -d, --cache-dir ПУТЬ    Папка для кэша загрузок и конфигураций
   -h, --help              Показать эту справку

Примеры запуска:

  • Запуск с определенной стратегией на интерфейсе eth0:
    sudo ./zapret-rust -s discord.bat -i eth0
    
  • Запуск с включенными игровыми фильтрами:
    sudo ./zapret-rust -s general.bat -t -u
    
  • Запуск с использованием готового конфигурационного файла:
    sudo ./zapret-rust --config conf.env
    

📂 Структура конфигурации и кэша

Все скачанные зависимости, конфигурации и пользовательские списки хранятся в рабочей директории кэша (по умолчанию рядом с исполняемым файлом, либо задается через аргумент --cache-dir / переменную окружения ZAPRET_CACHE_DIR):

  • bin/ — исполняемые файлы nfqws или winws.exe + библиотеки WinDivert.
  • zapret-discord-youtube-linux/ — склонированный репозиторий со стратегиями обхода.
  • autotune_preset_discord.txt, autotune_preset_youtube.txt, autotune_preset_social.txt, autotune_custom.txt — редактируемые списки доменов для пресетов автотюна.
  • ttl_domains.txt — редактируемый список доменов для автоподбора TTL.
  • conf.env — файл настроек последнего сеанса TUI. Формат файла:
    interface=any
    strategy=discord.bat
    gamefiltertcp=true
    gamefilterudp=true
    # Параметр только для линукса:
    backend=nftables
    # Фиксированный DPI TTL (пусто = авто):
    dpi_desync_ttl=
    

🔧 Управление фоновой службой (Автозапуск)

Вы можете настроить запуск zapret-rust в фоне в качестве системной службы.

Как это сделать:

  1. Запустите TUI режим.
  2. Выберите сетевой интерфейс, подходящую стратегию обхода и игровые фильтры.
  3. Перейдите в раздел 🔧 Служба (Фон) (Service Management).
  4. Выберите 📦 Установить службу (Install Service).
  5. Запустите службу через пункт 🚀 Запустить службу (Start Service).

Important

  • На Linux служба регистрируется под именем zapret-rust.service (или аналогичным в зависимости от вашей Init-системы) и настраивается на автоматический запуск при старте системы (WantedBy=multi-user.target).
  • Для пользователей NixOS: Настоятельно рекомендуется использовать предоставляемый NixOS-модуль (services.zapret-rust.enable = true;) вместо установки службы через TUI, чтобы сохранить декларативность системы.
  • На Windows служба устанавливается как системная служба Windows с флагом запуска --service.

🔒 Исключения Windows Defender

Если встроенный антивирус Windows блокирует запуск winws.exe или драйвера WinDivert, вы можете внести рабочую папку программы в исключения прямо из TUI:

  1. Запустите TUI под Администратором.
  2. Откройте 🔒 Исключения Defender (Defender Exclusions).
  3. Нажмите ➕ Добавить папку в исключения (Add folder to exclusions).
  4. Запустится фоновый процесс PowerShell, который безопасно добавит рабочую директорию в белый список антивируса.

🔍 Автотюн: проверки блокировок

Автотюн определяет каким именно способом ваш провайдер блокирует сайты, а затем тестирует стратегии обхода на реальных доменах. Весь процесс проходит в несколько этапов.

Вкладки основного меню

Вкладка Описание
🌐 Домены Выбор набора доменов для проверки. Доступные пресеты: Discord, YouTube, Social (Twitter, Reddit, Telegram и др.), Custom (домены пользователя). Можно выбрать несколько пресетов одновременно.
🎯 Запросов/домен Количество curl-запросов на каждый протокол для каждого домена. Если хотя бы один из запросов упал — протокол считается заблокированным. По умолчанию 3.
📋 Стратегии Выбор стратегий обхода для тестирования. Автотюн запустит каждую стратегию, дождётся запуска nfqws/winws, а затем проверит, можно ли достучаться до заблокированных доменов.
🔌 Протоколы Какие протоколы проверять для каждого домена: HTTP, TLS 1.2, TLS 1.3, QUIC.
🚫 Блокировки Какие методы DPI-блокировки проверять на уровне сети (DNS-спуфинг, TCP RST, SNI, SIBERIAN, QUIC, CIDR).
📝 Списки доменов Редактируемые txt-файлы со списками доменов для каждого пресета и для подбора TTL. Домены из этих файлов полностью заменяют встроенные. По одному домену на строку, строки с # игнорируются.
📊 Результаты Просмотр результатов последнего запуска автотюна.
🚀 Запустить автотюн Запуск диагностики. Автоматически выполнит все выбранные проверки и тесты. Во время прогона отображается живой таймер [MM:SS], а кастомный TTL временно сбрасывается в auto. Нажатие q или ESC принудительно отменяет диагностику за <0.1 сек с моментальным восстановлением исходных настроек сети и TTL.
🔙 Назад Возврат в главное меню.

Important

🚨 Отключите все обходы блокировок перед запуском автотюна! Если zapret/nfqws уже запущен — автотюн не стартует с ошибкой.

Вкладка «🔌 Протоколы»

Протокол Что проверяет
HTTP (порт 80) curl-запрос по HTTP. Большинство сайтов перенаправляют на HTTPS (3xx), это считается успехом.
TLS 1.2 curl-запрос с принудительным TLS 1.2. Проверяет, работает ли устаревшая версия TLS.
TLS 1.3 curl-запрос с принудительным TLS 1.3. Основной способ проверки доступности — именно по HTTPS ходят браузеры.
QUIC (UDP 443) Проверка через настоящий QUIC v1 Initial-пакет (UDP 443).

Вкладка «🚫 Блокировки»

Проверка Описание
DNS-спуфинг Сравнивает IP-адреса доменов с эталонными. Если не совпадают — DNS подменяется.
TCP RST Устанавливает TCP-соединение и проверяет, сбрасывает ли DPI пакеты (RST) или таймаутит.
SNI Сравнивает подключение по доменному имени vs прямому IP. Если IP работает, а домен нет — DPI блокирует по имени сервера в TLS.
SIBERIAN Открывает 15+ параллельных соединений к одному IP. Если часть не устанавливается — провайдер ограничивает количество соединений.
QUIC Отправляет настоящий QUIC v1 Initial-пакет (RFC 9000/9001: HKDF, AES-128-GCM, защита заголовков, TLS 1.3 ClientHello) на IP-адреса и проверяет ответ. Если нет — QUIC-трафик заблокирован. В отличие от «пустышек» это не отсеивается фильтрами, пропускающими реальный HTTP/3.
CIDR Тестирует подключения к IP в разных подсетях (Cloudflare, Google DNS, Discord CDN). Если часть заблокирована — блокировка по IP-диапазонам.

Интерпретация результатов

Сетевые проверки:

  • ✅ = Метод блокировки не обнаружен
  • ❌ = Метод блокировки обнаружен (выбирайте стратегию с обходом этого метода)
  • ⏩ = Проверка не выполнена (проблема с интернетом)

Проверки протоколов доменов (до запуска стратегии):

  • ✅ = Протокол работает (доступен без обхода)
  • ❌ = Протокол заблокирован
  • ⏩ = Пропущено (домен недоступен)

Проверки стратегий:

  • ✅ = Стратегия помогает (домены доступны)
  • ❌ = Стратегия не помогает (домены заблокированы)
  • Стратегия считается «работающей», если через неё по TLS (HTTPS) доступно не менее половины заблокированных доменов. Побеждает стратегия, открывшая больше всего доменов.

🎯 Подбор TTL (Автоподбор DPI)

Некоторые стратегии обхода не помогают при жёсткой DPI-блокировке. В таких случаях помогает фиксированный TTL пакетов — DPI часто не видит пакеты, «умирающие» на промежуточных хопах.

Пункт 🎯 Подбор TTL в главном меню позволяет:

  • Автоподбор (ENTER): программа перебирает TTL от 1 до 20, запуская nfqws/winws с фиксированным TTL и проверяя доступность доменов из ttl_domains.txt по TLS 1.3. Первое сработавшее значение сохраняется в конфиг.
  • Фиксированное значение (←/→): вручную задать TTL от 1 до 20 либо вернуться к режиму Авто (используется штатный --dpi-desync-autottl).

Выбранный TTL применяется к каждой группе параметров стратегии при запуске.

Note

Домены для тестирования можно редактировать в файле ttl_domains.txt или через меню 📝 Списки доменов автотюна.


🎭 Смена фейков

Important

🚨 Работает только с версии стратегий 1.10.0 и выше!

В меню можно заменять активные .bin-файлы фейков для Discord UDP и GameFilter UDP.

Как сменить фейки:

  1. Выберите «Смена фейков» в главном меню
  2. Выберите цель: Discord UDP или GameFilter UDP
  3. Из списка доступных .bin-файлов выберите нужный
  4. Файл скопируется в ACTIVE_DISCORD_UDP.bin / ACTIVE_GAME_UDP.bin

Выбранные фейки сохраняются в conf.env и автоматически подставляются при следующем запуске. При первом запуске используются фейки по умолчанию: quic_initial_steamcommunity_com.bin для Discord и quic_initial_4pda.to.bin для GameFilter.


🌐 Режим роутера (только Linux)

⚙️ Расширенные настройки → 🌐 Режим роутера пропускает трафик другого устройства (например, телефона) через эту машину. Укажите на телефоне шлюзом IP этой машины, а в главном меню — интерфейс в интернет.

При старте включается net.ipv4.ip_forward (файл /etc/sysctl.d/99-zapret-router.conf + /proc/sys/net/ipv4/ip_forward) и добавляется masquerade на выбранный интерфейс. При остановке всё снимается.


📋 Логирование

При каждом запуске nfqws создаётся лог-файл:

<cache_dir>/logs/zapret.log

Файл содержит полную информацию для диагностики:

  • System Info — ОС, ядро, дистрибутив, загруженные модули netfilter, версия nfqws, количество и версия стратегий, сетевые интерфейсы
  • Config — содержимое конфигурации пользователя (conf.env)
  • Terminal — весь вывод терминала при запуске, включая вывод самого nfqws (загрузка hostlist'ов, привязка очереди и т.д.)
  • Strategy params — параметры запуска nfqws в исходном формате .bat файла
  • Stop — результат остановки nfqws (очистка правил, остановка процессов)

При каждом новом запуске лог перезаписывается. Секция остановки дописывается в конец при завершении работы.