- Rust 98.3%
- Nix 1.7%
| .github | ||
| crates | ||
| docs | ||
| locales | ||
| nix | ||
| src | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CHANGELOG.md | ||
| CONTRIBUTING.md | ||
| flake.lock | ||
| flake.nix | ||
| README.md | ||
| rustfmt.toml | ||
💻 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 в фоне в качестве системной службы.
Как это сделать:
- Запустите TUI режим.
- Выберите сетевой интерфейс, подходящую стратегию обхода и игровые фильтры.
- Перейдите в раздел 🔧 Служба (Фон) (Service Management).
- Выберите 📦 Установить службу (Install Service).
- Запустите службу через пункт 🚀 Запустить службу (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:
- Запустите TUI под Администратором.
- Откройте 🔒 Исключения Defender (Defender Exclusions).
- Нажмите ➕ Добавить папку в исключения (Add folder to exclusions).
- Запустится фоновый процесс 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.
Как сменить фейки:
- Выберите «Смена фейков» в главном меню
- Выберите цель: Discord UDP или GameFilter UDP
- Из списка доступных .bin-файлов выберите нужный
- Файл скопируется в 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 (очистка правил, остановка процессов)
При каждом новом запуске лог перезаписывается. Секция остановки дописывается в конец при завершении работы.