Files

177 lines
8.2 KiB
Markdown
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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[]`