docs(PROJECT): актуализирована архитектура и структура директорий
- Добавлена директория strategies/ с описанием .conf файлов - Уточнено, что general*.sh — обёртки run_strategy.sh <name> - run_strategy.sh теперь читает .conf, а не собирает аргументы вручную - Добавлен ensure_wrappers.sh в дерево проекта
This commit is contained in:
347
PROJECT.md
347
PROJECT.md
@@ -1,171 +1,176 @@
|
||||
# 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 и др.)
|
||||
- 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 # локальные диапазоны
|
||||
├── .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 # 20 обёрток → run_strategy.sh
|
||||
├── run_strategy.sh # Единый движок: собирает аргументы nfqws
|
||||
├── 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
|
||||
└── 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
|
||||
|
||||
```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[]`
|
||||
# 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 <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
|
||||
|
||||
```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[]`
|
||||
|
||||
Reference in New Issue
Block a user