Stitch505 1bca276c7f fix: generate all 19 strategies/*.conf from upstream .bat files
- Add Python converter (convert_bat.py) + PowerShell wrapper generator
- All general*.sh now point to run_strategy.sh <name>
- Normalize filenames: spaces → underscores (FAKE_TLS_AUTO_ALT etc.)
- Fix sync_from_upstream.sh: underscores in names
- Update README: document modular architecture, sync, hosts
2026-05-10 19:57:53 +04:00

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.


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

# 1. Установка git (один раз)
sudo apt install git          # Ubuntu/Debian
sudo pacman -S git             # Arch/Manjaro
sudo dnf install git           # Fedora

# 2. Клонирование
cd /opt
git clone https://giteas.stitch505.su/Stitch505/zapret-discord-youtube-linux.git zapret
cd zapret

# 3. Установка (одна команда — всё сделает)
sudo ./install.sh

После install.sh сервис запущен и будет автозапускаться.


Установка по дистрибутивам

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 (шаг за шагом)

  1. Синхронизация upstream (sync_from_upstream.sh)

    • Клонирует оригинальный Flowseal/zapret-discord-youtube
    • Мержит свежие lists/*.txt (Discord, YouTube, GitHub, Telegram, Steam)
    • Обновляет .service/hosts (статичные IP для GitHub/Telegram)
    • При необходимости конвертирует новые .bat стратегии в strategies/*.conf
  2. Установка зависимостей (setup.sh) — по дистрибутиву

  3. Сборка nfqws (install_nfqws.sh) — git clone bol-van/zapret, make, fake .bin пакеты

  4. Автотест (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

Требования

  • Linux с iptables или nftables
  • Ядерный модуль nfnetlink_queue (загрузится автоматически)
  • git, make, gcc, curl
  • sudo или root

Лицензия

MIT License.

Авторы:

  • bol-van — оригинальный zapret
  • Flowseal — Windows-обёртка и стратегии
  • Linux-адаптация — Gitea
Description
No description provided
Readme 309 KiB
Languages
Shell 100%