docs: rewrite README.md with 8 distro install guides fix: hosts_update now reads local .service/hosts and appends to /etc/hosts
7.7 KiB
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 и др.)
- 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-50100cleanup_firewall()— удаляет правила, убивает nfqwsrun_nfqws()— проверяет бинарник, очищает старые правила, поднимает новые, запускает nfqwsget_game_filter()— читает.service/game_filter_enabled, меняет порты на 1024:65535describe_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
Если нужно добавить стратегию:
- Создать
general_NEW.sh→ вызовrun_strategy.sh NEW - В
run_strategy.shдобавитьcase NEW:сRULE3-9 - В
lib/functions.shдобавитьdescribe_strategy - В
autotest.shдобавить в массивSTRATEGIES[]