- HTML 49.3%
- Python 27.6%
- Shell 23.1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| ct | ||
| install | ||
| ui | ||
| .gitattributes | ||
| .gitignore | ||
| README.md | ||
Zapret + Proxy в LXC для Proxmox VE
Репозиторий: http://192.168.1.111:3000/alex/zapret-lxc
Скрипт в стиле community-scripts.org создаёт LXC-контейнер в Proxmox VE, устанавливает в него zapret, поднимает два прокси и веб-панель:
- SOCKS5 —
tpwsиз состава zapret, порт987; - HTTP-прокси — Privoxy, порт
8118, форвардит запросы в SOCKS5; - веб-панель — статус сервисов и портов, выбор стратегии и хостлиста, проверка доступности адреса, порт
8080.
Схема:
Устройство в LAN
↓
HTTP :8118 (Privoxy) или SOCKS5 :987 (tpws)
↓
zapret (nfqws/tpws обходят DPI)
↓
Интернет
Что делает установщик
- создаёт непривилегированный LXC на Debian 13;
- загружает на хосте Proxmox модули ядра, нужные zapret;
- скачивает последний релиз
bol-van/zapretи ставит бинарники; - применяет готовую стратегию
fix_v3из Snowy-Fluffy/zapret.cfgs (хостлистlist-basic; еслиfix_v3нет —general); - включает SOCKS5 в
tpwsи биндит его на LAN-интерфейс контейнера; - устанавливает и настраивает Privoxy поверх SOCKS5;
- добавляет helper
zapret-strategyдля смены стратегии одной командой; - ставит веб-панель на
http://<IP>:8080; - настраивает systemd-сервисы и увеличенный таймаут запуска (большой хостлист).
Требования
- Proxmox VE 8/9, запуск от
rootна ноде; - доступ к GitHub с ноды и из контейнера;
- свободное место под шаблон Debian 13 и контейнер;
- ядро Proxmox с поддержкой
nf_tables/ip_set(стандартное ядро PVE подходит).
Установка
Из локальной копии репозитория
bash /root/zapret-lxc/ct/zapret.sh
Скрипт сам найдёт соседний install/zapret-install.sh. Если каталог является git-клоном, адрес для будущих update определится автоматически из origin (GitHub или Gitea). Для копии без .git или для работы команды update задайте COMMUNITY_SCRIPTS_URL, как в варианте ниже.
Через curl (Gitea)
COMMUNITY_SCRIPTS_URL="http://192.168.1.111:3000/alex/zapret-lxc/raw/branch/main" \
bash -c "$(curl -fsSL http://192.168.1.111:3000/alex/zapret-lxc/raw/branch/main/ct/zapret.sh)"
Для этого репозитория базой служит http://192.168.1.111:3000/alex/zapret-lxc/raw/branch/main. Скрипт подставляет её сам, если COMMUNITY_SCRIPTS_URL не задан и origin не указывает на GitHub/Gitea; явное значение нужно для форка или другого адреса.
Параметры
| Переменная | По умолчанию | Описание |
|---|---|---|
var_cpu |
1 |
vCPU |
var_ram |
1024 |
RAM, МБ |
var_disk |
4 |
диск, ГБ |
var_os |
debian |
ОС контейнера |
var_version |
13 |
версия Debian |
var_unprivileged |
1 |
непривилегированный контейнер |
var_arm64 |
yes |
разрешить ARM64-шаблон |
Пример с другими ресурсами:
var_ram=2048 var_disk=8 bash /root/zapret-lxc/ct/zapret.sh
После установки
В конце установки скрипт печатает IP контейнера. Прокси будут доступны по адресам:
SOCKS5: <IP контейнера>:987
HTTP: <IP контейнера>:8118
Web UI: http://<IP контейнера>:8080
Настройки клиентов:
- Firefox / браузер с SOCKS5 — включите «Proxy DNS when using SOCKS v5», чтобы DNS тоже шёл через прокси;
- curl — используйте
--socks5-hostname, а не--socks5; - iPhone/iPad/Android TV — HTTP-прокси
<IP>:8118; - Windows/macOS/Linux — SOCKS5
<IP>:987предпочтительнее.
Веб-панель
Открыть: http://<IP контейнера>:8080.
Панель показывает:
- состояние сервисов
zapret,privoxy,zapret-ui; - открытые порты
987,8118,8080и готовые адреса для клиентов (с копированием); - живой график
Network: суммарная скорость и скорость по каждому клиенту (IP) за последние 5 минут, с подсказками при наведении и отключением линий в легенде; - текущую стратегию и текущий хостлист;
- смену стратегии и хостлиста с перезапуском zapret;
- проверку открытия адреса (по умолчанию
https://www.youtube.com/) напрямую, через SOCKS5 и через HTTP-прокси.
Скорость по клиентам считается по счётчикам TCP-сокетов ss для прокси-портов 987/8118: это реальный трафик каждого LAN-клиента через прокси. Данные хранятся в памяти процесса zapret-ui и обнуляются при его перезапуске.
Применение стратегии/хостлиста идёт в фоне, страница сама опрашивает статус. Большой хостлист может применяться несколько минут.
Панель слушает 0.0.0.0:8080, но принимает запросы только из приватных сетей (RFC1918 и loopback); авторизации нет. Не публикуйте порт 8080 в интернет. Сервис: zapret-ui, файлы: /opt/zapret-ui.
Смена стратегии
Стратегию и хостлист можно менять в веб-панели на http://<IP>:8080. Из консоли:
Посмотреть доступные стратегии:
pct exec <CTID> -- ls /opt/zapret/zapret.cfgs/configurations
Применить:
pct exec <CTID> -- zapret-strategy fix_v3
zapret-strategy сам выставит FWTYPE, IFACE_LAN, TPWS_SOCKS_ENABLE и TPPORT_SOCKS, затем перезапустит zapret. Стратегии можно перебирать: у разных провайдеров работают разные наборы.
Ручное редактирование конфига:
pct exec <CTID> -- nano /opt/zapret/config
pct exec <CTID> -- systemctl restart zapret
При ручной замене конфига сохраняйте строки TPWS_SOCKS_ENABLE, TPPORT_SOCKS, IFACE_LAN, FWTYPE — иначе SOCKS5 может перестать слушать LAN.
Обновление
Внутри контейнера:
update
Или кнопкой Update в интерфейсе Proxmox. update_script обновит zapret и веб-панель, сохранит конфиг, списки, кастомные fake-файлы и стратегии. Версия zapret при этом остаётся закреплённой (v72.9), а не «последней».
Если update отвечает 404 (контейнер создан до перехода на Gitea и в /usr/bin/update остался адрес апстрима), один раз перезапишите entrypoint внутри LXC:
cat > /usr/bin/update <<'EOF'
#!/usr/bin/env bash
export SCRIPT_SLUG="zapret"
export UPDATE_SCRIPT_NAME="zapret"
export COMMUNITY_SCRIPTS_URL="http://192.168.1.111:3000/alex/zapret-lxc/raw/branch/main"
export COMMUNITY_SCRIPTS_CORE_URL="https://raw.githubusercontent.com/community-scripts/core/main"
bash -c "$(curl -fsSL "http://192.168.1.111:3000/alex/zapret-lxc/raw/branch/main/ct/zapret.sh")"
EOF
chmod +x /usr/bin/update
После этого обычный update заработает. Проверка:
cat /usr/bin/update
В файле должно быть COMMUNITY_SCRIPTS_URL="http://192.168.1.111:3000/alex/zapret-lxc/raw/branch/main". Для копии репозитория без .git или нестандартного remote адрес также можно задать явно через ZAPRET_SCRIPTS_URL при установке.
Обновить только хостлисты:
pct exec <CTID> -- git -C /opt/zapret/zapret.cfgs pull
pct exec <CTID> -- systemctl restart zapret
Диагностика
pct exec <CTID> -- systemctl status zapret --no-pager
pct exec <CTID> -- systemctl status privoxy --no-pager
pct exec <CTID> -- systemctl status zapret-ui --no-pager
pct exec <CTID> -- ss -lntp
pct exec <CTID> -- curl --socks5-hostname 127.0.0.1:987 -I https://example.com
pct exec <CTID> -- curl -x http://127.0.0.1:8118 -I https://example.com
pct exec <CTID> -- journalctl -u zapret -n 100 --no-pager
pct exec <CTID> -- journalctl -u privoxy -n 100 --no-pager
pct exec <CTID> -- journalctl -u zapret-ui -n 100 --no-pager
Если порт 987 слушается только на 127.0.0.1, проверьте IFACE_LAN в /opt/zapret/config: там должен быть LAN-интерфейс контейнера (обычно eth0).
Важно
- Прокси доступен всем в LAN. Privoxy разрешает только RFC1918-адреса (
10.0.0.0/8,172.16.0.0/12,192.168.0.0/16). Если у вас другая адресация — поправьтеpermit-accessв/etc/privoxy/config. - Если у контейнера включён firewall Proxmox, разрешите входящие
987,8118,8080. - Не публикуйте порты
987,8118и8080в интернет. SOCKS5вtpwsработает только для TCP (ограничение zapret).- SOCKS5 работает как обычный релей, а DPI-обход выполняет nfqws (
TPWS_SOCKS_OPT=""в/opt/zapret/config). Не включайте собственный десинк вtpws— двойной десинк ломает TLS. - Стратегия по умолчанию —
fix_v3; на ряде провайдеров именно она пробивает видео-CDN YouTube, тогда какgeneral/general_ALTдают толькоredirector. DPI у провайдеров различается, поэтому стратегию всё равно может понадобиться подбирать. - Для работы zapret нужны модули ядра хоста. Скрипт загружает их и записывает список в
/etc/modules-load.d/zapret.conf, чтобы они поднимались при загрузке Proxmox. - Если контейнер не может создать правила
nft/iptables, пересоздайте его привилегированным:
var_unprivileged=0 bash /root/zapret-lxc/ct/zapret.sh
- zapret ставится из официального репозитория
bol-van/zapret. Готовая стратегия, хостлисты и fake-файлы — изSnowy-Fluffy/zapret.cfgs. - Версия zapret закреплена на
v72.9: вv72.13ломается обход DPI у стратегий изzapret.cfgs(general,general_ALT,fix_v3и др.). При ручном запуске установщика версию можно переопределить переменнойZAPRET_VERSION.
Структура
ct/zapret.sh # создание LXC, меню/параметры community-scripts, update
install/zapret-install.sh # установка zapret, SOCKS5, Privoxy внутри контейнера
ui/server.py # API веб-панели
ui/index.html # страница веб-панели
ui/zapret-ui.service # systemd-юнит панели