# Zapret Discord + YouTube for Linux — Project Documentation ## Overview Linux-перенос проекта [Flowseal/zapret-discord-youtube](https://github.com/Flowseal/zapret-discord-youtube) (v1.9.8c) с полной автоматизацией установки, тестирования и обновления. **Архитектура:** - `nfqws` (bol-van/zapret) — ядерный обработчик пакетов - iptables/nftables + NFQUEUE — перехват трафика - 20 стратегий обхода DPI (fake, multisplit, fakedsplit, hostfakesplit, syndata и др.), хранятся в `strategies/*.conf` - systemd — сервисы и таймеры --- ## Directory Map ``` zapret/ ├── bin/ # nfqws + fake .bin пакеты (собираются при install) ├── lib/ │ └── functions.sh # Общие: firewall setup/cleanup, colors, distro detect ├── lists/ # Домены и IP для обхода │ ├── list-general.txt # Discord, YouTube, Google, GitHub, Telegram, Steam │ ├── list-google.txt # Google-специфичные домены │ ├── list-exclude.txt # Что НЕ трогать (банки, госуслуги) │ ├── ipset-all.txt # IP-диапазоны (placeholder → обновляется) │ └── ipset-exclude.txt # локальные диапазоны ├── strategies/ # Конфиги стратегий (RULE1=...), конвертируются из .bat │ ├── general.conf │ └── general_ALT2.conf ├── .service/ # Runtime-конфигурация + hosts │ ├── version.txt # Текущая версия │ ├── installed_strategy # Какая стратегия в systemd │ ├── hosts # Статичные IP для hosts (GitHub, Telegram, Discord) │ ├── game_filter_enabled # Флаг │ └── check_updates_enabled ├── systemd/ │ ├── zapret.service │ ├── zapret-update.service │ └── zapret-update.timer ├── utils/ │ ├── test_zapret.sh # curl-проверка доступности │ └── targets.txt # Цели теста ├── general*.sh # Обёртки → run_strategy.sh ├── run_strategy.sh # Единый движок: читает .conf, подставляет %BIN%/%LISTS% ├── autotest.sh # Автоподбор: запускает каждую, тестит curl, ставит systemd ├── install.sh # Входная точка: setup + build + autotest + systemd ├── service.sh # Меню управления (аналог service.bat) ├── setup.sh # Зависимости по дистру, модуль ядра, user lists ├── install_nfqws.sh # git clone bol-van/zapret → make nfqws → fake .bin ├── ensure_wrappers.sh # Создаёт general_*.sh из strategies/*.conf └── update.sh # Pipeline: check version → update files → rebuild → autotest ``` --- ## Core Scripts Deep Dive ### `run_strategy.sh ` - Принимает имя стратегии (`general`, `ALT`, `ALT2`, ...) - Определяет `RULE1` (UDP 443 general), `RULE2` (Discord/stun), `RULE3-9` (стратегия-специфичные) - Собирает финальный массив аргументов для `nfqws` - Вызывает `run_nfqws()` из `lib/functions.sh` ### `lib/functions.sh` - `setup_firewall()` — nftables или iptables правила для портов 80,443,2053,2083,2087,2096,8443, UDP 443, 19294-19344, 50000-50100 - `cleanup_firewall()` — удаляет правила, убивает nfqws - `run_nfqws()` — проверяет бинарник, очищает старые правила, поднимает новые, запускает nfqws - `get_game_filter()` — читает `.service/game_filter_enabled`, меняет порты на 1024:65535 - `describe_strategy()` — человекочитаемые описания ### `autotest.sh [--auto]` - Перебирает STRATEGIES[] по порядку - Каждую запускает (`sudo ./general*.sh &`) - Ждёт 3 сек - Тестит `youtube.com` и `discord.com` через curl (timeout 8s) - При успехе: - `--auto` → сразу создаёт systemd unit, enable, start - интерактив → ждёт подтверждения ### `update.sh [--auto|--full-auto]` ``` Step 1: curl GitHub API → проверка версии Step 2: update_files() → lists + lib + utils (atomic: .tmp + mv) Step 3: rebuild_nfqws() → install_nfqws.sh + verify --help Step 4: run_autotest_pipeline() → cleanup → autotest.sh --auto → systemd install ``` --- ## Strategy Parameters (nfqws) Каждая стратегия — это комбинация фильтров `--filter-tcp`, `--filter-udp`, `--filter-l7` с DPI обходом: | Параметр | Описание | |----------|----------| | `--dpi-desync=fake` | Отправка фейкового пакета | | `--dpi-desync=multisplit` | Разделение пакета | | `--dpi-desync=fakedsplit` | Фейк + разделение | | `--dpi-desync=hostfakesplit` | Фейк по хосту | | `--dpi-desync=syndata` | SYN data | | `--dpi-desync=multidisorder` | Множественное нарушение порядка | | `--dpi-desync-repeats=N` | Повторить N раз | | `--dpi-desync-fooling=ts` | TCP timestamp fooling | | `--dpi-desync-fooling=badseq` | Bad sequence number | | `--dpi-desync-fake-tls="file.bin"` | Фейковый TLS ClientHello | | `--dpi-desync-fake-quic="file.bin"` | Фейковый QUIC initial | | `--ip-id=zero` | Обнулить IP ID field | | `--dpi-desync-any-protocol=1` | Применять к любому протоколу UDP | --- ## Firewall Backend **Priority:** nftables → iptables fallback ```bash # nftables (if nft available) nft add table ip zapret nft add chain ip zapret postrouting { type filter hook postrouting priority mangle; } nft add rule ip zapret postrouting tcp dport 443 counter queue num 200 # iptables fallback iptables -t mangle -I POSTROUTING -p tcp --dport 443 -j NFQUEUE --queue-num 200 ``` Queue num: 200. nfqws: `--qnum=200`. --- ## Supported Distros - Ubuntu / Debian / Linux Mint / Pop!_OS / Zorin / Kali - Arch / Manjaro / EndeavourOS / Garuda / Artix / Arco - Fedora / RHEL / CentOS / AlmaLinux / Rocky - Alpine Linux - Gentoo / Funtoo - openSUSE / SUSE - Void Linux - NixOS Package managers: `apt`, `pacman/yay/paru`, `dnf`, `apk`, `emerge`, `zypper`, `xbps`, `nix`. --- ## Known Resources Included (v1.9.8c) **Discord:** все discord.* домены, .gg, .media, .app, .net, .com, статичные IP для Discord media **YouTube:** googlevideo.com, youtube.com, ytimg.com, jnn-pa.googleapis.com, play.google.com **GitHub** (добавлено в 1.9.8c): github.com, raw.githubusercontent.com, avatars.githubusercontent.com, gist.github.com и др. **Telegram** (добавлено в 1.9.8c): t.me, telegram.org, telegram.me, web.telegram.org, api.telegram.org, my.telegram.org **Steam:** steampowered.com, steamcommunity.com, steamcontent.com, steamstatic.com **Исключения (не трогаем):** Яндекс, ВК, Твич, Сбер, Тинькофф, Госуслуги, банки (полный список в `lists/list-exclude.txt`) --- ## Git / Gitea - Repo: `https://giteas.stitch505.su/Stitch505/zapret-discord-youtube-linux` - Branch: `main` (единственная) - Version: `1.9.8c-linux` --- ## Contributing / Debug Если нужно добавить стратегию: 1. Создать `general_NEW.sh` → вызов `run_strategy.sh NEW` 2. В `run_strategy.sh` добавить `case NEW:` с `RULE3-9` 3. В `lib/functions.sh` добавить `describe_strategy` 4. В `autotest.sh` добавить в массив `STRATEGIES[]`