arblant
panel-gateway / README.md
README.md63 lines · 3.8 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
# 🛡️ دروازه پنل (panel-gateway)

لایه‌ی کنترل برای پنل‌های VLESS — **بدون دست زدن به خود پنل**. جلوی پنل می‌شینه، ترافیک رو حساب می‌کنه، سهمیه و انقضا رو اعمال می‌کنه.

## هر ۶ فیچر کجاست

| فیچر | پیاده‌سازی |
|---|---|
| ۱. یوزر جدا با حجم و انقضا | گیت‌وی: هر نفر UUID جدا + لینک ساب جدا؛ سهمیه GB و انقضای روزانه؛ قطع خودکار وسط کانکشن |
| ۲. ربات تلگرام | `src/bot.js` — ورکر جدا: ساخت یوزر، لیست، مصرف، حذف، ریست، سلامت، بکاپ |
| ۳. پریست MCI / ایرانسل | تب «پریست ISP» در پنل ادمین — بر اساس دانش کانال: ایرانسل → `fp=unsafe` + راهنمای فرگمنت دستی؛ همراه اول → `fp=chrome` + راهنمای ECH |
| ۴. سلامت پروکسی IP داخل پنل | تب «پروکسی IP» — تست TCP 443 از لبه‌ی کلادفلر (۳ تلاش)؛ بارگذاری خودکار از proxyip-board |
| ۵. داشبورد مصرف | تب «داشبورد» — مصرف هر یوزر با نوار پیشرفت + جمع کل |
| ۶. بکاپ/ریستور تک‌کلیکی | تب «بکاپ» — دانلود/بازگردانی JSON همه‌ی یوزرها |

## معماری

```
کلاینت (v2rayNG) ──wss──▶ گیت‌وی ──wss──▶ پنل اصلی (دست‌نخورده)
                        │
                        ▼
              Durable Object (SQLite)
              یوزرها + شمارنده‌ی بایت
```

- هدر VLESS پارس می‌شه، UUID کاربر استخراج می‌شه، با DO چک می‌شه
- هدر با UUID واقعی پنل بازنویسی و به بک‌اند فوروارد می‌شه
- بایت‌ها هر ۵ ثانیه فلاش می‌شن؛ با رد شدن سهمیه کانکشن با کد 4403 بسته می‌شه

## نصب گیت‌وی

```bash
cd panel-gateway
wrangler deploy   # با wrangler.toml
wrangler secret put BACKEND_WS_URL   # wss://<panel-host>/<ws-path>
wrangler secret put BACKEND_UUID     # UUID خود پنل
wrangler secret put ADMIN_SECRET     # کلید ادمین
```

بعد برو به `https://<gateway>/admin/` — کلید ادمین رو بده، یوزر بساز، لینک رو بده به هر نفر.

## نصب ربات تلگرام

1. به `@BotFather` بگو `/newbot` — توکن بگیر
2. `wrangler deploy -c wrangler.bot.toml`
3. سکرت‌ها: `TELEGRAM_BOT_TOKEN` `WEBHOOK_SECRET` `ADMIN_CHAT_ID` `GATEWAY_URL` `GATEWAY_ADMIN_SECRET`
4. وبهوک: `curl https://api.telegram.org/bot<token>/setWebhook -d url=https://<bot>/webhook/<secret>`
5. به ربات `/start` بده — شناسه‌ی چتت رو می‌ده — بذار توی `ADMIN_CHAT_ID`

## تست‌ها (همه سبز ✅)

```
node --test test/vless.test.js test/accounting.test.js test/bot.test.js  # 26/26
node test/e2e.mjs   # 10/10 — کلاینت VLESS واقعی → گیت‌وی واقعی → سرور echo واقعی
```

تست e2e با شبیه‌ساز کامل WebSocket انجام شده: بایت‌شماری دقیق up/down، قطع سهمیه وسط کانکشن (4403)، رد UUID ناشناس (4403)، هدر خراب (4400).

## محدودیت‌های صادقانه

- فعلاً فقط **VLESS روی WebSocket** (پروتکل اصلی). Trojan/XHTTP/Shadowsocks فاز بعد.
- تست TCP پروکسی IP فقط روی ران‌تایم واقعی کلادفلر کار می‌کنه (تو Node با fallback تمیز رد می‌شه).
- شمارنده‌ها هر ۵ ثانیه فلاش می‌شن — مصرف لحظه‌ایِ چند ثانیه‌ی آخر ممکنه عقب باشه.