- service.sh: split service_remove into internal (no prompts) and interactive versions to prevent 'eternal wait' when installing new strategy. Install now calls service_remove_internal > /dev/null instead of service_remove. Also filter strategy list to general*.sh only to avoid clutter. Systemd ExecStart now points to run_strategy.sh <name> consistently. - run_strategy.sh: add SIGTERM/SIGINT trap cleanup_strategy() that kills nfqws and cleans up firewall. Prevents stale nfqws/firewall rules after autotest kill. Also handles nfqws exit gracefully with final cleanup. - autotest.sh: rewritten to test strategies by config name (not wrapper filename). Stop now sends SIGTERM to wrapper (which triggers trap cleanup) instead of bare kill. Added extra sleep after stop to let trap fire. Auto-install ExecStart fixed to run_strategy.sh <strategy>. - setup.sh: added libmnl-dev and zlib1g-dev to Ubuntu/Debian dependency install to prevent build failures (missing libmnl/libmnl.h and zlib.h). - general*.sh: removed UTF-8 BOM (0xEF 0xBB 0xBF) that caused 'exec format error' when running scripts on Linux. All 19 wrappers cleaned. - ensure_wrappers.sh: always rewrite wrappers to ensure no stale BOM or paths. Fixes: eternal wait on menu option 1, nfqws build failure, stale processes after test.
Zapret for Linux (Discord + YouTube + GitHub + Telegram + Steam)
Linux-аналог популярного репозитория Flowseal/zapret-discord-youtube для обхода DPI (Deep Packet Inspection).
Ключевая фича: sync_from_upstream.sh — автоматическое слежение за оригинальным Windows-репозиторием. При обновлении Flowseal скрипт сам скачает новые списки доменов, hosts и авто-конвертирует новые .bat стратегии в Linux-формат. Подробнее в разделе Синхронизация upstream.
Важно для пользователей из России
GitHub заблокирован в РФ. Установщик автоматически использует прокси/зеркала, но рекомендуется:
-
Если есть VPN/прокси — самый простой способ:
# Вариант A: системный прокси export HTTPS_PROXY=socks5://127.0.0.1:1080 sudo ./install.sh # Вариант B: proxychains proxychains ./install.sh -
Если нет VPN на целевой машине — подготовьте офлайн-пакет:
# На машине С интернетом (с VPN): cd /opt/zapret proxychains ./prepare_offline_bundle.sh # Перенесите zapret-discord-youtube-linux-bundle.tar.gz # на целевую машину, распакуйте и: sudo ./install.sh --offline -
Если установка падает на скачивании:
- Проверьте
.env.example→ создайте.envсGITHUB_PROXY=... - Или передайте прокси через переменную окружения
- Проверьте
Подробнее: раздел Offline / РФ внизу.
Быстрый старт
# 1. Установка git (один раз)
sudo apt install git # Ubuntu/Debian
sudo pacman -S git # Arch/Manjaro
sudo dnf install git # Fedora
# 2. Клонирование (БЕЗ sudo — создаёт файлы от текущего пользователя)
cd /opt
git clone https://giteas.stitch505.su/Stitch505/zapret-discord-youtube-linux.git zapret
cd zapret
# 3. Установка (одна команда — всё сделает)
sudo ./install.sh
После install.sh сервис запущен и будет автозапускаться.
Важно: Все скрипты (
install.sh,setup.sh,general*.sh,service.sh,autotest.sh,update.sh) должны запускаться от root (черезsudo). Сами скрипты проверяют это автоматически.
Установка по дистрибутивам
Ubuntu / Debian / Linux Mint / Pop!_OS / Zorin OS / Kali
sudo apt update
sudo apt install -y git curl make gcc iptables nftables libnetfilter-queue-dev
cd /opt
git clone https://giteas.stitch505.su/Stitch505/zapret-discord-youtube-linux.git zapret
cd zapret
sudo ./install.sh
Arch Linux / Manjaro / EndeavourOS / Garuda / Artix
sudo pacman -Syu --noconfirm git curl make gcc iptables nftables libnetfilter_queue
cd /opt
git clone https://giteas.stitch505.su/Stitch505/zapret-discord-youtube-linux.git zapret
cd zapret
sudo ./install.sh
Fedora / RHEL / CentOS / AlmaLinux / Rocky Linux
sudo dnf install -y git curl make gcc iptables nftables libnetfilter_queue-devel
cd /opt
git clone https://giteas.stitch505.su/Stitch505/zapret-discord-youtube-linux.git zapret
cd zapret
sudo ./install.sh
Alpine Linux
sudo apk add --no-cache git curl make gcc iptables nftables libnetfilter_queue-dev linux-headers
cd /opt
git clone https://giteas.stitch505.su/Stitch505/zapret-discord-youtube-linux.git zapret
cd zapret
sudo ./install.sh
Gentoo / Funtoo
sudo emerge --ask dev-vcs/git net-misc/curl sys-devel/gcc sys-devel/make net-firewall/iptables net-firewall/nftables
cd /opt
git clone https://giteas.stitch505.su/Stitch505/zapret-discord-youtube-linux.git zapret
cd zapret
sudo ./install.sh
openSUSE / SUSE
sudo zypper install -y git curl make gcc iptables nftables libnetfilter_queue-devel
cd /opt
git clone https://giteas.stitch505.su/Stitch505/zapret-discord-youtube-linux.git zapret
cd zapret
sudo ./install.sh
Void Linux
sudo xbps-install -Sy git curl make gcc iptables nftables libnetfilter_queue-devel
cd /opt
git clone https://giteas.stitch505.su/Stitch505/zapret-discord-youtube-linux.git zapret
cd zapret
sudo ./install.sh
NixOS
nix-shell -p git curl gnumake gcc iptables nftables libnetfilter_queue
cd /opt
git clone https://giteas.stitch505.su/Stitch505/zapret-discord-youtube-linux.git zapret
cd zapret
sudo ./install.sh
Что делает ./install.sh (шаг за шагом)
-
Синхронизация upstream (
sync_from_upstream.sh)- Клонирует оригинальный
Flowseal/zapret-discord-youtube - Мержит свежие
lists/*.txt(Discord, YouTube, GitHub, Telegram, Steam) - Обновляет
.service/hosts(статичные IP для GitHub/Telegram) - При необходимости конвертирует новые
.batстратегии вstrategies/*.conf
- Клонирует оригинальный
-
Установка зависимостей (
setup.sh) — по дистрибутиву -
Сборка
nfqws(install_nfqws.sh) — git clone bol-van/zapret, make, fake .bin пакеты -
Автотест (
autotest.sh --auto) — перебирает стратегии, находит рабочую, ставит в systemd
Структура проекта (новая модульная архитектура)
.
├── bin/ # nfqws + fake .bin (собирается)
├── lib/
│ └── functions.sh # Общие: firewall, цвета, cleanup
├── lists/ # Списки доменов и IP
│ ├── list-general.txt # Discord, YouTube, GitHub, Telegram, Steam
│ ├── list-google.txt # Google/YouTube
│ ├── list-exclude.txt # Исключения (банки, госуслуги)
│ ├── ipset-all.txt # IP-диапазоны
│ └── ipset-exclude.txt # Локальные подсети
├── strategies/ # Новое: модульные стратегии
│ └── general.conf # Конфиг стратегии (RULE1=... RULE2=...)
│ # Другие .conf появляются автоматически через sync_from_upstream.sh
├── utils/
│ ├── test_zapret.sh # curl-тесты
│ └── targets.txt # Цели
├── systemd/ # Юниты и таймеры
├── .service/
│ ├── version.txt # Версия (x.y.z-linux)
│ ├── hosts # Статичные IP (GitHub, Telegram)
│ └── installed_strategy # Какая стратегия в systemd
├── general*.sh # Обёртки → run_strategy.sh
├── run_strategy.sh # Движок: читает .conf, подставляет %BIN%/%LISTS%, запускает nfqws
├── sync_from_upstream.sh # <<< НОВОЕ: авто-мердж с Windows-репон
├── autotest.sh # Автоподбор рабочей стратегии
├── install.sh # Полный установщик (setup + build + autotest + systemd)
├── service.sh # Меню управления (аналог service.bat)
├── setup.sh # Зависимости по дистрибутиву
├── install_nfqws.sh # Сборка nfqws из bol-van/zapret
├── ensure_wrappers.sh # <<< НОВОЕ: создаёт general_*.sh из strategies/*.conf
└── update.sh # Полный pipeline: sync → build → test → install
Ключевой момент: стратегии больше не зашиты в код. Они вынесены в strategies/*.conf — текстовые файлы, которые автоматически конвертируются из .bat при синхронизации.
Модульные стратегии (strategies/*.conf)
Вместо 20 скриптов с дублирующимся кодом — один движок + конфигурационные файлы.
Пример strategies/general.conf:
# Strategy: general
RULE1=--filter-udp=443 --hostlist="%LISTS%/list-general.txt" ... --dpi-desync=fake ...
RULE2=--filter-udp=19294-19344,50000-50100 --filter-l7=discord,stun ...
RULE3=--filter-tcp=2053,2083,2087,2096,8443 --hostlist-domains=discord.media ...
RULE8=--filter-tcp=%GAME_TCP% --ipset="%LISTS%/ipset-all.txt" ...
RULE9=--filter-udp=%GAME_UDP% --ipset="%LISTS%/ipset-all.txt" ...
Переменные (подставляются на лету через sed, без envsubst):
%BIN%→bin/%LISTS%→lists/%GAME_TCP%/%GAME_UDP%→1024:65535(или пусто)
Если Flowseal выпускает новую general (ALT12).bat:
sudo ./sync_from_upstream.sh # авто-конвертирует в strategies/ALT12.conf + general_ALT12.sh
Стратегии (general*.sh)
| Файл | Стратегия | Описание |
|---|---|---|
general.sh |
general |
Standard multisplit (рекомендуется пробовать первой) |
general_ALT.sh |
ALT |
Fake fakedsplit + ts fooling |
general_ALT2.sh |
ALT2 |
Multisplit pos=2 |
general_ALT3.sh |
ALT3 |
Hostfakesplit (Google/ya.ru) |
general_ALT4.sh |
ALT4 |
Fake multisplit + badseq |
general_ALT5.sh |
ALT5 |
NOT RECOMMENDED syndata multidisorder |
general_ALT6.sh |
ALT6 |
Uniform split-seqovl=681 |
general_ALT7.sh |
ALT7 |
Multisplit + syndata |
general_ALT8.sh |
ALT8 |
Fake + badseq-increment=2 |
general_ALT9.sh |
ALT9 |
Hostfakesplit (ozon.ru) |
general_ALT10.sh |
ALT10 |
Fake + ts fooling |
general_ALT11.sh |
ALT11 |
Fake multisplit + max_ru pattern |
general_FAKE_TLS_AUTO.sh |
FAKE_TLS_AUTO |
FAKE TLS multidisorder |
general_FAKE_TLS_AUTO_ALT.sh |
FAKE_TLS_AUTO_ALT |
FAKE TLS fakedsplit |
general_FAKE_TLS_AUTO_ALT2.sh |
FAKE_TLS_AUTO_ALT2 |
FAKE TLS multisplit badseq |
general_FAKE_TLS_AUTO_ALT3.sh |
FAKE_TLS_AUTO_ALT3 |
FAKE TLS + 4pda pattern |
general_SIMPLE_FAKE.sh |
SIMPLE_FAKE |
Simple fake |
general_SIMPLE_FAKE_ALT.sh |
SIMPLE_FAKE_ALT |
Simple fakedsplit |
general_SIMPLE_FAKE_ALT2.sh |
SIMPLE_FAKE_ALT2 |
Simple hostfakesplit |
Подбор рабочей:
sudo ./autotest.sh # интерактивно: тестит, пока не найдёт
sudo ./autotest.sh --auto # автомат: найдёт и сразу установит в systemd
service.sh — меню управления
Аналог service.bat из Windows-версии:
:: SERVICE
1. Install Service — выбор стратегии + systemd unit
2. Remove Services — удаление unit + остановка nfqws
3. Check Status — проверка nfqws и firewall rules
:: SETTINGS
4. Game Filter — вкл/выкл обход портов >1024
5. IPSet Filter — none / loaded / any
6. Auto-Update Check — вкл/выкл автообновление
:: UPDATES
7. Update IPSet List — обновить список IP
8. Update Hosts File — показать hosts и предложить добавить в /etc/hosts
9. Check for Updates — проверить версию (внутренняя)
:: TOOLS
10. Run Diagnostics — зависимости, ядерный модуль, DNS
11. Run Tests — curl-проверка Discord/YouTube
update.sh — автообновление (pipeline)
# Полный pipeline: sync upstream → rebuild → test → install
sudo ./update.sh # интерактивно
sudo ./update.sh --auto # для cron: тихий режим, только если upstream изменился
sudo ./update.sh --full-auto # форсировать пересборку + перетестирование
sudo ./update.sh --help # справка
Что делает при обновлении Flowseal:
Step 0: sync_from_upstream.sh
→ скачивает новые lists, hosts, версию
→ если Flowseal выпустил новый .bat — авто-конвертирует в .conf + .sh
Step 1: Rebuild nfqws
→ пересобирает из исходников
Step 2: Auto-test
→ перетестирует все стратегии (включая новые)
Step 3: Install to systemd
→ ставит лучшую рабочую в автостарт
Синхронизация upstream (sync_from_upstream.sh)
Отдельный скрипт для ручного мержа с оригиналом. Не требует пересборки nfqws.
sudo ./sync_from_upstream.sh
# Вывод:
# [OK] lists/list-general.txt (новые домены GitHub/Telegram)
# [OK] .service/hosts (новые статичные IP)
# [NEW] Detected upstream strategy: general (ALT12).bat → ALT12.conf
# [OK] REBUILD NEEDED: run ./update.sh
Если видите REBUILD NEEDED (exit 2) — запускайте sudo ./update.sh или sudo ./install.sh.
systemd таймер для ежедневного автообновления:
sudo cp systemd/zapret-update.timer /etc/systemd/system/
sudo cp systemd/zapret-update.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now zapret-update.timer
Security — hosts для заблокированных ресурсов
Проект включает .service/hosts со статичными IP, чтобы обойти DNS-блокировки:
- GitHub:
raw.githubusercontent.com,avatars.githubusercontent.com,gist.github.com - Telegram:
t.me,telegram.org,web.telegram.org,api.telegram.org - Discord media: голосовые каналы
Добавить в /etc/hosts:
sudo ./service.sh
# → 8. Update Hosts File
Или вручную:
cat .service/hosts | sudo tee -a /etc/hosts
Рекомендуется также включить Secure DNS (DoH/DoT):
- Chrome:
chrome://settings/security→ Secure DNS - Firefox:
about:preferences#privacy→ DNS-over-HTTPS - systemd-resolved:
resolvectl dns eth0 1.1.1.1
Ручное управление (если автоматика не подошла)
cd /opt/zapret
# Запуск конкретной стратегии
sudo ./general.sh # если не работает — Ctrl+C
sudo ./general_ALT.sh # пробуем следующую
# ... и так до 20 стратегий
# Меню
sudo ./service.sh
# Обновление (sync + rebuild + test + install)
sudo ./update.sh
sudo ./update.sh --full-auto
Если autotest показывает "nfqws did not start" / ошибка 0000
Это значит nfqws не удалось запуститься. Самые частые причины:
- Не хватает root-прав — запускайте ВСЕ скрипты через
sudo - Отсутствуют fake .bin файлы — пересоберите:
sudo ./install_nfqws.sh - nfnetlink_queue не загружен —
sudo modprobe nfnetlink_queue - iptables/nftables конфликт —
sudo ./service.sh → 2. Remove Services, затемsudo ./general.sh
Если curl-тесты падают, но nfqws запущен
- Включите Secure DNS (DoH/DoT) — провайдер блокирует по DNS
- Добавьте
.service/hostsв/etc/hosts(sudo ./service.sh → 8) - Попробуйте стратегии вручную — у разных провайдеров работают разные
Требования
- Linux с
iptablesилиnftables - Ядерный модуль
nfnetlink_queue(загрузится автоматически) git,make,gcc,curl- Root-доступ — все скрипты (
install.sh,setup.sh,general*.sh,service.sh,autotest.sh,update.sh) проверяют это автоматически и показываютsudo $0, если запущены без прав
Работа в России / Offline-режим
Почему нужен прокси или offline-бандл
github.comзаблокирован в РФ- Оригинальный репозиторий лежит на GitHub (Flowseal/zapret-discord-youtube)
- Исходники
nfqwsтоже на GitHub (bol-van/zapret) - Наш проект на Gitea, поэтому клонирование работает, но внутренние скачивания (lists, hosts, bol-van/zapret) — используют GitHub
Вариант 1: Установка с VPN/прокси (рекомендуется)
# Системный прокси
export HTTPS_PROXY=socks5://127.0.0.1:1080
export HTTP_PROXY=socks5://127.0.0.1:1080
sudo ./install.sh
# Или proxychains
proxychains ./install.sh
Также можно настроить ~/.bashrc:
echo 'export HTTPS_PROXY=socks5://127.0.0.1:1080' >> ~/.bashrc
source ~/.bashrc
Вариант 2: Offline-бандл (без интернета на целевой машине)
На машине с интернетом (например, у друга, или с VPN на работе):
cd /opt/zapret
proxychains ./prepare_offline_bundle.sh
Получите файл: zapret-discord-youtube-linux-bundle.tar.gz
На машине без интернета:
cd /opt
sudo tar -xzf zapret-discord-youtube-linux-bundle.tar.gz
cd zapret-bundle-*/installed-scripts
sudo ./install.sh --offline
Бандл содержит:
- Исходники
bol-van/zapret(для сборки nfqws) lists/*.txt(свежие домены).service/hosts(статичные IP)- Все скрипты и стратегии
Вариант 3: Установка на Windows и перенос в Linux
- Скачать репозиторий на Windows (где VPN работает)
- Перенести на Linux через флешку/сеть
- На Linux запустить
sudo ./install.sh --offline
Если GitHub заблокирован — поведение скриптов
| Скрипт | Поведение при отсутствии интернета |
|---|---|
install.sh |
Предупреждает, спрашивает, можно запустить --offline |
sync_from_upstream.sh |
Переключается в offline-режим, использует .bundle/ |
update.sh |
Если sync не удался — сообщает и выходит |
install_nfqws.sh |
Предлагает proxychains, --offline, или prepare_offline_bundle.sh |
Настройка прокси через .env
cp .env.example .env
nano .env
GITHUB_PROXY=socks5://127.0.0.1:1080
Скрипты автоматически прочитают .env при запуске.
Обновление при заблокированном GitHub
# С VPN/proxy на целевой машине:
sudo ./update.sh --full-auto
# Или через proxychains:
proxychains ./update.sh --full-auto
Лицензия
MIT License.
Авторы: