- install_nfqws.sh: strip LTO and --gc-sections flags from Makefile before build to prevent segfault on some systems; verify binary runs before install - lib/functions.sh: check_nfqws() now also tests --help to catch segfaulting or missing-dependency binaries - run_strategy.sh: replace broken single-quoted trap string with proper cleanup_tmp function so temp file is actually removed - service.sh: extract strategy name by stripping general_ prefix from wrapper filename so ExecStart points to correct config Fixes: nfqws segfault on build, service start failure, temp file leak.
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.
Авторы: