Skip to content
qanatpanelPublic

About

💧 قنات — modern multi-user VLESS/Trojan proxy panel for Cloudflare Workers · TypeScript + D1 + WebSocket · free forever | پنل پروکسی چندکاربره، رایگان و امن، با داشبورد فارسی و اسکنر IP تمیز

Topics

Resources

Contributing

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

قنات — Qanat

English Release v1.0.0 TypeScript Cloudflare Workers D1 tests VLESS/Trojan MIT PRs welcome

قنات — کانال زیرزمینی که آب را از دل کویر عبور می‌دهد؛
این پنل هم داده را از دل فیلترینگ، بی‌صدا و زیر رادار عبور می‌دهد.


✨ چرا قنات؟

🚀 هسته‌ی پروکسی واقعی رله‌ی WebSocket → TCP با پروتکل‌های استاندارد VLESS و Trojan — سازگار با v2rayNG، Hiddify، Streisand، sing-box، Clash و هر کلاینتی که VLESS بلد باشد
🌍 رایگان تا ابد روی Cloudflare Workers با طرح رایگان اجرا می‌شود؛ هزینه‌ی زیرساخت: صفر
🧮 چندکاربره با دیتابیس کاربران، کوتای مصرف (GB)، تاریخ انقضا و وضعیت فعال/غیرفعال — همه روی Cloudflare D1
🔐 امنیت درجه‌یک پسورد PBKDF2 (۱۰۰هزار تکرار)، سشن JWT در کوکی HttpOnly، محافظ بروت‌فورس، کلایم توکن برای نصب امن، چک CSRF
📱 داشبورد فارسی رابط کاربری راست‌چین، تاریک و بدون هیچ وابستگی خارجی — بدون CDN، بدون کتابخانه، بدون track شدن
📡 اسکنر IP تمیز تست پینگ واقعی از مرورگر شما روی رنج‌های رسمی Cloudflare + سه منبع به‌روزرسانی‌شده‌ی روزانه
🔗 صفحه‌ی اشتراک اختصاصی برای هر کاربر یک صفحه‌ی زیبا با QR کد، دکمه‌ی کپی و لینک‌های عمیق (deep-link) برای نصب یک‌کلیکی در اپ‌ها
🎛️ پیکربندی هوشمند کانفیگ‌ها با Fragment و SNI مطابق تنظیمات پروکسی شما ساخته می‌شوند؛ خروجی URI، Clash، sing-box و Xray

📸 یک نگاه

🖥️ داشبورد مدیریت
نمای کلی مدیریت کاربران
اسکنر IP تمیز اشتراک‌ها
📱 صفحه‌ی اشتراک کاربر (دسکتاپ و موبایل)
اشتراک دسکتاپ اشتراک موبایل
ورود

🚀 شروع سریع — دیپلوی در ۳ دقیقه

پیش‌نیاز: یک حساب Cloudflare (رایگان) و Node.js 18+.

# ۱. کلون و نصب
git clone https://github.com/qanatpanel/qanat.git
cd qanat && npm install

# ۲. ساخت دیتابیس D1 و دیپلوی
npx wrangler login
npx wrangler d1 create qanat-db
#    شناسه‌ی d1 تولیدشده را در wrangler.jsonc قرار بده:
#    "database_id": "شناسه‌ی-تولیدشده"

npm run deploy        # دیپلوی worker
npm run db:remote     # اعمال اسکیما روی D1 (اختیاری — خودکار هم می‌شود)

تمام! آدرس worker شما: https://<نام-worker>.workers.dev — اولین بازدید، صفحه‌ی نصب را نشان می‌دهد.

🔒 نکته‌ی امنیتی: برای جلوگیری از تصاحب پنل، می‌توانی هنگام اولین نصب یک کلایم توکن (Claim Token) تنظیم کنی: ?claim=توکن-شما — بدون آن، نصب فقط از همان IP باز اول ممکن است.

اجرای محلی

npm run dev    # بیلد + سرور محلی روی :8787

🧬 معماری

قنات (کلودفلر ورکر — تک‌فایل ۷۳۵KB)
│
├── 🛡️ لایه‌ی امنیتی
│   ├── PBKDF2 (100k)          ← هش پسورد
│   ├── JWT + HttpOnly Cookie  ← سشن
│   ├── login_attempts (D1)    ← قفل ۱۰ دقیقه بعد از ۵ تلاش ناموفق
│   └── Origin/CSRF Check      ← روی همه‌ی POST ها
│
├── 🗄️ لایه‌ی داده (Cloudflare D1)
│   ├── settings        ← تنظیمات پنل (مسیر مخفی، کلایم و…)
│   ├── users           ← کاربران + کوتا + انقضا + مصرف
│   └── login_attempts  ← محافظ بروت‌فورس
│
├── 🚀 هسته‌ی پروکسی
│   ├── VLESS parser    ← هدر استاندارد رسمی (version/uuid/port/…)
│   ├── Trojan parser   ← پسورد + هدر CRLF
│   └── WS → TCP relay  ← WebSocketPair + حلقه‌ی پس‌زمینه
│
├── 📡 ماژول‌های کاربری
│   ├── اسکنر IP تمیز (۳ منبع + پینگ مرورگر)
│   ├── صفحه‌ی اشتراک با QR (SVG سمت سرور)
│   └── تولید کانفیگ: URI / Clash / sing-box / Xray
│
└── 📁 ساختار پوشه‌ها
    ├── src/auth/        🔐 احراز هویت
    ├── src/settings/    🗄️ داده
    ├── src/proxy/       🚀 هسته‌ی پروکسی
    ├── src/handlers/    📡 مسیرها (install/login/panel/api/sub)
    ├── src/cores/       QR و تولید کانفیگ
    └── src/assets/      صفحات HTML + استایل

🗝️ API

مدیریت (همه با سشن — /{securePath}/panel/api/...)

GET    /api/users              لیست کاربران
POST   /api/users              ساخت کاربر جدید
POST   /api/users/:id/toggle   فعال/غیرفعال
DELETE /api/users/:id          حذف کاربر
GET    /api/settings           تنظیمات پنل
POST   /api/settings/password  تغییر رمز (با تأیید رمز فعلی)
POST   /api/settings/secure-path   بازسازی مسیر مخفی
GET    /api/clean-ips?src=…    لیست IP تمیز از ۳ منبع (ircf/cf2dns/bestcf/mix)

اشتراک کاربر

GET  /{securePath}/sub/{uuid}          صفحه‌ی زیبای اشتراک (QR + کپی + deep-link)
GET  /{securePath}/sub/{uuid}/txt      اشتراک متنی (سازگار با v2rayN و…)
GET  /{securePath}/sub/{uuid}?format=clash     کانفیگ Clash Meta
GET  /{securePath}/sub/{uuid}?format=singbox   کانفیگ sing-box
GET  /{securePath}/sub/{uuid}?format=xray      کانفیگ Xray

اتصال کلاینت‌ها

ws://your-worker.workers.dev/{proxyPath}/{uuid-or-trojan-password}

پروتکل کاملاً استاندارد — بدون هدر اضافه، بدون دستکاری. alpn=http/1.1، fp=chrome، SNI و Host کامل از تنظیمات شما.

⛓️ بالادست‌ها (Upstream) — زنجیره‌ی خروجی مثل edgetunnel

وقتی سایت مقصد اتصال مستقیم خروجی Cloudflare را می‌بندد (ERR_CONNECTION_CLOSED)، قنات مثل edgetunnel رفتار می‌کند: اول مستقیم وصل می‌شود و اگر تا failoverMs اولین بایت نرسید یا اتصال بسته شد، از «هاپ»های بالادست به‌ترتیب استفاده می‌شود:

کلاینت → پنل (IP تمیز) → هاپ (یک edgetunnel سالم) → سایت

در تنظیمات پروکسی پنل (بخش «بالادست‌ها») هر خط یک بالادست است — هر سه فرمت:

vless://UUID@HOST:443?security=tls&sni=SNI&type=ws&path=%2Fup
trojan://PASSWORD@HOST:443?security=tls&sni=SNI&type=ws&path=%2F
HOST:PORT        ← شفاف (Transparent): داده‌ی خام به آن فرستاده می‌شود

⚠️ اگر هاپ روی خودتان (همان اکانت Cloudflare) است — مثلاً edgetunnel خودتان — باید در هر دو Worker (پنل و هاپ) این compatibility flag فعال باشد، وگرنه Worker نمی‌تواند به Worker دیگر وصل شود (خطای 1042):

global_fetch_strictly_public

🧪 کیفیت

اسکریپت پوشش نتیجه
scripts/test-parser.sh ۱۴ تست واحد پارسر VLESS/Trojan ✅
scripts/test-config.sh ۲۴ تست تولید کانفیگ (URI/Clash/sing-box/IP تمیز) ✅
scripts/test-auth.sh ۱۸ سناریوی احراز هویت + بروت‌فورس ✅
scripts/test-panel.sh ۲۸ سناریوی داشبورد و API کاربران ✅
scripts/test-proxy.sh ۱۱ تست E2E پروکسی (VLESS/Trojan/مصرف/اشتراک) ✅

۹۵ تست خودکار — همه سبز. ✅

تأیید شده با تست E2E روی کلودفلر واقعی: IP تمیز → ورکر → یوتیوب → HTTP 200 (۲۸۵ms).


🗺️ نقشه‌ی راه

  • اسکلت TypeScript + بیلد تک‌فایل + Wrangler + D1
  • لایه‌ی داده: تنظیمات + کاربران + بروت‌فورس
  • احراز هویت: JWT + PBKDF2 + مسیر مخفی + کلایم توکن
  • داشبورد: نمای کلی + CRUD کاربران + تنظیمات
  • تنظیمات پیشرفته‌ی پروکسی (Fragment/SNI/…) + بکاپ/رستور
  • تولید اشتراک/کانفیگ: vless:// + Clash + sing-box + Xray
  • هسته‌ی پروکسی: WebSocket + VLESS/Trojan
  • اسکنر IP تمیز: ۳ منبع + پینگ مرورگر + کانفیگ با IP تمیز
  • ربات تلگرام + آپدیت خودکار
  • پشتیبانی IPv6
  • محدودیت سرعت per-user

🤝 مشارکت

ایده‌ها، باگ‌ها و PR ها با آغوش باز! قبل از PR:

  1. کد را با npm run check (تایپ‌چک) چک کن
  2. تست‌ها را اجرا کن: bash scripts/test-*.sh
  3. برای تغییرات UI، اسکرین‌شات هم اضافه کن

راهنمای مشارکت · گزارش باگ امنیتی


📜 لایسنس

MIT © 2026 qanatpanel

ساخته‌شده با 💧 برای عبور از هر کویری

About

💧 قنات — modern multi-user VLESS/Trojan proxy panel for Cloudflare Workers · TypeScript + D1 + WebSocket · free forever | پنل پروکسی چندکاربره، رایگان و امن، با داشبورد فارسی و اسکنر IP تمیز

Topics

Resources

Contributing

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages