- Clarify that ALL scripts require root (not just install.sh) - Add 'git clone WITHOUT sudo' note to avoid permission issues - Add troubleshooting section for 'nfqws did not start' / error 0000 - Add checklist for when curl tests fail but nfqws is running - Emphasize Secure DNS and hosts file as common fixes
522 lines
20 KiB
Markdown
522 lines
20 KiB
Markdown
# Zapret for Linux (Discord + YouTube + GitHub + Telegram + Steam)
|
||
|
||
Linux-аналог популярного репозитория [Flowseal/zapret-discord-youtube](https://github.com/Flowseal/zapret-discord-youtube) для обхода DPI (Deep Packet Inspection).
|
||
|
||
**Ключевая фича:** `sync_from_upstream.sh` — автоматическое слежение за оригинальным Windows-репозиторием. При обновлении Flowseal скрипт сам скачает новые списки доменов, `hosts` и авто-конвертирует новые `.bat` стратегии в Linux-формат. Подробнее в разделе **Синхронизация upstream**.
|
||
|
||
---
|
||
|
||
## Важно для пользователей из России
|
||
|
||
GitHub заблокирован в РФ. Установщик **автоматически использует** прокси/зеркала, но рекомендуется:
|
||
|
||
1. **Если есть VPN/прокси** — самый простой способ:
|
||
```bash
|
||
# Вариант A: системный прокси
|
||
export HTTPS_PROXY=socks5://127.0.0.1:1080
|
||
sudo ./install.sh
|
||
|
||
# Вариант B: proxychains
|
||
proxychains ./install.sh
|
||
```
|
||
|
||
2. **Если нет VPN на целевой машине** — подготовьте офлайн-пакет:
|
||
```bash
|
||
# На машине С интернетом (с VPN):
|
||
cd /opt/zapret
|
||
proxychains ./prepare_offline_bundle.sh
|
||
|
||
# Перенесите zapret-discord-youtube-linux-bundle.tar.gz
|
||
# на целевую машину, распакуйте и:
|
||
sudo ./install.sh --offline
|
||
```
|
||
|
||
3. **Если установка падает на скачивании**:
|
||
- Проверьте `.env.example` → создайте `.env` с `GITHUB_PROXY=...`
|
||
- Или передайте прокси через переменную окружения
|
||
|
||
Подробнее: раздел **Offline / РФ** внизу.
|
||
|
||
---
|
||
|
||
## Быстрый старт
|
||
|
||
```bash
|
||
# 1. Установка git (один раз)
|
||
sudo apt install git # Ubuntu/Debian
|
||
sudo pacman -S git # Arch/Manjaro
|
||
sudo dnf install git # Fedora
|
||
|
||
# 2. Клонирование (БЕЗ sudo — создаёт файлы от текущего пользователя)
|
||
cd /opt
|
||
git clone https://giteas.stitch505.su/Stitch505/zapret-discord-youtube-linux.git zapret
|
||
cd zapret
|
||
|
||
# 3. Установка (одна команда — всё сделает)
|
||
sudo ./install.sh
|
||
```
|
||
|
||
После `install.sh` сервис запущен и будет автозапускаться.
|
||
|
||
> **Важно:** Все скрипты (`install.sh`, `setup.sh`, `general*.sh`, `service.sh`, `autotest.sh`, `update.sh`) должны запускаться **от root** (через `sudo`). Сами скрипты проверяют это автоматически.
|
||
|
||
---
|
||
|
||
## Установка по дистрибутивам
|
||
|
||
### Ubuntu / Debian / Linux Mint / Pop!_OS / Zorin OS / Kali
|
||
|
||
```bash
|
||
sudo apt update
|
||
sudo apt install -y git curl make gcc iptables nftables libnetfilter-queue-dev
|
||
|
||
cd /opt
|
||
git clone https://giteas.stitch505.su/Stitch505/zapret-discord-youtube-linux.git zapret
|
||
cd zapret
|
||
sudo ./install.sh
|
||
```
|
||
|
||
### Arch Linux / Manjaro / EndeavourOS / Garuda / Artix
|
||
|
||
```bash
|
||
sudo pacman -Syu --noconfirm git curl make gcc iptables nftables libnetfilter_queue
|
||
|
||
cd /opt
|
||
git clone https://giteas.stitch505.su/Stitch505/zapret-discord-youtube-linux.git zapret
|
||
cd zapret
|
||
sudo ./install.sh
|
||
```
|
||
|
||
### Fedora / RHEL / CentOS / AlmaLinux / Rocky Linux
|
||
|
||
```bash
|
||
sudo dnf install -y git curl make gcc iptables nftables libnetfilter_queue-devel
|
||
|
||
cd /opt
|
||
git clone https://giteas.stitch505.su/Stitch505/zapret-discord-youtube-linux.git zapret
|
||
cd zapret
|
||
sudo ./install.sh
|
||
```
|
||
|
||
### Alpine Linux
|
||
|
||
```bash
|
||
sudo apk add --no-cache git curl make gcc iptables nftables libnetfilter_queue-dev linux-headers
|
||
|
||
cd /opt
|
||
git clone https://giteas.stitch505.su/Stitch505/zapret-discord-youtube-linux.git zapret
|
||
cd zapret
|
||
sudo ./install.sh
|
||
```
|
||
|
||
### Gentoo / Funtoo
|
||
|
||
```bash
|
||
sudo emerge --ask dev-vcs/git net-misc/curl sys-devel/gcc sys-devel/make net-firewall/iptables net-firewall/nftables
|
||
|
||
cd /opt
|
||
git clone https://giteas.stitch505.su/Stitch505/zapret-discord-youtube-linux.git zapret
|
||
cd zapret
|
||
sudo ./install.sh
|
||
```
|
||
|
||
### openSUSE / SUSE
|
||
|
||
```bash
|
||
sudo zypper install -y git curl make gcc iptables nftables libnetfilter_queue-devel
|
||
|
||
cd /opt
|
||
git clone https://giteas.stitch505.su/Stitch505/zapret-discord-youtube-linux.git zapret
|
||
cd zapret
|
||
sudo ./install.sh
|
||
```
|
||
|
||
### Void Linux
|
||
|
||
```bash
|
||
sudo xbps-install -Sy git curl make gcc iptables nftables libnetfilter_queue-devel
|
||
|
||
cd /opt
|
||
git clone https://giteas.stitch505.su/Stitch505/zapret-discord-youtube-linux.git zapret
|
||
cd zapret
|
||
sudo ./install.sh
|
||
```
|
||
|
||
### NixOS
|
||
|
||
```bash
|
||
nix-shell -p git curl gnumake gcc iptables nftables libnetfilter_queue
|
||
|
||
cd /opt
|
||
git clone https://giteas.stitch505.su/Stitch505/zapret-discord-youtube-linux.git zapret
|
||
cd zapret
|
||
sudo ./install.sh
|
||
```
|
||
|
||
---
|
||
|
||
## Что делает `./install.sh` (шаг за шагом)
|
||
|
||
1. **Синхронизация upstream** (`sync_from_upstream.sh`)
|
||
- Клонирует оригинальный `Flowseal/zapret-discord-youtube`
|
||
- Мержит свежие `lists/*.txt` (Discord, YouTube, GitHub, Telegram, Steam)
|
||
- Обновляет `.service/hosts` (статичные IP для GitHub/Telegram)
|
||
- При необходимости конвертирует новые `.bat` стратегии в `strategies/*.conf`
|
||
|
||
2. **Установка зависимостей** (`setup.sh`) — по дистрибутиву
|
||
|
||
3. **Сборка `nfqws`** (`install_nfqws.sh`) — git clone bol-van/zapret, make, fake .bin пакеты
|
||
|
||
4. **Автотест** (`autotest.sh --auto`) — перебирает стратегии, находит рабочую, ставит в systemd
|
||
|
||
---
|
||
|
||
## Структура проекта (новая модульная архитектура)
|
||
|
||
```
|
||
.
|
||
├── bin/ # nfqws + fake .bin (собирается)
|
||
├── lib/
|
||
│ └── functions.sh # Общие: firewall, цвета, cleanup
|
||
├── lists/ # Списки доменов и IP
|
||
│ ├── list-general.txt # Discord, YouTube, GitHub, Telegram, Steam
|
||
│ ├── list-google.txt # Google/YouTube
|
||
│ ├── list-exclude.txt # Исключения (банки, госуслуги)
|
||
│ ├── ipset-all.txt # IP-диапазоны
|
||
│ └── ipset-exclude.txt # Локальные подсети
|
||
├── strategies/ # Новое: модульные стратегии
|
||
│ └── general.conf # Конфиг стратегии (RULE1=... RULE2=...)
|
||
│ # Другие .conf появляются автоматически через sync_from_upstream.sh
|
||
├── utils/
|
||
│ ├── test_zapret.sh # curl-тесты
|
||
│ └── targets.txt # Цели
|
||
├── systemd/ # Юниты и таймеры
|
||
├── .service/
|
||
│ ├── version.txt # Версия (x.y.z-linux)
|
||
│ ├── hosts # Статичные IP (GitHub, Telegram)
|
||
│ └── installed_strategy # Какая стратегия в systemd
|
||
├── general*.sh # Обёртки → run_strategy.sh
|
||
├── run_strategy.sh # Движок: читает .conf, подставляет %BIN%/%LISTS%, запускает nfqws
|
||
├── sync_from_upstream.sh # <<< НОВОЕ: авто-мердж с Windows-репон
|
||
├── autotest.sh # Автоподбор рабочей стратегии
|
||
├── install.sh # Полный установщик (setup + build + autotest + systemd)
|
||
├── service.sh # Меню управления (аналог service.bat)
|
||
├── setup.sh # Зависимости по дистрибутиву
|
||
├── install_nfqws.sh # Сборка nfqws из bol-van/zapret
|
||
├── ensure_wrappers.sh # <<< НОВОЕ: создаёт general_*.sh из strategies/*.conf
|
||
└── update.sh # Полный pipeline: sync → build → test → install
|
||
```
|
||
|
||
**Ключевой момент:** стратегии больше не зашиты в код. Они вынесены в `strategies/*.conf` — текстовые файлы, которые автоматически конвертируются из `.bat` при синхронизации.
|
||
|
||
---
|
||
|
||
## Модульные стратегии (strategies/*.conf)
|
||
|
||
Вместо 20 скриптов с дублирующимся кодом — **один движок** + **конфигурационные файлы**.
|
||
|
||
Пример `strategies/general.conf`:
|
||
```
|
||
# Strategy: general
|
||
RULE1=--filter-udp=443 --hostlist="%LISTS%/list-general.txt" ... --dpi-desync=fake ...
|
||
RULE2=--filter-udp=19294-19344,50000-50100 --filter-l7=discord,stun ...
|
||
RULE3=--filter-tcp=2053,2083,2087,2096,8443 --hostlist-domains=discord.media ...
|
||
RULE8=--filter-tcp=%GAME_TCP% --ipset="%LISTS%/ipset-all.txt" ...
|
||
RULE9=--filter-udp=%GAME_UDP% --ipset="%LISTS%/ipset-all.txt" ...
|
||
```
|
||
|
||
Переменные (подставляются на лету через sed, без envsubst):
|
||
- `%BIN%` → `bin/`
|
||
- `%LISTS%` → `lists/`
|
||
- `%GAME_TCP%` / `%GAME_UDP%` → `1024:65535` (или пусто)
|
||
|
||
**Если Flowseal выпускает новую `general (ALT12).bat`:**
|
||
```bash
|
||
sudo ./sync_from_upstream.sh # авто-конвертирует в strategies/ALT12.conf + general_ALT12.sh
|
||
```
|
||
|
||
---
|
||
|
||
## Стратегии (general*.sh)
|
||
|
||
| Файл | Стратегия | Описание |
|
||
|------|-----------|----------|
|
||
| `general.sh` | `general` | Standard multisplit (рекомендуется пробовать первой) |
|
||
| `general_ALT.sh` | `ALT` | Fake fakedsplit + ts fooling |
|
||
| `general_ALT2.sh` | `ALT2` | Multisplit pos=2 |
|
||
| `general_ALT3.sh` | `ALT3` | Hostfakesplit (Google/ya.ru) |
|
||
| `general_ALT4.sh` | `ALT4` | Fake multisplit + badseq |
|
||
| `general_ALT5.sh` | `ALT5` | **NOT RECOMMENDED** syndata multidisorder |
|
||
| `general_ALT6.sh` | `ALT6` | Uniform split-seqovl=681 |
|
||
| `general_ALT7.sh` | `ALT7` | Multisplit + syndata |
|
||
| `general_ALT8.sh` | `ALT8` | Fake + badseq-increment=2 |
|
||
| `general_ALT9.sh` | `ALT9` | Hostfakesplit (ozon.ru) |
|
||
| `general_ALT10.sh` | `ALT10` | Fake + ts fooling |
|
||
| `general_ALT11.sh` | `ALT11` | Fake multisplit + max_ru pattern |
|
||
| `general_FAKE_TLS_AUTO.sh` | `FAKE_TLS_AUTO` | FAKE TLS multidisorder |
|
||
| `general_FAKE_TLS_AUTO_ALT.sh` | `FAKE_TLS_AUTO_ALT` | FAKE TLS fakedsplit |
|
||
| `general_FAKE_TLS_AUTO_ALT2.sh` | `FAKE_TLS_AUTO_ALT2` | FAKE TLS multisplit badseq |
|
||
| `general_FAKE_TLS_AUTO_ALT3.sh` | `FAKE_TLS_AUTO_ALT3` | FAKE TLS + 4pda pattern |
|
||
| `general_SIMPLE_FAKE.sh` | `SIMPLE_FAKE` | Simple fake |
|
||
| `general_SIMPLE_FAKE_ALT.sh` | `SIMPLE_FAKE_ALT` | Simple fakedsplit |
|
||
| `general_SIMPLE_FAKE_ALT2.sh` | `SIMPLE_FAKE_ALT2` | Simple hostfakesplit |
|
||
|
||
**Подбор рабочей:**
|
||
```bash
|
||
sudo ./autotest.sh # интерактивно: тестит, пока не найдёт
|
||
sudo ./autotest.sh --auto # автомат: найдёт и сразу установит в systemd
|
||
```
|
||
|
||
---
|
||
|
||
## service.sh — меню управления
|
||
|
||
Аналог `service.bat` из Windows-версии:
|
||
|
||
```
|
||
:: SERVICE
|
||
1. Install Service — выбор стратегии + systemd unit
|
||
2. Remove Services — удаление unit + остановка nfqws
|
||
3. Check Status — проверка nfqws и firewall rules
|
||
|
||
:: SETTINGS
|
||
4. Game Filter — вкл/выкл обход портов >1024
|
||
5. IPSet Filter — none / loaded / any
|
||
6. Auto-Update Check — вкл/выкл автообновление
|
||
|
||
:: UPDATES
|
||
7. Update IPSet List — обновить список IP
|
||
8. Update Hosts File — показать hosts и предложить добавить в /etc/hosts
|
||
9. Check for Updates — проверить версию (внутренняя)
|
||
|
||
:: TOOLS
|
||
10. Run Diagnostics — зависимости, ядерный модуль, DNS
|
||
11. Run Tests — curl-проверка Discord/YouTube
|
||
```
|
||
|
||
---
|
||
|
||
## update.sh — автообновление (pipeline)
|
||
|
||
```bash
|
||
# Полный pipeline: sync upstream → rebuild → test → install
|
||
sudo ./update.sh # интерактивно
|
||
sudo ./update.sh --auto # для cron: тихий режим, только если upstream изменился
|
||
sudo ./update.sh --full-auto # форсировать пересборку + перетестирование
|
||
sudo ./update.sh --help # справка
|
||
```
|
||
|
||
**Что делает при обновлении Flowseal:**
|
||
```
|
||
Step 0: sync_from_upstream.sh
|
||
→ скачивает новые lists, hosts, версию
|
||
→ если Flowseal выпустил новый .bat — авто-конвертирует в .conf + .sh
|
||
|
||
Step 1: Rebuild nfqws
|
||
→ пересобирает из исходников
|
||
|
||
Step 2: Auto-test
|
||
→ перетестирует все стратегии (включая новые)
|
||
|
||
Step 3: Install to systemd
|
||
→ ставит лучшую рабочую в автостарт
|
||
```
|
||
|
||
---
|
||
|
||
## Синхронизация upstream (`sync_from_upstream.sh`)
|
||
|
||
Отдельный скрипт для ручного мержа с оригиналом. Не требует пересборки nfqws.
|
||
|
||
```bash
|
||
sudo ./sync_from_upstream.sh
|
||
# Вывод:
|
||
# [OK] lists/list-general.txt (новые домены GitHub/Telegram)
|
||
# [OK] .service/hosts (новые статичные IP)
|
||
# [NEW] Detected upstream strategy: general (ALT12).bat → ALT12.conf
|
||
# [OK] REBUILD NEEDED: run ./update.sh
|
||
```
|
||
|
||
Если видите `REBUILD NEEDED` (exit 2) — запускайте `sudo ./update.sh` или `sudo ./install.sh`.
|
||
|
||
**systemd таймер для ежедневного автообновления:**
|
||
```bash
|
||
sudo cp systemd/zapret-update.timer /etc/systemd/system/
|
||
sudo cp systemd/zapret-update.service /etc/systemd/system/
|
||
sudo systemctl daemon-reload
|
||
sudo systemctl enable --now zapret-update.timer
|
||
```
|
||
|
||
---
|
||
|
||
## Security — hosts для заблокированных ресурсов
|
||
|
||
Проект включает `.service/hosts` со статичными IP, чтобы обойти DNS-блокировки:
|
||
|
||
- **GitHub**: `raw.githubusercontent.com`, `avatars.githubusercontent.com`, `gist.github.com`
|
||
- **Telegram**: `t.me`, `telegram.org`, `web.telegram.org`, `api.telegram.org`
|
||
- **Discord media**: голосовые каналы
|
||
|
||
Добавить в `/etc/hosts`:
|
||
```bash
|
||
sudo ./service.sh
|
||
# → 8. Update Hosts File
|
||
```
|
||
|
||
Или вручную:
|
||
```bash
|
||
cat .service/hosts | sudo tee -a /etc/hosts
|
||
```
|
||
|
||
Рекомендуется также включить **Secure DNS** (DoH/DoT):
|
||
- Chrome: `chrome://settings/security` → Secure DNS
|
||
- Firefox: `about:preferences#privacy` → DNS-over-HTTPS
|
||
- systemd-resolved: `resolvectl dns eth0 1.1.1.1`
|
||
|
||
---
|
||
|
||
## Ручное управление (если автоматика не подошла)
|
||
|
||
```bash
|
||
cd /opt/zapret
|
||
|
||
# Запуск конкретной стратегии
|
||
sudo ./general.sh # если не работает — Ctrl+C
|
||
sudo ./general_ALT.sh # пробуем следующую
|
||
# ... и так до 20 стратегий
|
||
|
||
# Меню
|
||
sudo ./service.sh
|
||
|
||
# Обновление (sync + rebuild + test + install)
|
||
sudo ./update.sh
|
||
sudo ./update.sh --full-auto
|
||
```
|
||
|
||
### Если autotest показывает "nfqws did not start" / ошибка 0000
|
||
|
||
Это значит `nfqws` не удалось запуститься. Самые частые причины:
|
||
|
||
1. **Не хватает root-прав** — запускайте ВСЕ скрипты через `sudo`
|
||
2. **Отсутствуют fake .bin файлы** — пересоберите: `sudo ./install_nfqws.sh`
|
||
3. **nfnetlink_queue не загружен** — `sudo modprobe nfnetlink_queue`
|
||
4. **iptables/nftables конфликт** — `sudo ./service.sh → 2. Remove Services`, затем `sudo ./general.sh`
|
||
|
||
### Если curl-тесты падают, но nfqws запущен
|
||
|
||
1. Включите **Secure DNS** (DoH/DoT) — провайдер блокирует по DNS
|
||
2. Добавьте `.service/hosts` в `/etc/hosts` (`sudo ./service.sh → 8`)
|
||
3. Попробуйте стратегии вручную — у разных провайдеров работают разные
|
||
|
||
---
|
||
|
||
## Требования
|
||
|
||
- Linux с `iptables` или `nftables`
|
||
- Ядерный модуль `nfnetlink_queue` (загрузится автоматически)
|
||
- `git`, `make`, `gcc`, `curl`
|
||
- **Root-доступ** — все скрипты (`install.sh`, `setup.sh`, `general*.sh`, `service.sh`, `autotest.sh`, `update.sh`) проверяют это автоматически и показывают `sudo $0`, если запущены без прав
|
||
|
||
---
|
||
|
||
## Работа в России / Offline-режим
|
||
|
||
### Почему нужен прокси или offline-бандл
|
||
|
||
- `github.com` заблокирован в РФ
|
||
- Оригинальный репозиторий лежит на GitHub (Flowseal/zapret-discord-youtube)
|
||
- Исходники `nfqws` тоже на GitHub (bol-van/zapret)
|
||
- Наш проект на **Gitea**, поэтому клонирование работает, но внутренние скачивания (lists, hosts, bol-van/zapret) — используют GitHub
|
||
|
||
### Вариант 1: Установка с VPN/прокси (рекомендуется)
|
||
|
||
```bash
|
||
# Системный прокси
|
||
export HTTPS_PROXY=socks5://127.0.0.1:1080
|
||
export HTTP_PROXY=socks5://127.0.0.1:1080
|
||
sudo ./install.sh
|
||
|
||
# Или proxychains
|
||
proxychains ./install.sh
|
||
```
|
||
|
||
Также можно настроить `~/.bashrc`:
|
||
```bash
|
||
echo 'export HTTPS_PROXY=socks5://127.0.0.1:1080' >> ~/.bashrc
|
||
source ~/.bashrc
|
||
```
|
||
|
||
### Вариант 2: Offline-бандл (без интернета на целевой машине)
|
||
|
||
На машине **с интернетом** (например, у друга, или с VPN на работе):
|
||
|
||
```bash
|
||
cd /opt/zapret
|
||
proxychains ./prepare_offline_bundle.sh
|
||
```
|
||
|
||
Получите файл: `zapret-discord-youtube-linux-bundle.tar.gz`
|
||
|
||
На машине **без интернета**:
|
||
```bash
|
||
cd /opt
|
||
sudo tar -xzf zapret-discord-youtube-linux-bundle.tar.gz
|
||
cd zapret-bundle-*/installed-scripts
|
||
sudo ./install.sh --offline
|
||
```
|
||
|
||
Бандл содержит:
|
||
- Исходники `bol-van/zapret` (для сборки nfqws)
|
||
- `lists/*.txt` (свежие домены)
|
||
- `.service/hosts` (статичные IP)
|
||
- Все скрипты и стратегии
|
||
|
||
### Вариант 3: Установка на Windows и перенос в Linux
|
||
|
||
1. Скачать репозиторий на Windows (где VPN работает)
|
||
2. Перенести на Linux через флешку/сеть
|
||
3. На Linux запустить `sudo ./install.sh --offline`
|
||
|
||
### Если GitHub заблокирован — поведение скриптов
|
||
|
||
| Скрипт | Поведение при отсутствии интернета |
|
||
|--------|-----------------------------------|
|
||
| `install.sh` | Предупреждает, спрашивает, можно запустить `--offline` |
|
||
| `sync_from_upstream.sh` | Переключается в offline-режим, использует `.bundle/` |
|
||
| `update.sh` | Если sync не удался — сообщает и выходит |
|
||
| `install_nfqws.sh` | Предлагает proxychains, `--offline`, или `prepare_offline_bundle.sh` |
|
||
|
||
### Настройка прокси через .env
|
||
|
||
```bash
|
||
cp .env.example .env
|
||
nano .env
|
||
```
|
||
|
||
```
|
||
GITHUB_PROXY=socks5://127.0.0.1:1080
|
||
```
|
||
|
||
Скрипты автоматически прочитают `.env` при запуске.
|
||
|
||
### Обновление при заблокированном GitHub
|
||
|
||
```bash
|
||
# С VPN/proxy на целевой машине:
|
||
sudo ./update.sh --full-auto
|
||
|
||
# Или через proxychains:
|
||
proxychains ./update.sh --full-auto
|
||
```
|
||
|
||
---
|
||
|
||
## Лицензия
|
||
|
||
MIT License.
|
||
|
||
**Авторы:**
|
||
- [bol-van](https://github.com/bol-van) — оригинальный zapret
|
||
- [Flowseal](https://github.com/Flowseal) — Windows-обёртка и стратегии
|
||
- Linux-адаптация — [Gitea](https://giteas.stitch505.su/Stitch505/zapret-discord-youtube-linux)
|