mirror of
https://github.com/andrey271192/WARP-Web-UI-Relay-Beta.git
synced 2026-09-20 11:55:35 +00:00
docs: publish relay beta repo
This commit is contained in:
36
README.md
36
README.md
@@ -1,6 +1,10 @@
|
||||
# WARP Web UI
|
||||
|
||||
Веб-панель для управления **Cloudflare WARP** на Linux: подключение и отключение туннеля, активация WARP+, настройка SOCKS-прокси и готовые пресеты для **3x-ui** и **Amnezia Xray**.
|
||||
Веб-панель для управления **Cloudflare WARP** на Linux: подключение и отключение туннеля, активация WARP+, настройка SOCKS-прокси, готовые пресеты для **3x-ui**/**Amnezia Xray** и beta-модуль **WARP Relay**.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
Документация на английском (кратко): [README.en.md](README.en.md).
|
||||
|
||||
@@ -10,6 +14,7 @@
|
||||
- **Аккаунт**: информация о регистрации, применение лицензионного ключа WARP+
|
||||
- **Установка и удаление** пакета `cloudflare-warp` прямо из браузера (репозиторий Cloudflare для Debian/Ubuntu)
|
||||
- **SOCKS-прокси**: смена порта `warp-cli proxy` (часто `40000` или `1024`)
|
||||
- **WARP Relay beta**: UDP relay через `nftables`/`iptables` на выбранный WARP/WireGuard endpoint, single-port или Cloudflare multiport
|
||||
- **Пресет 3x-ui**: outbound `warp-socks` → `127.0.0.1:ПОРТ` и правило маршрутизации `geosite:google`
|
||||
- **Пресет Amnezia**: мост Docker `172.17.0.1:11025` → SOCKS на хосте, маршрутизация WARP для выбранных клиентов с понятными именами
|
||||
|
||||
@@ -18,6 +23,7 @@
|
||||
- Linux (рекомендуется Debian/Ubuntu)
|
||||
- `python3` — только стандартная библиотека, без pip
|
||||
- `systemd`
|
||||
- `nftables` или `iptables` для WARP Relay beta
|
||||
- По желанию: пакет `cloudflare-warp` (можно поставить из UI или скриптом `scripts/warp-install-cf.sh`)
|
||||
- Для интеграций: `docker`, `socat`, панель **3x-ui** и/или **Amnezia**
|
||||
|
||||
@@ -29,6 +35,12 @@
|
||||
curl -fsSL https://raw.githubusercontent.com/andrey271192/WARP-Web-UI/main/install.sh | sudo bash
|
||||
```
|
||||
|
||||
Beta-репозиторий с WARP Relay:
|
||||
|
||||
```bash
|
||||
curl -fsSL https://raw.githubusercontent.com/andrey271192/WARP-Web-UI-Relay-Beta/main/install.sh | sudo bash
|
||||
```
|
||||
|
||||
Установщик **задаёт вопросы** (можно нажать Enter для значения по умолчанию):
|
||||
|
||||
| Вопрос | По умолчанию | Зачем это нужно |
|
||||
@@ -56,6 +68,12 @@ sudo bash install.sh
|
||||
curl -fsSL https://raw.githubusercontent.com/andrey271192/WARP-Web-UI/main/uninstall.sh | sudo bash
|
||||
```
|
||||
|
||||
Beta-репозиторий:
|
||||
|
||||
```bash
|
||||
curl -fsSL https://raw.githubusercontent.com/andrey271192/WARP-Web-UI-Relay-Beta/main/uninstall.sh | sudo bash
|
||||
```
|
||||
|
||||
Или из каталога клона: `sudo bash uninstall.sh` — останавливает сервис, по запросу удаляет файлы приложения, конфигурацию и при желании пакет `cloudflare-warp`.
|
||||
|
||||
## Структура репозитория
|
||||
@@ -98,6 +116,20 @@ install.sh / uninstall.sh # Установка и снятие «в одн
|
||||
|
||||
Нужны `docker`, контейнер Amnezia Xray и переменные `AMNEZIA_*` при нестандартных путях — см. `.env.example`.
|
||||
|
||||
## WARP Relay beta
|
||||
|
||||
`openwarpkit/warp-relay` взят как идея и встроен без запуска внешнего интерактивного скрипта. Панель сама управляет только своими firewall rules с тегом `WR_WEBUI_RELAY`.
|
||||
|
||||
Что можно делать из UI:
|
||||
|
||||
- выбрать endpoint: `engage.cloudflareclient.com`, IPv4 или свой hostname;
|
||||
- выбрать source IP сервера или оставить автоопределение;
|
||||
- включить single UDP port, обычно `4500 -> 4500`;
|
||||
- включить Cloudflare multiport mode;
|
||||
- удалить только managed relay rules.
|
||||
|
||||
Важно: relay не гарантирует конкретный Cloudflare exit IP или страну. Он меняет WARP/WireGuard endpoint, через который клиент подключается. Для "желаемой точки" сейчас используйте ручной endpoint/IP; автоматический список точек и latency probe запланированы.
|
||||
|
||||
## Безопасность
|
||||
|
||||
- **Только HTTP Basic Auth** — учётные данные передаются с каждым запросом. В продакшене ставьте **HTTPS** (обратный прокси: nginx, Caddy + TLS).
|
||||
@@ -112,8 +144,10 @@ install.sh / uninstall.sh # Установка и снятие «в одн
|
||||
|-------|------|----------|
|
||||
| GET | `/` | HTML-интерфейс |
|
||||
| GET | `/status`, `/registration`, `/proxy`, `/logs` | Статус и диагностика |
|
||||
| GET | `/relay` | Статус WARP Relay beta |
|
||||
| POST | `/connect`, `/disconnect`, `/restart` | Управление WARP |
|
||||
| POST | `/warp-install`, `/warp-uninstall` | Установка/удаление пакета |
|
||||
| POST | `/relay-apply`, `/relay-remove` | Применить/удалить WARP Relay rules |
|
||||
| POST | `/proxy-port`, `/license` | Порт SOCKS, ключ WARP+ |
|
||||
| POST | `/xui-preset`, `/amnezia-preset`, `/amnezia-routing` | Пресеты интеграций |
|
||||
|
||||
|
||||
3
app.py
3
app.py
@@ -1142,7 +1142,8 @@ function setMsg(id, text, ok=null) {
|
||||
n.className = 'msg ' + (ok === true ? 'ok' : ok === false ? 'bad' : 'muted');
|
||||
}
|
||||
async function api(path, opts={}) {
|
||||
const res = await fetch(path, { cache: 'no-store', ...opts });
|
||||
const url = new URL(path, window.location.origin);
|
||||
const res = await fetch(url, { cache: 'no-store', ...opts });
|
||||
const ct = res.headers.get('content-type') || '';
|
||||
const body = ct.includes('application/json') ? await res.json() : await res.text();
|
||||
if (!res.ok) throw new Error(typeof body === 'string' ? body : JSON.stringify(body));
|
||||
|
||||
BIN
docs/images/dashboard.png
Normal file
BIN
docs/images/dashboard.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 134 KiB |
BIN
docs/images/warp-relay-beta.png
Normal file
BIN
docs/images/warp-relay-beta.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 49 KiB |
35
uninstall.sh
35
uninstall.sh
@@ -7,6 +7,7 @@ ENV_FILE="/etc/default/warp-webui"
|
||||
SERVICE_NAME="warp-webui"
|
||||
UNIT="/etc/systemd/system/${SERVICE_NAME}.service"
|
||||
BRIDGE_UNIT="/etc/systemd/system/warp-socks-bridge.service"
|
||||
RELAY_TAG="${WARP_RELAY_RULE_TAG:-WR_WEBUI_RELAY}"
|
||||
|
||||
if [[ "${EUID:-0}" -ne 0 ]]; then
|
||||
echo "Запустите от root: sudo bash uninstall.sh"
|
||||
@@ -15,6 +16,40 @@ fi
|
||||
|
||||
echo "=== Удаление WARP Web UI ==="
|
||||
|
||||
clean_relay_nftables() {
|
||||
command -v nft >/dev/null 2>&1 || return 0
|
||||
nft -a list ruleset 2>/dev/null | awk -v tag="comment \""${RELAY_TAG}"\"" '
|
||||
/^table / { family=$2; table=$3 }
|
||||
/^[[:space:]]*chain / { chain=$2 }
|
||||
index($0, tag) && match($0, /# handle [0-9]+/) {
|
||||
handle=substr($0, RSTART + 9, RLENGTH - 9)
|
||||
print family, table, chain, handle
|
||||
}
|
||||
' | while read -r family table chain handle; do
|
||||
nft delete rule "${family}" "${table}" "${chain}" handle "${handle}" 2>/dev/null || true
|
||||
done
|
||||
nft delete set ip nat wr_webui_relay_ports 2>/dev/null || true
|
||||
nft delete set ip filter wr_webui_relay_ports 2>/dev/null || true
|
||||
nft list ruleset > /etc/nftables.conf 2>/dev/null || true
|
||||
}
|
||||
|
||||
clean_relay_iptables() {
|
||||
command -v iptables >/dev/null 2>&1 || return 0
|
||||
iptables -t nat -S 2>/dev/null | grep "${RELAY_TAG}" | sed 's/^-A/-D/' | while read -r rule; do
|
||||
eval iptables -t nat "$rule" 2>/dev/null || true
|
||||
done
|
||||
iptables -S 2>/dev/null | grep "${RELAY_TAG}" | sed 's/^-A/-D/' | while read -r rule; do
|
||||
eval iptables "$rule" 2>/dev/null || true
|
||||
done
|
||||
if command -v netfilter-persistent >/dev/null 2>&1; then
|
||||
netfilter-persistent save 2>/dev/null || true
|
||||
fi
|
||||
}
|
||||
|
||||
echo "Удаляем managed WARP Relay rules (${RELAY_TAG})..."
|
||||
clean_relay_nftables
|
||||
clean_relay_iptables
|
||||
|
||||
if systemctl is-active --quiet "${SERVICE_NAME}.service" 2>/dev/null; then
|
||||
systemctl stop "${SERVICE_NAME}.service"
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user