Files
zapret-discord-youtube-linux/PROJECT.md

8.2 KiB
Executable File
Raw Blame History

Zapret Discord + YouTube for Linux — Project Documentation

Overview

Linux-перенос проекта 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 <name>
├── 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 <STRATEGY_NAME>

  • Принимает имя стратегии (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

# 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[]