# Zapret for Linux (Discord + YouTube + GitHub + Telegram + Steam) Linux-аналог популярного репозитория [Flowseal/zapret-discord-youtube](https://github.com/Flowseal/zapret-discord-youtube) для обхода DPI (Deep Packet Inspection). **Ключевая фича:** `sync_from_upstream.sh` — автоматическое слежение за оригинальным Windows-репозиторием. При обновлении Flowseal скрипт сам скачает новые списки доменов, `hosts` и авто-конвертирует новые `.bat` стратегии в Linux-формат. Подробнее в разделе **Синхронизация upstream**. --- ## Важно для пользователей из России GitHub заблокирован в РФ. Установщик **автоматически использует** прокси/зеркала, но рекомендуется: 1. **Если есть VPN/прокси** — самый простой способ: ```bash # Вариант A: системный прокси export HTTPS_PROXY=socks5://127.0.0.1:1080 sudo ./install.sh # Вариант B: proxychains proxychains ./install.sh ``` 2. **Если нет VPN на целевой машине** — подготовьте офлайн-пакет: ```bash # На машине С интернетом (с VPN): cd /opt/zapret proxychains ./prepare_offline_bundle.sh # Перенесите zapret-discord-youtube-linux-bundle.tar.gz # на целевую машину, распакуйте и: sudo ./install.sh --offline ``` 3. **Если установка падает на скачивании**: - Проверьте `.env.example` → создайте `.env` с `GITHUB_PROXY=...` - Или передайте прокси через переменную окружения Подробнее: раздел **Offline / РФ** внизу. --- ## Быстрый старт ```bash # 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 ```bash 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 ```bash 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 ```bash 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 ```bash 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 ```bash 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 ```bash 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 ```bash 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 ```bash 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`:** ```bash 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 | **Подбор рабочей:** ```bash 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) ```bash # Полный 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. ```bash 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 таймер для ежедневного автообновления:** ```bash 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`: ```bash sudo ./service.sh # → 8. Update Hosts File ``` Или вручную: ```bash 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` --- ## Ручное управление (если автоматика не подошла) ```bash 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` не удалось запуститься. Самые частые причины: 1. **Не хватает root-прав** — запускайте ВСЕ скрипты через `sudo` 2. **Отсутствуют fake .bin файлы** — пересоберите: `sudo ./install_nfqws.sh` 3. **nfnetlink_queue не загружен** — `sudo modprobe nfnetlink_queue` 4. **iptables/nftables конфликт** — `sudo ./service.sh → 2. Remove Services`, затем `sudo ./general.sh` ### Если curl-тесты падают, но nfqws запущен 1. Включите **Secure DNS** (DoH/DoT) — провайдер блокирует по DNS 2. Добавьте `.service/hosts` в `/etc/hosts` (`sudo ./service.sh → 8`) 3. Попробуйте стратегии вручную — у разных провайдеров работают разные --- ## Требования - 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/прокси (рекомендуется) ```bash # Системный прокси 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`: ```bash echo 'export HTTPS_PROXY=socks5://127.0.0.1:1080' >> ~/.bashrc source ~/.bashrc ``` ### Вариант 2: Offline-бандл (без интернета на целевой машине) На машине **с интернетом** (например, у друга, или с VPN на работе): ```bash cd /opt/zapret proxychains ./prepare_offline_bundle.sh ``` Получите файл: `zapret-discord-youtube-linux-bundle.tar.gz` На машине **без интернета**: ```bash 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 1. Скачать репозиторий на Windows (где VPN работает) 2. Перенести на Linux через флешку/сеть 3. На 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 ```bash cp .env.example .env nano .env ``` ``` GITHUB_PROXY=socks5://127.0.0.1:1080 ``` Скрипты автоматически прочитают `.env` при запуске. ### Обновление при заблокированном GitHub ```bash # С VPN/proxy на целевой машине: sudo ./update.sh --full-auto # Или через proxychains: proxychains ./update.sh --full-auto ``` --- ## Лицензия MIT License. **Авторы:** - [bol-van](https://github.com/bol-van) — оригинальный zapret - [Flowseal](https://github.com/Flowseal) — Windows-обёртка и стратегии - Linux-адаптация — [Gitea](https://giteas.stitch505.su/Stitch505/zapret-discord-youtube-linux)