mirror of
https://github.com/andrey271192/amnezia_web-PRO.git
synced 2026-09-20 14:42:00 +00:00
docsfeat(warp): clarify optional install + add uninstall command
README/panel-guide/UI explain WARP is not required; document uninstall. Add warp-amnezia.sh uninstall to strip warp conf, rules, and start.sh block. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
29
README.md
29
README.md
@@ -1,6 +1,6 @@
|
|||||||
# Amnezia Admin WebUI
|
# Amnezia Admin WebUI
|
||||||
|
|
||||||
Веб-панель на вашем VPS для управления клиентами **AmneziaWG**: вкл/выкл, удаление, переименование, дата отключения; при нескольких контейнерах — переключатель **«Инстанс»** (`AWG_PROFILES`); **экспорт .conf** при наличии `last_config`; **новый клиент под каскад** (свой Endpoint и ключи на сервере); **Cloudflare WARP** — выбор клиентов, для которых трафик уходит в интернет через `warp` на сервере. Работает через Docker и `docker exec` в контейнер **Amnezia** (по умолчанию `amnezia-awg2`).
|
Веб-панель на вашем VPS для управления клиентами **AmneziaWG**: вкл/выкл, удаление, переименование, дата отключения; при нескольких контейнерах — переключатель **«Инстанс»** (`AWG_PROFILES`); **экспорт .conf** при наличии `last_config`; **новый клиент под каскад** (свой Endpoint и ключи на сервере). **Cloudflare WARP** — *необязательное* дополнение: часть клиентов может выходить в интернет через интерфейс `warp` внутри контейнера AWG (ставится отдельно скриптом на хосте). Работает через Docker и `docker exec` в контейнер **Amnezia** (по умолчанию `amnezia-awg2`).
|
||||||
|
|
||||||
Справочник по интерфейсу, типичным сбоям и HTTP API: **[docs/panel-guide.md](docs/panel-guide.md)**.
|
Справочник по интерфейсу, типичным сбоям и HTTP API: **[docs/panel-guide.md](docs/panel-guide.md)**.
|
||||||
|
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
| Адрес | Назначение |
|
| Адрес | Назначение |
|
||||||
|-------|------------|
|
|-------|------------|
|
||||||
| **`http://IP:HOST_PORT`** (по умолчанию **`:8080`**) | **Админ-панель:** клиенты AmneziaWG, WARP, каскад, экспорт `.conf`, смена пароля. Внизу страницы — футер со ссылками автора (GitHub, донат, Telegram и т.д.). |
|
| **`http://IP:HOST_PORT`** (по умолчанию **`:8080`**) | **Админ-панель:** клиенты AmneziaWG, опциональный блок **Cloudflare WARP**, каскад, экспорт `.conf`, смена пароля. Внизу страницы — футер со ссылками автора (GitHub, донат, Telegram и т.д.). |
|
||||||
| **`http://IP:LANDING_PORT`** (по умолчанию **`:80`**) | **Публичная страница** для приглашённых: инструкция, кнопка перехода в админку (`landing/admin-port.js` подставляет тот же `HOST_PORT`). Текст «проблемы — администратору сервера» и дисклеймер. **Без** блока доната и личных ссылок автора — они только в админке. |
|
| **`http://IP:LANDING_PORT`** (по умолчанию **`:80`**) | **Публичная страница** для приглашённых: инструкция, кнопка перехода в админку (`landing/admin-port.js` подставляет тот же `HOST_PORT`). Текст «проблемы — администратору сервера» и дисклеймер. **Без** блока доната и личных ссылок автора — они только в админке. |
|
||||||
|
|
||||||
Если порт **80** занят другим сервисом, задайте **`LANDING_PORT`** (например `8081`) или **`SKIP_LANDING=1`**. На работу панели по **`HOST_PORT`** это не влияет.
|
Если порт **80** занят другим сервисом, задайте **`LANDING_PORT`** (например `8081`) или **`SKIP_LANDING=1`**. На работу панели по **`HOST_PORT`** это не влияет.
|
||||||
@@ -102,11 +102,12 @@ curl -fsSL https://raw.githubusercontent.com/andrey271192/Amnezia_web/main/scrip
|
|||||||
|
|
||||||
Если в вебе пропал список **«Инстанс»**, смотрите раздел «Если пропал список Инстанс» в **[docs/panel-guide.md](docs/panel-guide.md)**.
|
Если в вебе пропал список **«Инстанс»**, смотрите раздел «Если пропал список Инстанс» в **[docs/panel-guide.md](docs/panel-guide.md)**.
|
||||||
|
|
||||||
### Cloudflare WARP (только AmneziaWG в Docker)
|
### Cloudflare WARP (необязательно)
|
||||||
|
|
||||||
На хосте VPS скрипт регистрирует туннель через [wgcf](https://github.com/ViRb3/wgcf) и кладёт `warp.conf` в контейнер AWG (`/opt/warp` по умолчанию). В веб-панели отмечаете, какие клиенты выходят в интернет через интерфейс `warp`.
|
**Устанавливать не обязательно.** Панель и обычный AmneziaWG работают без WARP. Раздел **Cloudflare WARP** в веб-интерфейсе нужен только если вы хотите, чтобы **выбранные** клиенты (с IPv4 `10.8.x.x/32` в AllowedIPs) выходили в интернет через туннель Cloudflare внутри контейнера AWG.
|
||||||
|
|
||||||
На **хосте VPS** (root), из каталога с репозиторием:
|
- **Не нужен WARP** — ничего на хосте не запускайте. В панели будет статус **«Не установлен»** — это нормально, блок можно не трогать.
|
||||||
|
- **Нужен WARP** — один раз на хосте VPS (root), из каталога с репозиторием (часто `/opt/amnezia-admin`):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /opt/amnezia-admin
|
cd /opt/amnezia-admin
|
||||||
@@ -115,11 +116,23 @@ chmod +x scripts/warp-amnezia.sh
|
|||||||
./scripts/warp-amnezia.sh install
|
./scripts/warp-amnezia.sh install
|
||||||
```
|
```
|
||||||
|
|
||||||
Подкоманды: `install`, `start`, `stop`, `status`, `rekey`. Учёт wgcf хранится в `/root/wgcf-account.toml` на хосте.
|
Скрипт регистрирует туннель через [wgcf](https://github.com/ViRb3/wgcf), создаёт `warp.conf` в контейнере (`/opt/warp` по умолчанию). Дальше в панели отмечаете клиентов и жмёте **«Применить маршрутизацию»** (контейнер AWG перезапустится).
|
||||||
|
|
||||||
В панели: раздел **Cloudflare WARP** — отметить клиентов (только IPv4 вида `10.8.x.x/32`), **Применить маршрутизацию** (контейнер AWG перезапускается). Маркеры в `start.sh` (`# --- WARP-MANAGER BEGIN ---`) совместимы с прежним `warp-manager`, если вы уже использовали его.
|
Подкоманды: `install`, `start`, `stop`, `status`, `rekey`, **`uninstall`**. Учёт wgcf на хосте: `/root/wgcf-account.toml` (и бинарник `/root/wgcf`, если скачан).
|
||||||
|
|
||||||
Необязательно передайте в контейнер **amnezia-admin** переменные `WARP_DIR`, `WARP_CONF_PATH`, `WARP_CLIENTS_LIST`, `AMNEZIA_START_SCRIPT` через установщик — см. таблицу выше.
|
**Полностью убрать WARP** после установки (интерфейс `warp`, правила маршрутизации/NAT, блок `# --- WARP-MANAGER ---` в `start.sh`, `warp.conf` и список клиентов в каталоге WARP в контейнере; затем перезапуск контейнера AWG):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /opt/amnezia-admin
|
||||||
|
./scripts/warp-amnezia.sh uninstall
|
||||||
|
# нестандартный путь к start.sh в контейнере: AMNEZIA_START_SCRIPT=/путь ./scripts/warp-amnezia.sh uninstall
|
||||||
|
```
|
||||||
|
|
||||||
|
Файлы **wgcf** на хосте (`/root/wgcf-account.toml`, `/root/wgcf-profile.conf`, бинарник `wgcf`) скрипт **не** удаляет — при желании удалите вручную.
|
||||||
|
|
||||||
|
Маркеры в `start.sh` (`# --- WARP-MANAGER BEGIN ---`) совместимы с прежним `warp-manager`, если вы уже использовали его.
|
||||||
|
|
||||||
|
Необязательно задавать в контейнере **amnezia-admin** переменные `WARP_DIR`, `WARP_CONF_PATH`, `WARP_CLIENTS_LIST`, `AMNEZIA_START_SCRIPT` через установщик — см. таблицу выше.
|
||||||
|
|
||||||
Итоговые URL после установки совпадают с таблицей **«Что открывается по какому порту»** в начале этого файла; установщик записывает выбранный `HOST_PORT` в **`landing/admin-port.js`**, чтобы кнопка на лендинге вела на нужную админку.
|
Итоговые URL после установки совпадают с таблицей **«Что открывается по какому порту»** в начале этого файла; установщик записывает выбранный `HOST_PORT` в **`landing/admin-port.js`**, чтобы кнопка на лендинге вела на нужную админку.
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|-------------------|------------|
|
|-------------------|------------|
|
||||||
| **Инстанс** | Переключение между профилями из `AWG_PROFILES` (разные контейнеры AmneziaWG / Legacy). Виден только если в контейнере панели задан JSON из **двух и более** профилей. |
|
| **Инстанс** | Переключение между профилями из `AWG_PROFILES` (разные контейнеры AmneziaWG / Legacy). Виден только если в контейнере панели задан JSON из **двух и более** профилей. |
|
||||||
| **Время** | Отображение часов контейнера и браузера; синхронизация времени хоста VPS по SSH (если доступно). |
|
| **Время** | Отображение часов контейнера и браузера; синхронизация времени хоста VPS по SSH (если доступно). |
|
||||||
| **Cloudflare WARP** | Выбор клиентов (IPv4 `/32`), выход в интернет через интерфейс `warp` в контейнере AWG. |
|
| **Cloudflare WARP** | *Необязательно.* Вывод части клиентов в интернет через интерфейс `warp` в контейнере AWG. Если WARP не ставили — статус **«Не установлен»** нормален; панель и VPN без этого работают. Установка и удаление — скрипт `scripts/warp-amnezia.sh` на хосте (`install` / **`uninstall`**), подробности в основном [README](../README.md). |
|
||||||
| **Новый клиент под каскад** | Создание нового peer на сервере с **вашим Endpoint** (промежуточный узел); выдача готового `.conf`. |
|
| **Новый клиент под каскад** | Создание нового peer на сервере с **вашим Endpoint** (промежуточный узел); выдача готового `.conf`. |
|
||||||
| **Пользователи** | Вкл/выкл peer, удаление, переименование, даты отключения; экспорт `.conf` если в записи есть `userData.last_config`. |
|
| **Пользователи** | Вкл/выкл peer, удаление, переименование, даты отключения; экспорт `.conf` если в записи есть `userData.last_config`. |
|
||||||
|
|
||||||
@@ -32,6 +32,16 @@
|
|||||||
|
|
||||||
Файл **`landing/admin-port.js`** пересобирается установщиком и задаёт порт админки для кнопки на лендинге.
|
Файл **`landing/admin-port.js`** пересобирается установщиком и задаёт порт админки для кнопки на лендинге.
|
||||||
|
|
||||||
|
## Cloudflare WARP: нужно ли ставить
|
||||||
|
|
||||||
|
**Нет, если обычного VPN достаточно.** WARP — дополнительная опция «выход в интернет через Cloudflare» для отмеченных в панели клиентов (IPv4 вида `10.8.x.x/32`).
|
||||||
|
|
||||||
|
| Задача | Действие |
|
||||||
|
|--------|----------|
|
||||||
|
| WARP не нужен | Ничего не устанавливайте; раздел в вебе с текстом «Не установлен» можно игнорировать. |
|
||||||
|
| Включить WARP | На VPS под root: `bash scripts/warp-amnezia.sh install` из каталога репозитория, затем настройка галочек в панели и «Применить» — см. [README](../README.md). |
|
||||||
|
| Полностью убрать WARP | `./scripts/warp-amnezia.sh uninstall` на хосте; учёт wgcf в `/root/` при желании удалите вручную. |
|
||||||
|
|
||||||
## Конфигурации клиентов
|
## Конфигурации клиентов
|
||||||
|
|
||||||
- **Старые строки без `last_config`** — полный `.conf` с сервера собрать нельзя (нет приватного ключа). Используйте приложение Amnezia или блок **«Новый клиент под каскад»** (новый ключ на сервере).
|
- **Старые строки без `last_config`** — полный `.conf` с сервера собрать нельзя (нет приватного ключа). Используйте приложение Amnezia или блок **«Новый клиент под каскад»** (новый ключ на сервере).
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "amnezia-admin",
|
"name": "amnezia-admin",
|
||||||
"version": "1.1.3",
|
"version": "1.1.4",
|
||||||
"private": true,
|
"private": true,
|
||||||
"description": "Web-панель AmneziaWG: несколько инстансов, WARP, каскад/Endpoint, экспорт .conf (Docker)",
|
"description": "Web-панель AmneziaWG: несколько инстансов, WARP, каскад/Endpoint, экспорт .conf (Docker)",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
|||||||
@@ -634,6 +634,11 @@ function renderWarpPanel(data) {
|
|||||||
hint.innerHTML =
|
hint.innerHTML =
|
||||||
"Один раз на хосте (root): <code class=\"inline\">bash scripts/warp-amnezia.sh install</code> — из каталога клона репозитория на VPS. Если контейнер не угадан автоматически: <code class=\"inline\">bash scripts/warp-amnezia.sh install amnezia-awg2</code>.";
|
"Один раз на хосте (root): <code class=\"inline\">bash scripts/warp-amnezia.sh install</code> — из каталога клона репозитория на VPS. Если контейнер не угадан автоматически: <code class=\"inline\">bash scripts/warp-amnezia.sh install amnezia-awg2</code>.";
|
||||||
warpActionsEl.appendChild(hint);
|
warpActionsEl.appendChild(hint);
|
||||||
|
const skip = document.createElement("p");
|
||||||
|
skip.className = "muted warp-muted";
|
||||||
|
skip.textContent =
|
||||||
|
"Если Cloudflare WARP не нужен, ничего не выполняйте — AmneziaWG и панель работают без него. Полное удаление: bash scripts/warp-amnezia.sh uninstall (см. README).";
|
||||||
|
warpActionsEl.appendChild(skip);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -96,9 +96,10 @@
|
|||||||
<span class="muted" id="warp-status-line"></span>
|
<span class="muted" id="warp-status-line"></span>
|
||||||
</div>
|
</div>
|
||||||
<p class="muted warp-intro">
|
<p class="muted warp-intro">
|
||||||
Выход в интернет через Cloudflare WARP для выбранных клиентов AmneziaWG (правила в контейнере: таблица маршрутизации и NAT).
|
<strong>Необязательно.</strong> Если достаточно обычного AmneziaWG без выхода части клиентов через Cloudflare — раздел можно не трогать (статус «Не установлен» — норма).
|
||||||
|
Если WARP нужен: выход в интернет через Cloudflare для <em>выбранных</em> клиентов (правила маршрутизации и NAT в контейнере).
|
||||||
Один раз на хосте VPS под root: в каталоге с репозиторием выполните <code class="inline">bash scripts/warp-amnezia.sh install</code>.
|
Один раз на хосте VPS под root: в каталоге с репозиторием выполните <code class="inline">bash scripts/warp-amnezia.sh install</code>.
|
||||||
Затем отметьте клиентов ниже и нажмите «Применить» (контейнер AWG перезапустится).
|
Затем отметьте клиентов ниже и нажмите «Применить» (контейнер AWG перезапустится). Убрать WARP полностью: <code class="inline">bash scripts/warp-amnezia.sh uninstall</code> — см. README.
|
||||||
</p>
|
</p>
|
||||||
<div id="warp-actions" class="warp-actions"></div>
|
<div id="warp-actions" class="warp-actions"></div>
|
||||||
<div id="warp-client-list" class="warp-client-list"></div>
|
<div id="warp-client-list" class="warp-client-list"></div>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Cloudflare WARP внутри контейнера AmneziaWG (wgcf → warp.conf → wg-quick).
|
# Cloudflare WARP внутри контейнера AmneziaWG (wgcf → warp.conf → wg-quick).
|
||||||
# Запускать на хосте VPS от root: установка и обслуживание туннеля WARP для панели Amnezia Admin.
|
# Запускать на хосте VPS от root: установка и обслуживание туннеля WARP для панели Amnezia Admin.
|
||||||
# После install управление «кто выходит через WARP» — в веб-панели Amnezia Admin (раздел WARP).
|
# После install управление «кто выходит через WARP» — в веб-панели (раздел WARP). Полное снятие: подкоманда uninstall.
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
WGCF_VERSION="${WGCF_VERSION:-2.2.30}"
|
WGCF_VERSION="${WGCF_VERSION:-2.2.30}"
|
||||||
@@ -10,8 +10,8 @@ WGCF_ACCOUNT="${WGCF_ACCOUNT:-/root/wgcf-account.toml}"
|
|||||||
WGCF_PROFILE="${WGCF_PROFILE:-/root/wgcf-profile.conf}"
|
WGCF_PROFILE="${WGCF_PROFILE:-/root/wgcf-profile.conf}"
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
echo "Использование: $0 {install|start|stop|status|rekey} [имя_контейнера]"
|
echo "Использование: $0 {install|start|stop|status|rekey|uninstall} [имя_контейнера]"
|
||||||
echo "Переменные: AWG_CONTAINER, WARP_DIR (по умолчанию /opt/warp)"
|
echo "Переменные: AWG_CONTAINER, WARP_DIR (по умолчанию /opt/warp), AMNEZIA_START_SCRIPT (для uninstall, по умолчанию /opt/amnezia/start.sh)"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -152,6 +152,33 @@ is_running() {
|
|||||||
docker exec "$CONTAINER" ip addr show warp >/dev/null 2>&1
|
docker exec "$CONTAINER" ip addr show warp >/dev/null 2>&1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cmd_uninstall() {
|
||||||
|
echo "→ Останавливаю WARP и убираю автозапуск в контейнере ${CONTAINER}…"
|
||||||
|
warp_down || true
|
||||||
|
local START_SCRIPT="${AMNEZIA_START_SCRIPT:-/opt/amnezia/start.sh}"
|
||||||
|
docker exec \
|
||||||
|
-e START_SCRIPT="$START_SCRIPT" \
|
||||||
|
-e WARP_CONF="$AWG_WARP_CONF" \
|
||||||
|
-e WARP_DIR="$AWG_WARP_DIR" \
|
||||||
|
"$CONTAINER" sh -c '
|
||||||
|
set +e
|
||||||
|
ip rule | awk "/lookup 100/ {print \$1}" | sed "s/://g" | sort -rn | while read -r pr; do ip rule del priority "$pr" 2>/dev/null || true; done
|
||||||
|
iptables -t nat -S POSTROUTING 2>/dev/null | grep -- "-o warp -j MASQUERADE" | while read -r line; do
|
||||||
|
rule=$(echo "$line" | sed "s/^-A /-D /")
|
||||||
|
iptables -t nat $rule 2>/dev/null || true
|
||||||
|
done
|
||||||
|
ip route flush table 100 2>/dev/null || true
|
||||||
|
if [ -f "$START_SCRIPT" ] && grep -qF "# --- WARP-MANAGER BEGIN ---" "$START_SCRIPT" 2>/dev/null; then
|
||||||
|
sed -i "/# --- WARP-MANAGER BEGIN ---/,/# --- WARP-MANAGER END ---/d" "$START_SCRIPT"
|
||||||
|
fi
|
||||||
|
rm -f "$WARP_CONF" "${WARP_DIR}/clients.list" "${WARP_DIR}/wgcf-profile.conf" 2>/dev/null || true
|
||||||
|
'
|
||||||
|
echo "→ Перезапускаю контейнер ${CONTAINER}…"
|
||||||
|
docker restart "$CONTAINER" >/dev/null
|
||||||
|
echo "Готово: WARP отключён, файлы в контейнере и блок в start.sh убраны."
|
||||||
|
echo "Учёт wgcf на хосте при желании удалите вручную: $WGCF_ACCOUNT $WGCF_PROFILE (и $WGCF_BIN, если не нужен)."
|
||||||
|
}
|
||||||
|
|
||||||
cmd_install() {
|
cmd_install() {
|
||||||
echo "Бэкап конфигов в контейнере…"
|
echo "Бэкап конфигов в контейнере…"
|
||||||
docker exec "$CONTAINER" sh -c "
|
docker exec "$CONTAINER" sh -c "
|
||||||
@@ -246,6 +273,7 @@ case "$CMD" in
|
|||||||
warp_down
|
warp_down
|
||||||
echo "WARP остановлен."
|
echo "WARP остановлен."
|
||||||
;;
|
;;
|
||||||
|
uninstall) cmd_uninstall ;;
|
||||||
status) cmd_status ;;
|
status) cmd_status ;;
|
||||||
rekey) cmd_rekey ;;
|
rekey) cmd_rekey ;;
|
||||||
*) usage ;;
|
*) usage ;;
|
||||||
|
|||||||
@@ -1700,7 +1700,7 @@ app.post("/api/warp/start", requireAuth, async (req, res) => {
|
|||||||
if (!(await warpFileExists(rt, rt.profile.warpConf))) {
|
if (!(await warpFileExists(rt, rt.profile.warpConf))) {
|
||||||
return res.status(400).json({
|
return res.status(400).json({
|
||||||
error:
|
error:
|
||||||
"WARP не установлен (нет warp.conf). Один раз выполните на хосте: scripts/warp-amnezia.sh install — см. README.",
|
"WARP не установлен (нет warp.conf). На хосте: scripts/warp-amnezia.sh install — или игнорируйте раздел, если WARP не нужен (см. README).",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
@@ -1732,7 +1732,7 @@ app.post("/api/warp/routing", requireAuth, async (req, res) => {
|
|||||||
if (!(await warpFileExists(rt, rt.profile.warpConf))) {
|
if (!(await warpFileExists(rt, rt.profile.warpConf))) {
|
||||||
return res.status(400).json({
|
return res.status(400).json({
|
||||||
error:
|
error:
|
||||||
"WARP не установлен. Сначала scripts/warp-amnezia.sh install на хосте VPS (root).",
|
"WARP не установлен. Сначала scripts/warp-amnezia.sh install на хосте VPS (root), либо не используйте этот раздел.",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
const raw = req.body?.selectedAllowedIps;
|
const raw = req.body?.selectedAllowedIps;
|
||||||
|
|||||||
Reference in New Issue
Block a user