RosPanel¶
لوحة تحكم VPN مستضافة ذاتيًا مبنية على Xray-core — من خادم شخصي واحد إلى شبكة من العقد.
English · Русский · 简体中文 · العربية · فارسی · التوثيق
ما هو RosPanel · من أين تحصل على خادم · البدء السريع · الميزات · CLI · البنية · إخلاء المسؤولية · التطوير · ادعم المشروع
ما هو RosPanel¶
RosPanel لوحة تحكم VPN مستضافة ذاتيًا مبنية على Xray-core. عملية واحدة تخدم عدة بروتوكولات في آن واحد، واللوحة تمنحك واجهة ويب لإدارة المستخدمين والاشتراكات والباقات والمدفوعات والتوجيه والإحصاءات والنسخ الاحتياطية والهوية البصرية — دون تحرير ملفات الإعداد يدويًا. وحين لا يعود خادم واحد كافيًا، تتحول اللوحة نفسها إلى شبكة خوادم: أضف عقدًا، وسيُخدَم كل مستخدم عبرها جميعًا.
مكتفية بذاتها: ملف تنفيذي ثابت واحد — لا nginx ولا certbot ولا سكربتات من طرف ثالث. تُصدر اللوحة شهادة TLS بنفسها عبر ACME، والنطاق اختياري: تُصدَر الشهادة لعنوان IP مجرد أيضًا. تصبح اللوحة متاحة على عنوانها مباشرة بعد التثبيت — بلا DNS ولا وكيل عكسي ولا أنفاق SSH. يُولَّد إعداد Xray من حالة اللوحة (لن تلمس JSON بيدك أبدًا)، ويُضاف المستخدمون ويُحذفون فورًا دون قطع اتصالات أي أحد آخر، وإذا تلفت قاعدة البيانات تستعيد اللوحة نفسها من آخر نسخة احتياطية.
Note
هذه طبقة تحكم وليست عميل VPN. فهي تضبط خادمك أنت وتشغّله. المشروع مخصص للاستخدام التعليمي والبحثي (راجع إخلاء المسؤولية).
🖥️ من أين تحصل على خادم¶
يكفي أرخص VPS: معالج vCPU واحد، وذاكرة RAM بسعة 1 GB، وأي توزيعة Linux — وهذا يكفي اللوحة وXray معًا لعشرات المستخدمين.
إن لم تختر مزوّد استضافة بعد، فسجّل عبر الروابط أدناه. إنها طريقة مجانية لدعم المشروع: السعر لا يتغير بالنسبة إليك، وجزء من الإيجار يذهب إلى تطوير اللوحة.
VDSina · Aeza · NetGrid · Serv.host · u1Host · Waicore
شكرًا لكل من يسجّل عبرها 🙏
🚀 البدء السريع¶
الخيار 1 — سكربت التثبيت (موصى به)¶
أمر واحد: ينزّل الإصدار، ويثبّت خدمة systemd وnftables (إن لم تكن موجودة)، ثم يشغّلها ويطبع
بيانات الدخول.
curl -Ls https://raw.githubusercontent.com/AppsGanin/rospanel/main/install.sh | sudo bash
النطاق اختياري. سيسألك السكربت عنه: إن كان لديك نطاق فأدخله، وإلا فاضغط Enter فقط وستعمل اللوحة على عنوان IP الخاص بالخادم. وفي الحالتين تحصل على شهادة Let's Encrypt — إذ تُصدَر الشهادات لعناوين IP أيضًا، فلا تحذيرات في المتصفح.
يمكنك تحديد النطاق مسبقًا وتخطي السؤال:
curl -Ls … | sudo ROSPANEL_HOST=vpn.example.com bash.
الخيار 2 — الملف التنفيذي وsystemd يدويًا¶
# نزّل أحدث إصدار (استبدل amd64 بـ arm64 لخوادم ARM)
curl -fsSL -o rospanel \
https://github.com/AppsGanin/rospanel/releases/latest/download/rospanel-linux-amd64
chmod +x rospanel
# التثبيت كخدمة (ينسخ الملف التنفيذي إلى /usr/local/bin، ويكتب وحدة systemd، ويشغّلها)
sudo ./rospanel install
# مع نطاق مباشرة: sudo ROSPANEL_HOST=vpn.example.com ./rospanel install
# بيانات الدخول والمسار السري تُطبع مرة واحدة فقط:
journalctl -u rospanel | grep -A6 FIRST-RUN
الخيار 3 — Docker¶
docker run -d --name rospanel \
--network host \
--cap-add NET_ADMIN \
--device /dev/net/tun \
-v rospanel-data:/data \
ghcr.io/appsganin/rospanel:latest
docker logs rospanel | grep -A6 FIRST-RUN
Note
الخيار --network host ضروري لكي يستمع Xray مباشرة على 443/TCP و80/TCP ومنافذ UDP الخاصة
بـ Hysteria2؛ وNET_ADMIN يتيح للوحة إدارة قواعد الجدار الناري: تنقّل المنافذ (port hopping)
وحدود الاتصالات وحظر هجمات التخمين (nftables). أما --device /dev/net/tun فهو ما يحتاجه مسار
AmneziaWG لإنشاء نفقه — فالحاوية لا تحصل على جهاز TUN من دونه، والصلاحية وحدها لا تكفي. لا
تحذف هذا الخيار إلا إذا لم تكن ستفعّل ذلك المسار أبدًا.
🔑 بيانات الدخول الافتراضية¶
| الحقل | القيمة |
|---|---|
| اسم المستخدم | admin |
| كلمة المرور | admin |
| مسار اللوحة | /rospanel/ |
بعد التثبيت مباشرة تكون اللوحة متاحة على https://<domain-or-IP>/rospanel/. والرابط الدقيق
موجود أيضًا في السجل (journalctl -u rospanel | grep -A6 FIRST-RUN أو
docker logs rospanel | grep -A6 FIRST-RUN).
عند أول دخول يُلزمك معالج الإعداد بتغيير كلمة المرور ويعرض عليك استبدال مسار اللوحة
بمسار سري عشوائي — فالقيم الافتراضية admin/admin و/rospanel/ لا تعمل إلا حتى هذه الخطوة.
Important
بعد التغيير تصبح اللوحة متاحة عبر المسار السري فقط — ويعرض الجذر صفحة تمويه. ومن دون
معرفة /<secret>/ لا يوجد نموذج دخول يمكن العثور عليه.
🌐 إضافة عقدة¶
العقدة خادم Ubuntu نظيف يشغّل الملف التنفيذي نفسه في وضع العقدة: اللوحة تولّد إعداده، ولا شيء يحتاج إلى ضبط منفصل. كل شيء يبدأ من الواجهة: الخوادم ← إضافة عقدة، حيث تُدخل اسمًا ونطاق العقدة أو عنوان IP الخاص بها. ومن هناك أمامك خياران.
الخيار 1 — أمر التثبيت. تعرض اللوحة أمرًا جاهزًا من سطر واحد؛ شغّله على خادم العقدة بصلاحيات root:
curl -Ls https://raw.githubusercontent.com/AppsGanin/rospanel/main/install.sh \
| sudo bash -s -- --join 'https://<panel>/<node-api-path>/v1/join#<token>'
انسخ الأمر كاملًا من نافذة الحوار — فالعنوان والرمز المميز (token) يُملآن تلقائيًا. يُعرض الرمز
مرة واحدة ويبقى صالحًا 24 ساعة؛ و<node-api-path> مقطع مستقل يصعب تخمينه مخصص لمزامنة
العقد (ليس مسار اللوحة ولا مسار REST API: تغيير أي منهما لن يفصل عقدك). إذا كانت اللوحة تعمل على
عنوان IP مجرد (شهادة ليست من جهة إصدار عامة)، تضيف اللوحة --insecure إلى الأمر بنفسها.
الخيار 1b — Docker. الصورة نفسها التي تستخدمها اللوحة، مشغّلة في وضع العقدة. يكتب
node install وحدة systemd لا مكان لها داخل الحاوية، لذلك يُمرَّر الانضمام عبر متغيرات البيئة
بدلًا من ذلك: يُستخدم فقط ما دام المجلد (volume) لا يحتوي على node.json بعد، فيمكن إعادة إنشاء
الحاوية متى شئت، ولن يغيّر رمزٌ مستهلَك في ملف compose شيئًا.
services:
node:
image: ghcr.io/appsganin/rospanel:latest
command: node run
network_mode: host # يربط Xray المنافذ 443/TCP و80/TCP ومنافذ UDP الخاصة بـ Hysteria2
cap_add: [NET_ADMIN] # nftables: حدود لكل IP، تنقّل المنافذ
devices: [/dev/net/tun] # نفق AmneziaWG؛ احذفه إن بقي هذا المسار معطّلًا
environment:
ROSPANEL_JOIN: 'https://<panel>/<node-api-path>/v1/join#<token>'
# ROSPANEL_JOIN_INSECURE: "1" # فقط إن كانت اللوحة لا تزال على شهادة موقّعة ذاتيًا
volumes: [rospanel-node:/data]
restart: unless-stopped
volumes:
rospanel-node:
زر تحديث العقدة في اللوحة يستبدل الملف التنفيذي داخل الحاوية ثم يخرج، فتعيد إعادةُ التشغيل
إصدارَ الصورة — لذا حدّث عقدة Docker عبر docker pull وحاوية جديدة. يحتفظ المجلد بهوية العقدة،
فلا تنضم من جديد.
الخيار 2 — التثبيت عبر SSH. تبويب «التثبيت عبر SSH» في نافذة الحوار نفسها: تسجّل اللوحة الدخول إلى الخادم بنفسها (العنوان، المنفذ، المستخدم + كلمة المرور أو مفتاح خاص بصيغة PEM)، وترفع ملفها التنفيذي الخاص وتثبّت الوكيل — مع سجل تثبيت مباشر. إصدار العقدة مطابق لإصدار اللوحة بشكل مضمون. بيانات اعتماد SSH لا تُخزَّن أبدًا.
بعد ثوانٍ من التثبيت تظهر العقدة في القائمة بحالة متصل: فهي تتصل باللوحة عبر HTTPS صادر، لذا لا تحتاج اللوحة إلى أي وصول وارد إليها ولا شيء يحتاج إلى إعادة توجيه.
systemctl status rospanel-node # خدمة العقدة
journalctl -u rospanel-node -f # سجل الوكيل
rospanel node status # الحالة المحلية
Note
الخادم الواحد إما لوحة أو عقدة: فكلاهما يستخدم المنفذ 443. إذا كانت خدمة اللوحة موجودة
على الجهاز بالفعل، فسيعطّلها node install.
✨ الميزات¶
🔐 البروتوكولات والتمويه وTLS¶
إعداد واحد ومجموعة بيانات اعتماد واحدة: VLESS-Vision (TCP/443 + uTLS)، وVLESS-XHTTP-REALITY
(يتنكّر في TLS لموقع آخر)، وHysteria2 (UDP + تنقّل المنافذ). وفوق ذلك — اتصالات مخصصة
(inbound) على كل خادم: VLESS / Trojan / Hysteria2 عبر أي نقل (TCP، WebSocket، XHTTP، gRPC،
HTTPUpgrade) وShadowsocks-2022 (TCP خام) بمنفذها الخاص ومفاتيح REALITY ونطاق التنقّل وضبط دقيق للنقل (extra في XHTTP،
تمويه HTTP، sockopt، حقول TLS إضافية) — كحقول منفصلة أو JSON خام؛ ويُتحقق من الإعداد على الجهاز
المستهدف نفسه (xray -test + ربط المنفذ) قبل الحفظ، وتُستبعد بصمت من اشتراكات Clash/sing-box
التركيبات التي لا يستطيع العميل التعامل معها. زر «إعادة إلى إعدادات المصنع» في محرر الاتصالات
يعيد البروتوكولات والمنافذ والبصمات وإعدادات مكافحة DPI إلى ما يكون عليه التثبيت الجديد، ويحذف
الاتصالات المخصصة للخادم (تبقى مفاتيح REALITY/AmneziaWG ونطاق تمويه REALITY ومنفذه؛ ويأخذ الخادم
الرئيسي لقطة من إعداده أولًا). تختبئ اللوحة خلف مسار سري؛ وأي مسار آخر يعرض موقع تمويه
(12 قالبًا). كشف الاستطلاع يلاحظ عنوان IP يمسح بحثًا عن اللوحة المخفية — أي يطلب مسارات
كثيرة مختلفة لا يملكها موقع التمويه — ويسجّله ليراجعه المسؤول؛ والرد لا يتغير أبدًا، فيبقى الماسح
يرى موقع التمويه فقط ويصمد التنكّر. ويمكن اختياريًا أيضًا إسقاط عنوان IP في الجدار الناري
(nftables) و/أو إرسال ملخص يومي بالماسحات الجديدة — وكلاهما معطّل افتراضيًا، فالتسجيل وحده هو
الخط الأساسي الآمن. TLS جاهز مباشرة — ACME (Let's Encrypt / ZeroSSL) مع تجديد تلقائي؛ ويمكن
إصدار الشهادة أيضًا لعنوان IP مجرد، بلا نطاق وبلا DNS.
ما يراه الماسح. يجيب موقع التمويه عبر HTTP/3 أيضًا: يقدّم Hysteria2 الموقع نفسه على UDP كما
على TCP، لكنه لا يعلن ذلك عبر Alt-Svc — فالمتصفح الذي يعرف بالـHTTP/3 سيوجّه إليه أيضًا طلبات اللوحة و/sub/، ولا يجيب هناك سوى موقع التمويه. يختار التثبيت الجديد نطاق تمويه REALITY ويضع المنفذ على 443 — المنفذ الأقل عرضة للحجب.
وهناك تحمل الخدمة الأمامية المستمعين معًا: اتصال يحمل أحد نطاقات تمويه REALITY في ClientHello
يذهب إلى REALITY، وما عداه (اسم الخادم نفسه أو عنوان بلا اسم) إلى الطُعم، فيتخفّى REALITY
بنطاق تمويه لا باسم الخادم. والمنفذ المستقل يستخدم نطاق الخادم نفسه اسمًا لـ SNI، فيحصل
المستكشف على الشهادة الحقيقية للخادم. ويحذّر التشخيص مما يكشف الخادم: شهادة موقّعة ذاتيًا، ونطاق يحتوي كلمات مثل vpn
أو proxy — فالاسم ينتهي في سجلات شفافية الشهادات (certificate transparency) العامة.
تشويش Hysteria2 (Salamander). Hysteria2 مبني على QUIC، ومصافحة QUIC هي الشيء الوحيد الذي يستطيع جهاز DPI التعرّف عليه في هذا المسار قبل أن تتدفق أي بيانات. فعّله فيُطبَّق XOR على كل حزمة بيانات بمفتاح مشترك مسبقًا، فلا يبدو أي شيء على السلك كمصافحة. المفتاح تولّده اللوحة ولا يُكتب يدويًا — مثل مواد REALITY — ويدخل في كل رابط وملف تعريف تقدّمه اللوحة، فيلتقطه العملاء عند التحديث التالي للاشتراك. متاح على المسار المدمج وعلى أي اتصال Hysteria2 مخصص، ولكل منها مفتاحه.
AmneziaWG 3.1 هو المسار المدمج الرابع: WireGuard تختبئ مصافحته خلف حزم عشوائية ورؤوس تبدو
عشوائية، لتطبيقَي AmneziaVPN وAmneziaWG. يضيف الإصدار 3.1 حماية الرؤوس — فأجزاء رأس الحزمة التي
بقيت مكشوفة كانت بصمة ثابتة يستطيع جهاز DPI مطابقتها دون أن يرى أي مصافحة — إضافة إلى الحشو في
أنواع الرسائل الأربعة كلها، ورؤوس تُختار من نطاق بدلًا من قيم ثابتة، ومؤقتات موزّعة بدلًا من ثابتة،
فلا يكون للجلسة دوريّة يمكن التقاطها. وقبل كل مصافحة يرسل العميل أيضًا سلسلة قصيرة من حزم
التمويه (I1/I2) على هيئة بروتوكول UDP عادي — QUIC Initial أو استعلام DNS أو طلب STUN binding،
ويُختار ملف تعريف واحد لكل خادم — فتكون أول حزمة في تدفق جديد شيئًا يعرفه جهاز DPI لا كتلة
مجهولة. تولّدها اللوحة؛ فلا شيء تلصقه، والأجزاء التي يتركها البروتوكول حرة (معرّفات الاتصال، أسماء
الاستعلامات، معرّفات المعاملات) يُعاد اختيارها في كل حزمة بدلًا من التقاطها مرة واحدة. يتطلب
Amnezia VPN 5.0.1.5 أو أحدث؛ والخادم الذي وُلّدت معاملاته قبل 3.1 يستمر في العمل بها دون تغيير حتى
تعيد توليدها، وإعادة التوليد تُبطل الإعدادات التي سُلّمت مسبقًا لذلك الخادم، كما كانت دائمًا. يعمل
محرك البروتوكول (amneziawg-go) داخل عملية اللوحة — بلا خدمة خلفية ولا ملف تنفيذي إضافي — بنفق
واحد لكل خادم (الخادم الرئيسي وكل عقدة)، لكل منها زوج مفاتيحه ومعاملات التشويش التي تولّدها اللوحة؛
والمستخدم نظير (peer) على كل خادم مسموح له به، بزوج مفاتيح واحد وعنوان نفق واحد في كل مكان. فعّله
من الاتصالات كأي مسار آخر (يُختار منفذ UDP مرتفعًا وعشوائيًا بدلًا من 51820 الذي يُكشف دون
حاجة إلى مصافحة)؛ يحصل المستخدمون على الإعداد كملف أو رمز QR في صفحة الاشتراك وفي بطاقتهم، وتعامله
مجموعات الوصول وحد الأجهزة واحتساب البيانات وحالة الاتصال تمامًا كمسارات Xray. يحتاج إلى
/dev/net/tun وCAP_NET_ADMIN، وهما متوفران للخدمة المثبّتة؛ أما في Docker فمرّرهما بنفسك
(--device /dev/net/tun --cap-add NET_ADMIN)، إذ لا تحصل الحاوية على جهاز TUN افتراضيًا. ويلزم
nftables لـ NAT الخاص بالنفق.
NaiveProxy مسار مدمج على منفذ VLESS-TCP-TLS: عميل بحزمة شبكة Chrome، يخدمه موقع التمويه خلف
:443 بالشهادة نفسها. التوجيه واحتساب البيانات والحدود والقطع تعمل كما في المسارات الأخرى. اسم الدخول
u<id>، وكلمة المرور UUID الخاص بالمستخدم. في الاشتراك يُقدَّم للعملاء الذين يستوردونه —
Shadowrocket (بصيغة http2://)، وv2rayN، وKaring، وThrone، وExclave — حين تكون الشهادة موثوقة
(نطاق أو شهادة Let's Encrypt لعنوان IP).
mieru مسار مدمج على منفذ TCP خاص به يُختار تلقائيًا. اسم الدخول u<id>، وكلمة المرور UUID الخاص
بالمستخدم؛ والتوجيه واحتساب البيانات والحدود والقطع تعمل كما في المسارات الأخرى. في الاشتراك يُقدَّم
للعملاء الذين يستوردونه — ملف تعريف Clash للعملاء الذين يثبت إصدارهم أن نواتهم تدعمه (mihomo نفسه،
FlClash، FlClashX، Koala Clash، Clash Verge Rev، Mihomo Party، Sparkle، ClashMetaForAndroid،
ClashMi)، ورابط mierus:// لـ Shadowrocket وThrone وExclave وKaring.
AnyTLS مسار مدمج على منفذ VLESS-TCP-TLS، خلف الشهادة نفسها وموقع التمويه نفسه؛ وكلمة المرور UUID الخاص بالمستخدم. يُقدَّم لعملاء sing-box، وملف تعريف Clash (أنوية mihomo التي تدعمه)، وv2rayN، وShadowrocket، وThrone، وExclave، وKaring، وNekoBox، حين تكون الشهادة موثوقة.
MTProto (وكيل Telegram) مسار مدمج على منفذ TCP خاص به يُختار تلقائيًا، ومفعّل افتراضيًا: يتصل
Telegram نفسه عبر الخادم دون تطبيق VPN. fake TLS مع سرّ لكل مستخدم مشتق من UUID الخاص به — يفقده
المستخدم المعطَّل، وتغيّره إعادة تعيين UUID. يحمل السرّ نطاق الخادم (SNI أو المضيف)، أو، إن لم يكن
له نطاق، اسمًا يشير إلى عنوانه (<ip>.sslip.io) — لا اسم موقع آخر، فـ DPI يُسقط مثل هذا الـ SNI؛
ويُحفظ الاسم عند أول تشغيل ولا يتغير إلا من «الاتصالات»، لأن كل وكيل أضافه المستخدمون يحمله. كل ما
ليس عميلًا للوكيل يُحوَّل إلى ذلك الموقع. تخرج الحركة عبر Xray، فيعمل التوجيه والاحتساب والحدود
والقطع كما في المسارات الأخرى. في صفحة الاشتراك الوكيل لكل خادم: رمز QR و«إضافة إلى Telegram» ورابط
t.me.
TURN-VK (WireGuard عبر المكالمات) (تجريبي: قد يتغير أو يُزال في إصدار لاحق) بروتوكول اتصال
مخصص لشبكات الهاتف المحمول التي لا تمرّر إلا قائمة بيضاء. بالنسبة إلى الشبكة يبدو الأمر مكالمة.
يتحدث المرحّل (relay) بصيغة التمويه الخاصة بـ
Free Turn Proxy — كل حزمة بيانات مغلّفة كصوت
RTP/Opus لمكالمة WebRTC (rtpopus3، بمفتاح تولّده اللوحة) — لأن VK تخنق حركة TURN التي لا تبدو
كوسائط مكالمة؛ ويبقى vk-turn-proxy DTLS العادي مخدومًا على المنفذ نفسه. تشغّل اللوحة المرحّل بنفسها
(داخل العملية، على الخادم الرئيسي وعلى العقد) وتسلّم الحزم إلى اتصال WireGuard الوارد الخاص بـ Xray
على واجهة loopback، فيكون المسار اتصال Xray واردًا كأي اتصال آخر: إضافة المستخدمين وحذفهم مباشرة دون
المساس بجلسة أي أحد آخر، ومجموعات الوصول، والتوجيه (WARP، مسارات الوكيل، الحظر)، والبيانات لكل
مستخدم، وحالة الاتصال. المستخدمون نظراء بالمفتاح نفسه وعنوان النفق نفسه اللذين لديهم في AmneziaWG —
لا شيء جديد يُصدَر. أنشئه من الاتصالات ← الاتصالات المخصصة (البروتوكول TURN-VK، منفذ UDP
56000 افتراضيًا، ورابط مكالمة VK اختياري للتوزيع)؛ وفي صفحة الاشتراك يحصل المستخدمون على روابط
استيراد بنقرة واحدة تضيف الخادم كاملًا إلى تطبيق يتضمن WireGuard — vkturnproxy:// لـ
VK Turn Proxy على iOS (TestFlight)، وfreeturn://
لـ Free Turn Proxy على Android (وعميله لسطر
الأوامر على الحواسيب)، وwingsv:// لـ WINGS V على Android
وWINGS V DeX على Windows وLinux، الذي لا يدعم التمويه
فيتصل دونه — وتحت الإعداد اليدوي: عنوان المرحّل ورابط المكالمة وإعداد WireGuard عادي موجّه إلى
عميل TURN.
👤 المستخدمون¶
حدود للبيانات والوقت مع تعطيل تلقائي وإعادة تعيين تلقائية لحد البيانات (يومي/أسبوعي/شهري/سنوي).
المستخدم المعطّل، أو الذي نفدت بياناته، يفقد أيضًا الاتصالات المفتوحة لديه بالفعل؛ وتُفحص الحدود كل
10 ثوانٍ، على الخادم الرئيسي وعلى العقد. وبدلًا من تاريخ انتهاء، يمكن تحديد مدة تبدأ مع أول
اتصال: عدد N من الأيام لا يُحتسب ما دام المفتاح غير مستخدم، ويبدأ مع أول اتصال به (التمديد يضيف
أيامًا إلى هذه المدة، والباقة تستبدلها بمدتها الخاصة)، وحد للأجهزة (راجع ربط الأجهزة أدناه
لمعرفة ما يُحتسب بالضبط) وحد سرعة لكل مستخدم. احتساب البيانات عبر Xray Stats، وحالة الاتصال،
وقائمة الاتصالات؛ ويمكن حذف المستخدمين المنتهية صلاحيتهم تلقائيًا. يحمل كل مستخدم ملاحظة
المسؤول (من أين جاء، وما الذي اتُّفق عليه — في اللوحة وAPI فقط، ولا تُعرض للعميل أبدًا) ووسومًا
(vip، reseller-a) تُصفّى القائمة بها ويشملها البحث، إلى جانب معرّف عميل Xray (u12) المعروض
بجوار الاسم، فيرتبط سطر السجل بالحساب بنظرة واحدة. الاستيراد والتصدير: تقرأ صفحة المستخدمين
قاعدة بيانات Marzban أو تفريغ GET /api/users، وقاعدة Marzneshin، وقاعدة Rebecca، وتفريغ Remnawave، وملف x-ui.db من 3x-ui، والتصدير
الخاص بهذه اللوحة — وتكتب هذا التصدير بزر واحد. يصل المستخدمون بمعرّفات UUID وكلمات المرور
نفسها (في Marzneshin يُولَّد UUID جديد ويبقى المفتاح رمزًا للاشتراك، فيحدّث العميل إعداده تلقائيًا)، والحدود، وانتهاء الصلاحية (بما في ذلك المدة التي تبدأ مع أول اتصال — on_hold في Marzban،
و«البدء بعد أول استخدام» في 3x-ui)، والبيانات المستهلكة، والملاحظات والوسوم، فلا يحتاج أحد إلى
إعادة إضافة خادم في تطبيقه؛ ويُنقل رمز الاشتراك أيضًا حيث يتوفر في المصدر (subId في 3x-ui،
وتفريغ Marzban، ودائمًا من التصدير الخاص بهذه اللوحة)، فنقل نطاق إلى تثبيت جديد يُبقي كل روابط
الاشتراك الحالية عاملة. يُتخطّى المستخدم الموجود هنا مسبقًا (بنفس UUID)، فتشغيل الملف مرتين لا يكرر
أحدًا، والرمز الذي يملكه مستخدم آخر يُستبدل بدلًا من رفضه، ويُحذف الملف المرفوع فور قراءته. يبقى
البحث والتصفية سريعين مع مئات المستخدمين، والعمليات الجماعية (تفعيل/تعطيل/إعادة تعيين/تمديد/حذف)
تمر عبر إعادة تحميل واحدة لـ Xray. تعرض لوحة المعلومات CPU / RAM / swap / القرص وبيانات VPN في
الوقت الفعلي. خريطة الاتصالات تفصّل من أين يتصل العملاء — عناوين IP المصدر المختلفة حسب
الدولة (من قاعدة بيانات geoip نفسها التي يوجّه بها Xray) وحسب مشغّل الشبكة / ASN (من جدول
iptoasn مجاني تجلبه اللوحة بنفسها)؛ بلا أي خدمة خارجية.
حد الأجهزة — ما الذي يحتسبه. حد أجهزة المستخدم (أو الحد الذي تفرضه باقته) رقم واحد يُطبَّق
بطريقتين. وحده يحدّ عناوين IP المصدر الفريدة المتزامنة: المستخدم الذي يتصل من عناوين مختلفة
أكثر من الحد خلال نافذة الاتصال يُفصل عن الأنفاق حتى يعود دونه — ويُحتسب ذلك عبر كل الخوادم
(الرئيسي والعقد)، لا لكل خادم على حدة. القيمة 0 تعني عدم تحديد عناوين IP.
القطع ليس فوريًا. يجب أن يبقى الحد متجاوَزًا لمدة دقيقتين ونصف، أي أطول قليلًا من نافذة الاتصال؛
وتفحص اللوحة حدود الأجهزة كل 30 ثانية، فيقع القطع بعد دقيقتين ونصف إلى ثلاث دقائق ونصف من ظهور
الجهاز الإضافي. والسبب أن أكثر طريقتين شيوعًا لتجاوزه ليستا مشاركةً على الإطلاق: هاتف يغيّر شبكته
يترك عنوانه القديم بينما يحتفظ ذلك العنوان برصد حديث حتى تُسقطه النافذة، ومشغّل اتصالات محمولة يدوّر
العنوان العام داخل مجموعته الخاصة دون أي تدخل من المستخدم (أحد الحسابات الفعلية يُظهر سبعة عناوين
ضمن 176.15.0.0/16 واحد خلال شهر). والطريقة الوحيدة لتمييز أي منهما عن جهاز ثانٍ هي مراقبة ما إذا
كان العنوان القديم لا يزال مستخدمًا — وهذا يعني عدم قطع المستخدم، لأن القطع هو ما يوقف البيانات التي
يُحكم عليها. لذا ينتظر الحد، والعنوان المتروك يغادر النافذة من تلقاء نفسه. أما العناوين المستخدمة
فعلًا في الوقت نفسه فتبقى كلها حاضرة حين ينتهي الانتظار، ويقع القطع كما في السابق.
الإعدادات ← الاشتراكات ← احتساب الأجهزة حسب ← HWID فقط يُلغي احتساب العناوين كليًا — مقابل فقدان الشيء الوحيد الذي يحدّ عدد الأماكن التي يُستخدم فيها رابط واحد في آن واحد، لأن HWID يحدّ من يستطيع جلب الاشتراك، لا من يستطيع الاتصال. الإعداد الافتراضي يحتسب الاثنين معًا.
ربط الأجهزة (HWID). فعّله، فيحدّ الرقم نفسه أيضًا عدد التثبيتات المختلفة. العملاء الذين
يتبعون اصطلاح ترويسات الاشتراك (Happ، v2RayTun) يرسلون معرّف تثبيت ثابتًا؛ تربطه اللوحة بالحساب عند
أول جلب وتحتسبه ضمن الحد. وحين يمتلئ الحد يُرفض الاشتراك لأي تثبيت جديد بينما تستمر التثبيتات
المربوطة في التحديث — فالفحص والإدراج معاملة واحدة، فلا يستطيع عميلان أن يأخذا آخر خانة معًا.
(حين يكون حد المستخدم نفسه 0، يستخدم HWID حدًا احتياطيًا على مستوى اللوحة.) تُعرض الأجهزة في
بطاقة المستخدم، وفي بوت العملاء (كسطرين منفصلين حسب IP وحسب HWID حين ينطبق الاثنان)،
وفي صفحة الاشتراك، حيث يستطيع المالك تحرير أحدها بنفسه بدلًا من مراسلة الدعم؛ والجهاز الخامل
يحرّر خانته بعد مدة TTL قابلة للضبط، وتدوير رابط الاشتراك يحررها كلها. معطّل افتراضيًا
(الإعدادات ← الاشتراكات)؛ وبمجرد تفعيله، فإن العميل الذي لا يرسل معرّفًا لا يحصل على اشتراك
إطلاقًا — فالحد الذي يمكن التهرب منه بالانتقال إلى تطبيق أكثر صمتًا ليس حدًا — مع مفتاح لخدمة هؤلاء
العملاء رغم ذلك (مع احتسابهم حسب العنوان كما في السابق) إن كان بعض مستخدميك عليهم.
حد السرعة. حد لكل مستخدم بوحدة kbit/s، يُضبط يدويًا أو عبر الباقة. لا يملك Xray حدًا لعرض النطاق لكل مستخدم، لذا يُطبَّق تحته — عبر مُجدوِل النواة نفسه (HTB)، بحسب العناوين التي يتصل منها ذلك المستخدم حاليًا، في الاتجاهين. هذا يعني أنه يغطي كل البروتوكولات دفعة واحدة، وأن كل من يقف خلف عنوان NAT واحد يتشاركون حدًا واحدًا، وأن بلوغ الحد في Hysteria2 (الذي يتجاهل التحكم في الازدحام لديه فقدان الحزم عمدًا) يبدو كفقدان للحزم لا كتباطؤ سلس. تشكّل العقد بياناتها بنفسها بحسب رؤيتها الخاصة لمن هو متصل.
مجموعات الوصول تحدد الاتصالات التي يحصل عليها المستخدم: تُحدَّد المسارات المدمجة والاتصالات المخصصة لكل خادم، والمستخدم بلا مجموعة يحصل على كل شيء، والمستخدم في عدة مجموعات يحصل على اتحاد اتصالاتها. التقييد على جانب الخادم — فالحساب ببساطة لا يُضاف إلى اتصالات Xray الواردة الممنوعة (بدلًا من إخفائه في الواجهة)، لذا لا يقدّم الاشتراك ولا الرابط المصنوع يدويًا إلا ما هو مسموح. يمكن تعديل العضوية من الجانبين — في بطاقة المستخدم وفي المجموعة نفسها — وتظهر مجموعات المستخدم في بطاقته وفي القائمة. ويمكن للمجموعة أيضًا أن تحمل حد سرعة: عند ضبطه تكون له الأولوية على حدود الباقة والحدود الشخصية للأعضاء (العضو في عدة مجموعات يحصل على الأعلى)، ولا يرفع خنقَ البيانات المشبوهة. والباقة التي تمنح مثل هذه المجموعة تمنح مستخدميها تلك السرعة. المجموعة المحفوظة دون تحديد أي اتصال لا تقيّد الوصول — إنها فئة سرعة في حقل واحد. والمجموعة التي اختفت اتصالاتها من تلقاء نفسها (حُذف اتصال وارد أو عقدة) تظل تقيّد أعضاءها بدلًا من أن تفتح لهم كل شيء.
📲 الاشتراكات¶
/<path>/<token> — قائمة base64 إضافة إلى صفحة فيها رمز QR وروابط عميقة واستيراد إلى العملاء
الشائعين (ترويسات التوجيه التلقائي لـ Happ / INCY / Mihomo)، مع أسماء عقدك الخاصة. يمكن إعادة
تعيين الرابط (تدوير الرمز) دون تغيير معرّفات UUID وكلمات المرور. الإعلان داخل العميل (Happ،
v2RayTun) يضع نصًا قصيرًا داخل التطبيق مباشرة. رابط مشفّر لـ Happ (الإعدادات ← الاشتراكات):
يضيف زر Happ الاشتراك عبر happ://crypt4/…، فلا يعرض التطبيق عنوانه أبدًا؛ ويمكن نسخ الرابط نفسه
من بطاقة المستخدم.
معالج اتصال من 3 خطوات: تُكتشف المنصة، ثم التنزيل الرسمي لـ Happ (متجر App Store الروسي بشكل منفصل لـ iPhone)، ثم يُضاف الاشتراك بنقرة واحدة. عند إضافتها إلى الشاشة الرئيسية تُفتح الصفحة كتطبيق. وداخل Telegram تبدو جزءًا منه: لون الترويسة، وزر الرجوع في النظام، والاستجابة اللمسية. وتعرض المدد السعر لكل يوم ومقدار التوفير.
Mini App على عنوان ثابت (عشوائي لكل تثبيت، معروض في الإعدادات ← Telegram) — بلا رمز في الرابط:
يوقّع Telegram بيانات المستخدم، فتعثر اللوحة على حسابه وتفتح صفحته. زر القائمة في البوت يقود إلى
هنا. وعند ضبط العنوان في @BotFather (Configure Mini App)، تحمل روابط
t.me/<bot>?startapp=ref_… و?startapp=<tag> دعوةً ووسم مصدر؛ ويُسجَّل المستخدم الجديد في الحال
ما دام التسجيل مفتوحًا.
المتغيرات في أسماء الاتصالات. يمكن أن يتضمن اسم المسار أو الاتصال المخصص
{server} و{user} و{used} و{left} و{total} و{expire} و{days}؛ تستبدلها اللوحة لكل
مستخدم عند بناء الاشتراك، فيستطيع العميل عرض "Amsterdam · 75 GB left" دون أن يحتفظ المسؤول باسم
لكل شخص. الاسم الذي يضع {server} بنفسه يحل محل البادئة التلقائية «الخادم · المسار» بدلًا من أن
تُضاف فوقه. يجدر معرفة هذا قبل استخدام {left} أو {days}: الاسم المتغير يُعدّ بالنسبة إلى العميل
اسم خادم جديدًا في كل تحديث للاشتراك، ما يعيد تعيين الخادم الذي اختاره المستخدم — والاسم الثابت هو
{server}.
تحمل الصفحة ما يحتاجه صاحب الحساب ولا شيء مما لا ينبغي له توزيعه: يمكن إيقاف بطاقة الإعدادات الفردية لكل مسار، ومع تفعيل ربط الأجهزة تعرض أجهزته المربوطة مع زر لتحرير أحدها — فتصبح إدارة قائمة الأجهزة خدمة ذاتية بدلًا من تذكرة دعم.
قوالب ملفات التعريف (الإعدادات ← الاشتراكات) تتيح لك استبدال المستند المولَّد لـ
mihomo/Clash وsing-box وXray JSON بمستندك الخاص — DNS الخاص بك، ومجموعاتك، ومجموعة قواعدك — مع
إدراج خوادم اللوحة حيث تحدده ({{proxies}} و{{tags}} و{{group}} لـ sing-box، و{{outbounds}}
و{{remarks}} لـ Xray JSON، والعلامات المألوفة # LEAVE THIS LINE! لـ mihomo). تبقى الخوادم من
بناء اللوحة، فلا يستطيع القالب إنتاج مدخل يرفضه العميل. يُفحص القالب عند الحفظ، وإن فشل يومًا عند
العرض تقدّم اللوحة ملف التعريف المولَّد بدلًا منه — فالعميل الذي لا يستطيع تحليل ملف تعريف يُسقط كل
خادم فيه، لذا يجب ألا يصل إليه ملف معطوب أبدًا. يستهدف ملف تعريف sing-box المولَّد
sing-box 1.12 وما بعده (خوادم DNS بأنواع type/server، وأسماء الخوادم تُحل عبر
route.default_domain_resolver). وقالب sing-box الذي يستخدم حقلًا لم يعد 1.13/1.14 يحمّله
(dns.servers[].address، أو مخرج dns/wireguard، أو sniff في الاتصال الوارد،
أو geosite/geoip وما شابه) يُرفض عند الحفظ، والقالب المحفوظ سابقًا يُستبدل بملف التعريف المولَّد،
مع سطر في السجل.
قواعد الاستجابة تغيّر الاشتراك للعملاء المطابقين: قائمة مرتبة من قواعد المسؤول تُطابَق مع الطلب (User-Agent أو ترويسة HWID؛ يحتوي، يساوي، بادئة، regex). تفرض القاعدة صيغة، أو تمنح بروتوكولات بعينها أو تخفيها (المسارات المدمجة، الاتصالات المخصصة، VLESS Encryption)، أو تحظر العميل (فيُقدَّم له موقع التمويه). أول قاعدة مطابقة هي التي تُطبَّق؛ وإن لم تطابق أي قاعدة يُنتقل إلى الاكتشاف حسب User-Agent. يعرض المحرر ما سيحصل عليه عميل معيّن.
حد البيانات لكل خادم (في بطاقة الخادم، بجوار سعته) هو ما يبيعك إياه مزوّد الاستضافة: حصة شهرية أو يومية بالغيغابايت. يبدأ الشهر في اليوم الذي يحتسب منه المزوّد (والشهر الذي لا يحتوي ذلك اليوم يبدأ في آخر أيامه). تحتسب اللوحة ما تنسبه إلى ذلك الخادم — أقل قليلًا مما يفوتره المزوّد، وهو الجانب الآمن من العتبة — وتخبرك مرة واحدة حين تنفد الحصة ومرة واحدة حين تبدأ الفترة الجديدة، ويمكنها إخراج الخادم من الاشتراكات فيما بينهما. ولا تُخرجها كلها أبدًا: إذا تجاوزت كل الخوادم حصصها، تستمر جميعها في الخدمة.
الخادم الذي يتوقف عن الاستجابة يبقى في الاشتراك افتراضيًا: فالعقدة تغيب لفترة وجيزة مع كل تحديث، والعميل الذي يحدّث في تلك الدقيقة سيفقد الخادم حتى تحديثه التالي. لإخفاء هذه الخوادم، والخوادم التي توقف فيها Xray، فعّل الإعدادات ← الاشتراكات ← إخفاء الخادم ما دام غير متصل.
المسار المتعطل — AmneziaWG أو mieru أو MTProto أو مرحّل TURN لم يستطع حجز منفذه — يغادر الاشتراك بعد دقيقتين ويعود فور تشغيله. يعيد الخادم المحاولة كل دقيقة، ويُبلَّغ المسؤولون حين يغادر وحين يعود.
ترتيب الخوادم (الإعدادات ← الاشتراكات) يحدد الخادم الذي يراه العميل أولًا — وما إذا كان الخادم الممتلئ يُعرض أصلًا. يحمل كل خادم وزنًا يدويًا وسعة بعدد المستخدمين، تُضبطان في بطاقته ضمن الخوادم. ثلاثة أوضاع: يدوي (الوزن، ثم القائمة)، والأقل حملًا أولًا (المستخدمون المتصلون مقابل السعة)، وعشوائي — ترتيب جديد مع كل تحديث، فيتوزع العملاء الذين يتصلون بالخادم الأول على الخوادم كلها. الخادم الموسوم بـ إخفاء عند الامتلاء يخرج من الاشتراك ما دام بلغ سعته — ولا يكون ذلك لآخر خادم أبدًا، لأن الاشتراك الفارغ يترك كل العملاء عالقين. يُحتسب الحمل لكل خادم من عمليات الرصد نفسها التي تغذي حد الأجهزة، وتعرض صفحة الخوادم الرقم الحي بجوار كل سعة.
تجاوز DPI على جانب العميل (الإعدادات ← الاشتراكات) هو ما يطلبه الاشتراك من التطبيق أن يفعله
بمصافحة TLS قبل أن يراها جهاز DPI — دون أي تغيير في الخادم. لتطبيقات Xray-core (Happ، v2rayNG،
v2rayN، Streisand) توجد صيغة اشتراك Xray JSON: إعداد كامل لكل مسار، مشتق من رابط المشاركة نفسه
الذي تبنيه اللوحة بالفعل، مع مخرج freedom يتصل عبره الوكيل ويحمل التجزئة (fragment) (تقسيم
ClientHello: tlshello / الحزم الأولى، طول القطعة، الفاصل الزمني) والضوضاء (noise) (حزم عشوائية
أو نصية أو base64 تسبق البيانات). تُقدَّم لتلك التطبيقات تلقائيًا بمجرد التفعيل، وتبقى متاحة دائمًا
عبر ?format=xray-json أو قاعدة استجابة. ولـ sing-box، تقسّم تجزئة السجلات (record fragment)
رسالة ClientHello إلى عدة سجلات TLS فوق التجزئة على مستوى الحزم المضبوطة ضمن الاتصالات.
وضع الصيانة — مفتاح واحد يضع الواجهات العامة (صفحة الاشتراك، صفحة الحالة، موقع التمويه) على صفحة «غير متاح مؤقتًا» بينما تستمر اللوحة وAPI ومزامنة العقد والأنفاق نفسها في العمل، فلا تتأثر الاتصالات القائمة ويظل المسؤول قادرًا على تسجيل الدخول.
🧭 التوجيه والمخارج¶
فئات block / direct / WARP / Opera مع أولوية، وإعدادات geosite/geoip جاهزة مع تنزيل تلقائي
لقواعد البيانات، والخروج عبر Cloudflare WARP (WireGuard) وOpera VPN المجاني مع اختيار
المنطقة. يقف مسار WARP على عدة نقاط نهاية لـ Cloudflare في آن واحد — نطاقات عناوين مختلفة ومنافذ
UDP مختلفة، مع فحص صحتها، فالمزوّد الذي يُسقط نطاقًا واحدًا أو منفذًا واحدًا لا يكلّف المسار شيئًا.
تُكتب نظراؤه كعناوين، لا كأسماء مضيفين أبدًا: يحل Xray نقطة نهاية WireGuard عبر خوادم DNS الخاصة به،
والمسار الذي يعتمد عليها يموت بصمت حيثما تُرشَّح. مسارات الوكيل مخارج مستقلة، لكل منها خوادمها
العليا (upstreams) وقواعد مناطقها، وتُوازَن على كل ما هو حي (Observatory). الخادم الأعلى هو وكيل
socks5/http أو خادم VPN لشخص آخر: رابط vless:// / trojan:// / ss:// / vmess:// /
hysteria2://، أو اشتراك كامل (https://…، happ://crypt…، base64) — تفك اللوحة تشفيره وتواصل إعادة
قراءته. وحين لا يستطيع المسار حمل بياناته — كل خادم أعلى يفشل في فحصه، أو لم يُحَل أي خادم أعلى
إطلاقًا، أو تعذّر الوصول إلى مساعد Opera، أو WARP مفعّل بلا حساب — تعود تلك البيانات إلى
مباشر افتراضيًا، فتستمر في التدفق من عنوان الخادم نفسه. خيار «عدم العودة إلى المباشر أبدًا حين
يتعطل المسار» (لكل خادم، تحت ترتيب التوجيه) يُسقطها بدلًا من ذلك، للعملاء الموجَّهين عبر مسار
تحديدًا كي لا تخرج بياناتهم من ذلك العنوان. المسارات المعطّلة لا تتأثر. وقائمة الوكلاء التي يفشل
مضيفها في التحديث تحتفظ بالوكلاء التي أعادها في المرة السابقة بدلًا من إفراغ المسار — أما ما إذا
كانت لا تزال تعمل فقرار يعود إلى فحص الصحة الذي يُجرى على الوكلاء أنفسهم.
التسلسل (Cascade). يمكن أن تكون الخوادم العليا للمسار خوادمنا نحن (المصدر «الخوادم»): يتصل المستخدمون بهذا الخادم ويصلون إلى الإنترنت عبر الخوادم المختارة. هذا هو المدخل لدولة تعمل بالقوائم البيضاء، حيث يمكن الوصول إلى خادم محلي ولا يمكن الوصول إلى خادم في الخارج. يُوصَل إلى كل مخرج عبر اتصال تختاره: VLESS-XHTTP-REALITY أو VLESS-TCP-TLS أو Hysteria2. تصنع اللوحة مفتاح الجسر بنفسها، ولا يقبله المخرج إلا من عناوين المدخل. تُحتسب البيانات على المدخل ولا تخرج أبدًا إلى الإنترنت من عنوانه. لا يمكن تعطيل مخرج أو حذفه ما دام تسلسلٌ يمر عبره. ومن يحصل على المدخل تحدده مجموعات الوصول.
لقطات الإعداد (تبويب اللقطات في إعدادات الخادم) تمنح سجل تراجع لـ إعداد الخادم كاملًا —
البروتوكولات والمنافذ وREALITY والتوجيه والمخارج وDNS وموقع التمويه والاتصالات الواردة: احفظ نقطة
استعادة يدويًا، وتراجع إليها إن أفسد تعديلٌ شيئًا. يعيد التراجع التحقق عبر xray -test ويأخذ لقطة
تلقائية للحالة الحالية أولًا (فيمكن التراجع عنه هو نفسه)، ويترك الشهادة والنطاق دون مساس عمدًا،
فلا يعرّض التراجع الوصول الحي للخطر أبدًا.
الاشتراكات الخارجية (بطاقة في صفحة الخوادم) هي الوجه الآخر للعملة نفسها: خوادم مزوّد آخر،
تُقرأ من اشتراكه، وتُسلَّم لمستخدميك إلى جانب خوادمك. المصدر رابط، أو رابط happ://crypt…، أو
قائمة ملصقة؛ يُعاد قراءة الرابط كل ساعة، ويُفعَّل كل خادم ويُعطَّل على حدة، ومن يحصل عليها تحدده
مجموعات الوصول نفسها التي تحدد مساراتك. يمكن تمرير الاشتراك عبر خوادمك — أيٍّ منها، وعبر
البروتوكولات التي تحددها: يتصل المستخدمون بمسار VLESS TCP-TLS أو REALITY لديك (إعداد لكل خادم وبروتوكول
لكل خادم لدى الشريك، واسمه قالب بمتغيرات {name} و{proto} و{server} وغيرها)، وينقل الخادم البيانات إلى الشريك، وتعمل حدود السرعة وحدود البيانات وحدود الأجهزة
والقطع كما في مساراتك. وللاشتراك المُمرَّر توجيهه الخاص: قواعد ترسل جزءًا من الحركة إلى مكان آخر
(geoip:ru مباشرةً من خادمك، وموقع عبر WARP أو خط)، والباقي إلى الشريك، ويمكن لخادمك الوصول إلى الشريك
عبر WARP أو خط متتالٍ إن تعذّر الوصول إليه مباشرةً. وخوادم WireGuard لدى الشريك (ملفات .conf
أو روابط wireguard://) لا يتصل بها إلا خادمك — فالإعداد جهاز واحد — ويحصل المستخدمون على إعدادات VLESS خاصة بك. والمزوّد الذي يشترط ربط الأجهزة سيرفض طالبًا لا
يعرّف جهازًا، لذا تقدّم اللوحة جهازًا: معرّفًا مشتقًا من المصدر — هو نفسه في كل قراءة، فيربط الطرف
الآخر خانة واحدة بدلًا من خانة جديدة مع كل تحديث — إضافة إلى إصدار هذه النسخة ووكيل مستخدم بسيط.
وكل واحد منها قيمة افتراضية قابلة للتعديل، تحسبًا لأن يتوقع الطرف الآخر قيمًا بعينها.
🌐 شبكة الخوادم (متعددة العقد)¶
لوحة واحدة تدير الخادم الرئيسي وأي عدد من العقد البعيدة. يُضاف الخادم من الواجهة: انسخ أمرًا واحدًا لخادم Ubuntu نظيف، أو دع اللوحة تسجّل الدخول عبر SSH وتثبّت الوكيل — مع سجل تثبيت مباشر. العقدة هي التي تتصل باللوحة (HTTPS long-poll صادر)، فلا تحتاج اللوحة إلى أي وصول إلى العقد، ونقل اللوحة لا يفصلها. يُعمَّم المستخدمون والحدود والباقات على كل العقد؛ وتُحتسب البيانات والأجهزة ضمن حدود مشتركة، بينما تعرض الإحصاءات وبطاقة المستخدم حجم البيانات التي مرت عبر كل خادم، والإحصاءات لكل بروتوكول أيضًا. ولكل عقدة أيضًا معامل بيانات — معامل يضبط سرعة استهلاك البيانات عبرها لحصة المستخدم (2× في موقع مكلف، و0.5× في موقع ترويجي)؛ وهو يؤثر في الحصة فقط، لا في إحصاءات البايتات لكل عقدة.
يُضبط كل خادم على حدة (البروتوكولات، المخارج، DNS، مفاتيح REALITY، النطاق وTLS، قواعد البيانات
الجغرافية، موقع التمويه). العقدة هي الملف التنفيذي نفسه في وضع العقدة: تولّد اللوحة إعدادها،
ويحمي xray -test محلي مع تراجع من عدم تطابق الإصدارات، وتُشغَّل التحديثات من الواجهة مع تحقق
SHA256.
💳 الباقات والمدفوعات (اختياري)¶
الباقات: السعر، والمدة، وحدود البيانات والأجهزة؛ والسعر 0 يجعل الباقة مجانية. يمكن أن تحمل الباقة دورة تجديد بيانات خاصة بها (يومية / أسبوعية / شهرية / سنوية) لباقات مثل «100 GB شهريًا، مدفوعة لسنة»؛ وإن تُركت فارغة تغطي حصة الباقة المدفوعة المدة كاملة، وتتجدد الباقة المجانية مع كل مدة. هناك فترة تجريبية، وباقة مجانية احتياطية للمستخدمين المنتهية صلاحيتهم، والتجديدات، ونقل المستخدمين بين الباقات. استقبال المدفوعات — اختر مزوّدًا: YooKassa، وPayPalych، وRioPay، وRollyPay، وSeverPay، وPlatega، وPayPear، وAuraPay (البطاقات، SBP، ₽)، وYooMoney (تحويل إلى محفظة شخصية — بلا شركة ولا عقد)، وCryptoBot وHeleket (العملات المشفرة)، وTelegram Stars (في البوت، بسعر ₽ محوّل وفق سعر الصرف الذي تحدده). يدفع العميل في البوت أو في صفحة الاشتراك، وتُفعَّل الباقة تلقائيًا. يؤكد Webhook الدفع (مع التحقق من التوقيع)، والاستطلاع الدوري يغطي حالة عدم وصول Webhook أبدًا؛ والمعالجة متساوية القوة (idempotent) ويُطابَق المبلغ مع الطلب. الدفع اليدوي طريقة مستقلة إلى جانبها: يُفعَّل في المدفوعات ← استقبال المدفوعات، فيعرض بيانات حسابك مع صورة — رمز QR أو لقطة من بيانات الحساب — ويؤكد المسؤول التحويل.
- الباقات المرنة — يمكن للباقة بيع أجهزة إضافية (سعر لكل جهاز لكل فترة، حتى حد معيّن): تُختار مع الباقة، وتُحفظ ويُدفع ثمنها عند التجديد، وتُضاف في منتصف المدة بحسب الأيام المتبقية. حزم البيانات فوق الحصة تبقى حتى إعادة تعيينها التالية. يستطيع المستخدم تبديل الباقة أثناء سريان إحداها: إلى باقة أغلى — يدفع الفرق عن الأيام المتبقية، بتاريخ الانتهاء نفسه؛ وإلى باقة أرخص — مجانًا، وتُعاد حساب الأيام المتبقية بسعرها.
- الرصيد — شحن الرصيد في البوت وفي صفحة الاشتراك، ودفع ثمن الباقة كليًا أو جزئيًا، والتجديد التلقائي من الرصيد (يمكن إيقافه).
- الرموز الترويجية — خصم بالنسبة المئوية أو بـ ₽، وأيام اشتراك، وإضافة إلى الرصيد؛ حد للاستخدام، وانتهاء صلاحية، وقصر على باقات معيّنة وعلى أول عملية شراء.
- الإحالات — رابط شخصي للبوت؛ مدفوعات المدعوّين تمنح نسبة مئوية في الرصيد أو أيامًا في الاشتراك.
- خصومات المدد الأطول — باقة لعدة فترات دفعة واحدة، بسعر أقل، مع تجديد البيانات كل فترة.
- الاستعادة (Win-back) (معطّلة افتراضيًا) — بعد أيام من انتهاء اشتراك مدفوع، يتلقى المستخدم في البوت رمز خصم شخصيًا لاستخدام واحد، مطبّقًا مسبقًا على الدفعة التالية.
- استطلاع المغادرين (معطّل افتراضيًا) — بعد يوم من انتهاء اشتراك مدفوع يسأل البوت عن السبب (غالٍ، لم
يعمل جيدًا، لم يعد لازمًا، خدمة أخرى، أو بكلماته)؛ وتسأل صفحة الاشتراك السؤال نفسه. الإجابات في مسار
التحويل وفي webhook
user.churn_answer. - في اللوحة — الرصيد والسجل في بطاقة المستخدم، ومن دعا من، واستخدام الرموز الترويجية، وأفضل المُحيلين، والاسترداد إلى الرصيد، وقمع المبيعات. يُلتقط الاسترداد أو رد المبلغ (chargeback) الذي يجريه نظام الدفع تلقائيًا: يخرج الطلب من الإيرادات ويفقد ما اشتراه.
- وسوم المصدر — رابط بوت
t.me/<bot>?start=<tag>يحدد من أين جاء المستخدم (إعلان، منشور، شريك)؛ ويعرض القمع التسجيلات والمدفوعات والإيرادات لكل وسم. والبوتات الخاصة تضبطه عبر API. - القائمة السوداء المشتركة (معطّلة افتراضيًا) — حسابات Telegram حظرتها خدمات VPN أخرى بسبب إعادة البيع أو المسح أو المشاركة أو الاحتيال (BEDOLAGA-DEV/VPN-BLACKLIST أو قائمتك الخاصة): لا تستطيع التسجيل في البوت؛ والحساب المسجّل يُوسم في بطاقته.
- النشاط المشبوه — استغلال الفترات التجريبية من عنوان واحد، وجهاز واحد على عدة حسابات، ودعوة الذات، وموجات من الرموز الترويجية والمدفوعات، والبطاقات الفاشلة، وردود المبالغ؛ وكل صف يسمّي الحسابات المعنية.
- الرسائل التلقائية — يكتب البوت من تلقاء نفسه حين يفتحه شخص ولا يسجّل أبدًا، أو يسجّل ولا يتصل أبدًا، أو يأخذ الفترة التجريبية ولا يدفع أبدًا، أو يتوقف عن استخدام اشتراك ساري، أو يترك مدة مدفوعة تنتهي؛ مرة واحدة لكل حالة، بعد المهلة التي تحددها، ومع رمز خصم شخصي اختياري مطبّق مسبقًا على الدفعة التالية. تعرض كل قاعدة عدد من كتبت إليهم وكم منهم دفع خلال 30 يومًا.
- سجل الاستدعاءات (Callback) — كل إشعار أرسله نظام دفع، مع محتواه وما فعلته اللوحة به (أُضيف، تكرار، عدم تطابق المبلغ، لا يوجد طلب كهذا، فشل التحقق من التوقيع)؛ يُحتفظ به 30 يومًا.
Warning
لم يُتحقق بعد من مزوّدي الدفع على حسابات حقيقية. إن ربطت أحدهم، فيُرجى فتح issue وذكر ما إذا كان يعمل (أي مزوّد، وما الذي نجح، وما الذي تعطّل). هذا ما يسمح بوسم المزوّدين الذين تم التحقق منهم وإصلاح البقية.
👥 الوصول والأدوار والتدقيق¶
الأدوار مجموعات صلاحيات يبنيها المالك (المسؤولون ← الأدوار): لكل قسم — المستخدمون،
والمجموعات، والباقات، والخوادم، والتوجيه، والإعدادات، والأمان — خانة «قراءة» وخانة «كتابة»، إضافة
إلى صلاحيات منفصلة لما هو أخطر من البقية: حذف المستخدمين وتصديرهم، ومفاتيح مزوّدي الدفع، والرسائل
الجماعية، وWebhook، ومفاتيح API، والتحديثات، والسجلات، وسجل اللوحة. من دون «كتابة» يُفتح القسم
للقراءة فقط؛ ومن دون «قراءة» لا يظهر في القائمة. صلاحية Webhook تتضمن قراءة المستخدمين والمدفوعات.
يأتي دوران مدمجان: المسؤول (كل شيء ما عدا سجل اللوحة) والمشغّل (المستخدمون، المجموعات،
الإحصاءات). يملك المالك الوحيد كل الصلاحيات، وينفرد بالوصول إلى ما هو أقوى من أي دور: المسؤولون
والأدوار، وبوتات Telegram (تتلقى دردشة بوت المسؤول تنبيهات تسجيل الدخول ويمكنها إنهاء جلسات أي
مسؤول)، والنسخ الاحتياطية، والاستعادة، وإعادة الضبط إلى إعدادات المصنع، ومفاتيح API ذات الوصول
الكامل. تُفحص الصلاحيات على جانب الخادم مع كل طلب، وتعديل الدور يسري على حامليه مع طلبهم التالي.
مفتاح API يُمنح طرق API محددة بدقة، تُحدَّد حسب القسم — فتفعل REST وMCP عندها هذه الطرق تحديدًا،
ولا يستطيع أحد منح مفتاح أكثر مما يملك. يحصل المسؤول الجديد على كلمة مرور مؤقتة يجب تغييرها عند
أول دخول. المصادقة الثنائية (TOTP): يفعّلها كل مسؤول لنفسه — رمز من تطبيق مصادقة (Google
Authenticator، Aegis، 1Password) فوق كلمة المرور، والسر مشفّر في قاعدة البيانات ولا يُعاد عرضه أبدًا
بعد الإعداد؛ وللهاتف المفقود، rospanel totp reset <login> على الخادم؛ والأمر الأشمل
rospanel rescue يعيد تعيين كلمة مرور منسية، أو يمسح العامل الثاني، أو يعيد إنشاء مالك حين لا
يستطيع أي مسؤول الدخول إطلاقًا. والإجراءان اللذان لا تراجع عنهما — إعادة الضبط إلى إعدادات المصنع
وحذف خادم — يطلبان كلمة المرور، ومن المسؤول الذي لديه عامل ثانٍ رمزًا جديدًا: فالرمز الذي أدخله
قد استُهلك بالفعل، لذا فإن رمزًا واحدًا مختلَسًا بالنظر يشتري إجراءً واحدًا لا كل الإجراءات. ويرى كل
مسؤول أيضًا جلساته النشطة في نافذة الحساب — المتصفح ونظام التشغيل، والعنوان الذي استُخدمت منه
آخر مرة، ووقت الدخول — ويستطيع إنهاء أي منها أو تسجيل الخروج من كل مكان آخر بنقرة واحدة؛
والجلسة المنتهية بهذه الطريقة تتوقف عن العمل مع طلبها التالي، ويسجّل سجل اللوحة من أنهى ماذا.
الدخول من عنوان لم يستخدمه هذا المسؤول من قبل يُبلَّغ عنه في Telegram (فئة «الدخول من عنوان جديد»
في إعدادات البوت): من، ومن أين (IP، الدولة، الشبكة)، وبأي متصفح. تحت الرسالة زر «لست أنا» — ينهي
كل جلسات ذلك المسؤول بنقرة واحدة، ولا يبقى إلا تغيير كلمة المرور. سجل المستخدم يسجّل ما فُعل به
ومن فعله (مسؤول، مفتاح API، بوت، المستخدم نفسه، النظام) ويبقى بعد حذفه. سجل اللوحة (مرئي للمالك)
يغطي عمليات الدخول والمحاولات الفاشلة مع عناوين IP، وتفعيل العامل الثاني وتعطيله، وتغييرات
الإعدادات والنسخ الاحتياطية؛ ولا تُكتب إلا الإجراءات الناجحة، ولا تُكتب محتويات الطلبات أبدًا. سجل
اللوحة قابل للبحث (نص حر في الإجراء والهدف والمسؤول وIP) وقابل للتصفية حسب الفئة ونطاق التاريخ،
ويُصدَّر العرض الحالي إلى CSV بنقرة واحدة. ويُحتفظ بالسجلين لمدة سنة.
🤖 التكاملات¶
بوت المسؤول في Telegram: إدارة المستخدمين، والباقات، ورموز QR للاشتراكات، والنسخ الاحتياطية المجدولة، وإشعارات الأحداث (التسجيلات، انتهاء الصلاحيات، أعطال Xray، المدفوعات، الشهادات).
بوت العملاء: تسجيل ذاتي، وقائمة شخصية بالاشتراك والإحصاءات، وشراء الباقات — إضافة إلى إشعارات شخصية للمستخدم: قرب انتهاء الاشتراك، ونفاد البيانات، واستلام الدفعة.
بوت الدعم — بوت ثالث: يكتب إليه الشخص في رسالة خاصة فتصل المحادثة إلى مجموعتك ذات المنتدى، موضوع واحد لكل شخص؛ ترد من هناك مباشرة ويعود الجواب إليه في البوت.
الرسائل الجماعية — تسع شرائح من الجمهور (الجميع، مع حساب ودونه، النشطون، المنتهية صلاحيتهم، القريبون من الانتهاء، غير النشطين منذ مدة طويلة، الذين لم يتصلوا أبدًا) مع صورة وزر. يُدار التسليم عبر جدول المستلمين، فالرسالة الجماعية المنقطعة تستأنف بدلًا من أن تبدأ من جديد، ولا يتلقى أحد الرسالة مرتين. يمكن تأجيل الرسالة الجماعية إلى تاريخ ووقت محددين؛ ويُحدَّد المستلمون لحظة الإرسال.
ملخص الشهر — في اليوم الأول يرسل بوت المسؤول ملخص الشهر الماضي: الإيرادات والمستخدمون وحركة البيانات ومدة تشغيل الخوادم والأعطال.
رابط جديد من المستخدم نفسه — عند السماح بذلك (الإعدادات ← الاشتراكات، من مرة كل ساعة إلى مرة كل 30 يومًا)، تتيح صفحة الاشتراك رابطًا جديدًا بدل الرابط المسرّب؛ ويتوقف القديم فورًا. ويمكن تقييد نقل الحساب إلى Telegram آخر من تلك الصفحة بالطريقة نفسها (الإعدادات ← Telegram).
REST API بمفاتيح مسمّاة (Authorization: Bearer)، وOpenAPI مولَّد من الشيفرة، وSwagger UI.
يغطي نصفي اللوحة كليهما: المستخدمون والباقات والطلبات والخوادم التي تديرها، والإعداد الذي يقف خلفها —
الإعدادات، والتوجيه وDNS لكل خادم، ونقاط حفظ الإعداد مع التراجع. المسؤولون ومفاتيح API والمسار السري
للوحة غير مكشوفة عمدًا. Webhook ترسل أحداثًا موقّعة بـ HMAC-SHA256 مع إعادة المحاولة. مقاييس
Prometheus على /<api-path>/v1/metrics خلف المفتاح نفسه — المستخدمون، والبيانات، والإنتاجية،
وإحصاءات المضيف، وسلسلة واحدة لكل عقدة؛ ولوحة Grafana جاهزة لها هي
docs/grafana/rospanel.json (Dashboards → New → Import). خادم MCP
يقدّم API نفسه لمساعد ذكاء اصطناعي، مع قائمة أدوات مولَّدة من مستند OpenAPI ذاك: الصق
…/v1/mcp/<key> في مساعد يقبل عنوان URL ولا شيء يحتاج إلى تثبيت في أي مكان. طرق المفتاح تحدد الأدوات
التي يحصل عليها المساعد: لمساعد يكتفي بالاطلاع، حدّد «قراءة فقط». المزيد في
docs/api/.
التسجيل من نظام خارجي — POST /v1/signup يسجّل عميلًا بمعرّفه في النظام الخارجي (بريد إلكتروني،
رقم حساب) وفق قواعد البوت: التسجيل المغلق، ورمز الدعوة، والإشراف، وحد المعدل، وحساب واحد وفترة
تجريبية واحدة لكل معرّف. حدّد مفتاح النظام الخارجي لهذه الطريقة، لا لإنشاء المستخدمين. والعميل الذي
لديه حساب بالفعل يحصل على المعرّف عبر PATCH /v1/users/{id}. يسجّل بوتك الخاص عبر telegram_id، وفق
قواعد البوت المدمج: فترة تجريبية واحدة لكل Telegram، والقائمة السوداء المشتركة، وربط Telegram فورًا.
صفحة اشتراكك الخاصة — GET /v1/users/{id}/subscription هي الصفحة على هيئة بيانات: الأرقام،
واستيراد التطبيقات، والإعدادات، والأجهزة، والعروض، ورابط ربط Telegram (tg_link). اضبط
الإعدادات ← الاشتراكات ← صفحة اشتراكك الخاصة (https://example.com/cabinet?sub={token}) فيذهب
المتصفح الذي يفتح رابط اشتراك إلى هناك؛ وتجلب التطبيقات الاشتراك كما في السابق.
ربط مساعد يتطلب عنوان URL واحدًا بلا أي تثبيت محلي. أنشئ مفتاحًا في الإعدادات ← API (مع تحديد ما يُسمح له بفعله)، وخذ العنوان الأساسي من الصفحة نفسها، ثم الصق:
https://vpn.example.com/<api-path>/v1/mcp/<key>
العنوان هو بيانات الاعتماد — سري بقدر المفتاح الذي يحتويه، ويتوقف عن العمل لحظة إلغاء ذلك المفتاح. ولا يُعرض على المساعد إلا الأدوات التي يسمح بها المفتاح.
صفحة الحالة — صفحة عامة اختيارية (الإعدادات ← عام) تعرض الخوادم العاملة وسجل توفّر لمدة 90
يومًا. الأسماء والتوفر فقط: لا عناوين، ولا مستخدمين، ولا بيانات، ولا صفحة إطلاقًا حتى تفعّلها.
ومن الشاشة نفسها تُنشر الأعطال والصيانة المجدولة: عنوان ونص والخوادم المعنية ونافذة الصيانة،
ويمكن إرسالها عبر البوت إلى كل من لديه اشتراك نشط.
لكل إدخال مجرى أحداث (قيد التحقيق، تم تحديد السبب، قيد المراقبة، الخلاصة)؛ ويظهر الحالي منها والقريب (خلال ثلاثة أيام)
في صفحة الاشتراك أيضًا؛ وتُدار عبر /v1/incidents مع أحداث incident.*. ويمكن للصيانة إزالة خوادمها من الاشتراكات طوال مدتها.
وبعد انتهاء الإدخال يعيد زرّ واحد ساعاته: تُضاف إلى اشتراك كل من كان اشتراكه ساريًا عند بدايته ويمكنه
استخدام الخوادم المذكورة، مع رسالة في البوت.
🧩 الإضافات (تجريبية)¶
شيفرة المجتمع داخل اللوحة: إشعارات، وتكاملات، ومنطقك الخاص على أحداث اللوحة ووفق جدول زمني. يمكن
للإضافة أن تضيف طريقة دفع، وحقولًا وأزرارًا في بطاقة المستخدم، وعناصر في لوحة المعلومات، وكتلًا في
صفحة الاشتراك، وأزرارًا وأوامر في البوت، وأن يكون لها رأي في التسجيلات وربط الأجهزة والأسعار، أو أن
تعيد تنسيق صفحة الاشتراك. الإضافة ملف JavaScript واحد مع ملف وصف (manifest)؛ تشغّلها اللوحة في بيئة
معزولة WebAssembly بقاعدة بياناتها الخاصة وحدود للذاكرة والوقت، فالإضافة المعطوبة هي التي تتوقف لا
اللوحة. قبل التثبيت يرى المسؤول ما تطلبه — صلاحيات API اللوحة ومضيفي الإنترنت — ويستطيع قراءة
شيفرتها؛ ولا يمكن الوصول إلى أي شيء خارج ذلك. الإعدادات ← الإضافات، من ملف zip أو رابط. ويمكن أيضًا
إنشاء إضافة هناك مباشرة: منشئ قواعد («حين يأتي هذا الحدث ويتحقق هذا الشرط، افعل ذلك» — Telegram،
Discord، HTTP، تمديد، وسم) أو محرر شيفرة، مع اختبارات وتشغيل تجريبي في بيئة معزولة. يحصل المؤلفون على
rospanel plugin new | test | dev | pack دون الحاجة إلى Node؛ راجع docs/plugins
وexamples/plugins.
🌍 اللغة (RU / EN / 中文 / العربية / فارسی)¶
| الواجهة | مصدر اللغة |
|---|---|
| اللوحة | اختيار المسؤول نفسه (لكل متصفح)، وإلا فلغات المتصفح |
| صفحة الاشتراك | Accept-Language |
| بوت العملاء وبوت الدعم | لغة Telegram لدى كل شخص |
| بوت المسؤول | إعداد على مستوى اللوحة (الإعدادات ← Telegram) |
| CLI | الإنجليزية |
🎨 الهوية البصرية والسمة¶
اسمك وشعارك بدلًا من «RosPanel» — في اللوحة وفي صفحة الاشتراك. لون مميز واحد يعيد تلوين الواجهة كلها، والوضع الداكن يكيّف النصوص والحالات والرسوم البيانية من تلقاء نفسه.
🛡️ كشف إساءة الاستخدام¶
تفحص اللوحة عناوين IP الوجهة من سجل الوصول في Xray مقابل قائمة بالشبكات الخبيثة وتسجّل التطابقات فقط — فالبيانات العادية لا تُخزَّن أبدًا. ولهذا غرض واحد تحديدًا: حين تصل شكوى إساءة استخدام بشأن عنوان الخادم، تستطيع معرفة بيانات من كانت.
القائمة هي FireHOL level 1: خوادم القيادة والتحكم لشبكات البوتات (botnet)، والمهاجمون، وشبكات البريد المزعج. مستوى منتقى بعناية بأقل قدر من الإنذارات الكاذبة، دون شبكات CDN أو الاستضافة المشتركة. وإلى جانبها قائمتك الخاصة (IP/CIDR)، التي تُفحص أولًا. تظهر التطابقات في الإحصاءات وفي بطاقة المستخدم، منسوبةً إلى الخادم الذي خرجت منه البيانات؛ وعند تجاوز العتبة اليومية يُرسل إشعار Telegram. الفئات والقائمة المخصصة والعتبة والتحديثات موجودة في الإعدادات ← قوائم الحظر.
التنبيه ليس الاستجابة الوحيدة. يضبط التبويب نفسه الإجراءات التلقائية — سلّم من ثلاث درجات، لكل منها عتبة تطابقات يومية خاصة بها (القيمة 0 تعطّل الدرجة): تحذير المستخدم عبر بوت Telegram الخاص به (مرة في اليوم)، وتحديد سرعته بقيمة معيّنة، وإيقاف الوصول. يستمر تحديد السرعة والإيقاف لمدة محددة (من ساعة إلى 30 يومًا)، تعيد اللوحة بعدها السرعة السابقة أو تعيد تفعيل الوصول من تلقاء نفسها وتبلغ المستخدم؛ ويُبلَّغ المستخدم والمسؤول بكل درجة، وتُسجَّل كل درجة في السجل. تفعيل المستخدم أو تغيير سرعته يدويًا يتجاوز الإجراء — فقرار المسؤول لا «ترفعه» اللوحة لاحقًا. وتُحتسب بيانات العقد أيضًا: تُجمع التطابقات على الخادم الرئيسي، وتصل حدود السرعة ومجموعة المستخدمين إلى العقد عبر المزامنة المعتادة.
تُجرى الفحوص على العناوين لا على النطاقات، وهذا ليس تبسيطًا. فالعملاء الحديثون يحلّون DNS خارج النفق ويشفّرون SNI (ECH)، فكل ما يصل إلى الخادم هو عنوان IP مجرد.
يُحتفظ بالتطابقات لمدة 30 يومًا — وهي كافية للتعامل مع شكوى.
من أين يمكن للعملاء الاتصال (الإعدادات ← عام). قاعدة دول — هذه الدول فقط، أو كل مكان باستثناء هذه — تُفحص مقابل ما تسجّله اللوحة أصلًا لكل اتصال، على الخادم الرئيسي وعلى كل عقدة، فتغطي القاعدة كل البروتوكولات بما فيها تلك التي لا يحملها Xray. يُسقَط العنوان لا الحساب: يدخل عنوان IP المخالف في مجموعة nftables على كل خادم (لمدة يحددها المسؤول، وتنتهي ذاتيًا)، بينما يستمر الحساب في العمل من أي مكان تسمح به السياسة. التطبيق معطّل حتى يُفعَّل — وحتى ذلك الحين تُسجَّل المخالفة فقط، في سجل المستخدم وفي قائمة يستطيع المسؤول قراءتها قبل أن يسمح للقاعدة بقطع أي شيء، ويمكن رفع أي حظر يدويًا. والعنوان الذي لا يستطيع الجدول الجغرافي تحديد موقعه لا يُرفض أبدًا: فذلك الجدول غير مكتمل، وقطع مستخدمين حقيقيين عن خدمة عاملة هو الخطأ الوحيد الذي يجب ألا يقع.
العناوين الموثوقة (الإعدادات ← عام ← الحماية والمرونة) عناوين IP وشبكات لا تحظرها اللوحة تلقائيًا أبدًا: لا بسبب تخمين كلمة مرور SOCKS/HTTP، ولا بسبب مسح اللوحة، ولا بموجب سياسة المصدر (رفض السياسة يُسجَّل فقط بالنسبة إليها). مخصصة لمكتب أو لخادمك الخاص خلف عنوان مشترك؛ وتُرفع عند الحفظ أي عمليات حظر قائمة عليها.
حظر العنوان (بطاقة المستخدم ← الأجهزة (IP)) — يُسقَط عنوان IP في الجدار الناري للخادم الرئيسي وكل عقدة حتى يُرفع الحظر. كل حظر، يدويًا كان أو تلقائيًا، مع إمكانية رفعه — في المستخدمون ← الإحصاءات.
🧰 التشغيل والأمان¶
التشخيص بنقرة واحدة: عملية Xray، ونفق AmneziaWG، وتطبيق الإعداد، وانتهاء صلاحية TLS، ومساحة القرص، وحداثة قواعد البيانات الجغرافية، وصحة المخارج — كل فحص مع تلميح. والاختبار الذاتي للاتصال المنفصل يتصل بكل بروتوكول كعميل حقيقي ويتأكد من أن البيانات تخرج فعلًا — فيكتشف انحراف بيانات الاعتماد أو TLS أو ALPN قبل أن يكتشفه المستخدم. النسخ الاحتياطي / الاستعادة وإعادة الضبط متاحة من اللوحة ومن CLI. الاستعادة من اللوحة تطلب كلمة مرورك، ومع تفعيل 2FA رمزًا جديدًا — وحين كان لدى مالك النسخة الاحتياطية أو مسؤوليها 2FA، تطلب أيضًا رمزًا من تطبيق المصادقة الخاص بتلك النسخة، بما في ذلك في معالج التشغيل الأول، فلا يستطيع من يملك الملف دون تطبيق المصادقة استعادة نسخة احتياطية للوحة محمية بـ 2FA.
إمكانية الوصول من دول أخرى: TCP ping إلى المنفذ الرئيسي لكل خادم من مجسات Globalping في الدول التي تختارها (روسيا، الصين، إيران…) — من بطاقة الخادم أو وفق جدول. الدولة التي تفشل جولتين متتاليتين ترسل للمسؤولين تنبيهًا في Telegram، وكذلك عند عودتها.
قواعد التنبيه (الخوادم ← التنبيهات): حدّ لحمل المعالج أو الذاكرة أو القرص أو سرعة الشبكة أو عدد المستخدمين المتصلين — لكل الخوادم أو لخادم واحد، بمدة تحددها. القاعدة التي تعمل ترسل للمسؤولين إشعارًا في Telegram وwebhook باسم alert.fired، ثم يصل إشعار الانتهاء مع الذروة والمدة. يُحفظ السجل 30 يومًا.
التحديثات بأمر واحد: تتحقق اللوحة من SHA256، وتشغّل الملف التنفيذي تشغيلًا تجريبيًا، وتأخذ نسخة احتياطية، ثم تستبدل نفسها بعد ذلك فقط، محتفظةً بالإصدار السابق بجوارها. التحديث التلقائي وفق جدول (الإعدادات ← عام): تثبّت اللوحة الإصدار الجديد بنفسها ثم تحدّث الخوادم بعدها (تثبيت systemd؛ أما Docker فيُحدَّث مع صورته)؛ ويخبرك بوت المسؤول بما فعلته. «ما الجديد» في قائمة الملف الشخصي يعرض سجل الإصدارات المضمّن في الملف التنفيذي نفسه، مع تمييز الإصدار العامل. نواة Xray مثبّتة على إصدار محدد، وتحديث اللوحة يحملها معه: عند التشغيل التالي تقارن اللوحة وكل عقدة نسخة Xray لديها بالنسخة المثبّتة وتستبدلها إن اختلفت — بعد التحقق من المجموع الاختباري أولًا، والخادم الذي لا يستطيع الوصول إلى GitHub يحتفظ بالإصدار الذي يشغّله بالفعل. يعيد المشرف (supervisor) تشغيل Xray إن تعطّل. والمراقب (watchdog) يغطي الحالة الأصعب التي لا يراها معالج الأعطال — عملية تبقى حية لكنها تتوقف عن الخدمة: يفحص API الخاص بـ Xray، وإن لم يستجب لعدة فحوص متتالية يعيد تشغيله (مع فترة تهدئة تمنع عواصف إعادة التشغيل) وينبّه المسؤول. يعمل على الخادم الرئيسي وعلى كل عقدة.
إجراءات صفحة الاشتراك نفسها (إلغاء باقة، الدفع، تحرير جهاز) لا تُقبل إلا من تلك الصفحة: فالرمز في الرابط يثبت الحساب، لا هوية الطالب، لذا لا يستطيع موقع شخص آخر التصرف برابط مسرّب.
الأسرار في قاعدة البيانات مشفّرة (AES-GCM). رموز الجلسات ومفاتيح API تُخزَّن كتجزئات (hashes) فقط — فحتى مع الوصول إلى الجداول لا يمكنك إعادة استخدام جلسة أحد. وعند تغيير المفتاح تعيد اللوحة تغليف كل ما تحفظه مغلقًا: كلمات مرور المستخدمين ومفاتيحهم، ومفاتيح العقد (REALITY، WARP، AmneziaWG)، وأسرار Webhook، ومفاتيح الاتصالات المخصصة، وكلمات مرور وكيل النظام، والعوامل الثانية للمسؤولين، وإعدادات مزوّدي الدفع، وإعدادات الإضافات. يتطلب تأكيد الدفع وإدارة المسؤولين إعادة إدخال كلمة المرور. الطلبات الصادرة محمية من SSRF، وتُحظر هجمات التخمين على الاتصالات الواردة عبر nftables (مدخل مؤقت في مجموعة تُنهيه النواة من تلقاء نفسها)، ويُحدّ عدد الاتصالات لكل IP عبر nftables.
🛠️ CLI¶
rospanel تشغيل اللوحة (عادةً عبر systemd)
rospanel install تثبيت خدمة systemd وتشغيلها (root)
rospanel uninstall [-y] إزالة الخدمة (تُحفظ البيانات)
rospanel start|stop|restart التحكم في الخدمة
rospanel status حالة الخدمة
rospanel update [-y] التحديث إلى أحدث إصدار على GitHub
rospanel backup [file] لقطة .tar.gz (قاعدة البيانات + مفتاح التشفير + الشهادات + إعداد Xray)
rospanel restore [-y] <file> الاستعادة من لقطة (تُطبَّق عند التشغيل)
rospanel host [-y] [domain|IP] عرض/تغيير العنوان (يعيد إصدار TLS)
rospanel path عرض عنوان URL للوحة والتحقق من secrets.key / قاعدة البيانات
rospanel totp reset <login> إزالة المصادقة الثنائية لمسؤول (هاتف مفقود)؛ totp وحده يعرض القائمة
rospanel rescue <sub> استعادة الوصول المقفل: list | password | unlock | owner
rospanel reset [-y] إعادة الضبط إلى إعدادات المصنع (يمسح قاعدة البيانات)
rospanel plugin <sub> أدوات مؤلفي الإضافات: new, validate, pack, test, dev
rospanel version الإصدار
rospanel help المساعدة الكاملة
تطلب الأوامر المدمّرة (reset وrestore وhost وuninstall) تأكيدًا؛ والخيار -y يتخطاه.
وضع العقدة¶
يمكن للملف التنفيذي نفسه أن يعمل كعقدة تديرها اللوحة. أمر install تولّده نافذة «إضافة عقدة» في
اللوحة — ولن تحتاج عادةً إلى كتابته يدويًا.
rospanel node install --join '<url>' الانضمام إلى اللوحة وتثبيت الخدمة (root)
rospanel node run وكيل العقدة (نقطة دخول systemd)
rospanel node set-panel <url> توجيه العقدة إلى عنوان جديد للوحة
rospanel node status حالة العقدة المحلية
rospanel node uninstall [-y] إزالة خدمة العقدة (تُحفظ البيانات)
يأتي --join من نافذة إضافة العقدة؛ والرمز الذي يحتويه يُستخدم مرة واحدة ويبقى صالحًا 24 ساعة.
للشرح الكامل راجع 🌐 إضافة عقدة.
🧱 البنية¶
المصدر الوحيد للحقيقة هو SQLite؛ ويُولَّد إعداد Xray منه دائمًا ويطبّقه المشرف (supervisor). لوحة الويب مضمّنة في الملف التنفيذي.
التقنيات: Go 1.26 · Xray-core · SQLite (modernc، بلا CGO) · React + Vite + Tailwind.
⚠️ إخلاء المسؤولية¶
يُقدَّم البرنامج «كما هو»، دون أي ضمانات من أي نوع.
المشروع مخصص للاستخدام التعليمي والبحثي: دراسة بروتوكولات الشبكات وTLS وتقنيات الوكيل، وأعمال CTF ومختبرات أمن الشبكات، واختبارات الاختراق المصرّح بها، وإدارة بنيتك التحتية الخاصة. المشروع غير مخصص للتحايل على القيود القانونية أو لأي نشاط غير قانوني آخر؛ وآليات التمويه موجودة لدراسة التقنية واختبار مرونة الخدمات ضمن اختبارات مصرّح بها.
تقع مسؤولية تثبيت البرنامج وضبطه وتشغيله، والامتثال لقوانين ولايتك القضائية، على مشغّل الخادم. ولا يتحمل المؤلفون والمساهمون مسؤولية كيفية استخدام أطراف ثالثة للمشروع.
💻 التطوير¶
# الواجهة الأمامية (بعد التغييرات في web/)
npm --prefix web install
npm --prefix web run build # → web/dist (يُضمَّن في الملف التنفيذي)
# الملف التنفيذي
go build -o rospanel ./cmd/rospanel
./rospanel
الترجمة. قواميس اللوحة هي web/src/i18n/{ru,en,zh,ar,fa}.ts، وأنواعها مأخوذة من ru.ts:
المفتاح المفقود في أيّ منها خطأ في البناء، لا رجوع صامت. أما ما يعرضه Go بنفسه —
البوتات وصفحة الاشتراك — فموجود في internal/i18n/؛ ويسلّم الخادم اللوحةَ مفتاحًا مع معاملات ولا يسلّمها
نصًا معروضًا أبدًا. إضافة لغة أخرى تعني قاموسًا إضافيًا في كل جانب.
متغيرات بيئة مفيدة (كلها اختيارية): ROSPANEL_DATA (مجلد البيانات)، وROSPANEL_ADMIN_ADDR (عنوان
loopback للوحة، 127.0.0.1:8080 افتراضيًا)، وXRAY_BIN، وROSPANEL_HOST، وROSPANEL_ACME_EMAIL،
وGOMEMLIMIT. من دون GOMEMLIMIT تُبقي اللوحة كومة Go (heap) تحت حد مرن يساوي نصف ذاكرة الجهاز (ربعها
على العقدة)، أو حد cgroup إن كان أقل؛ ويعرض سجل الإقلاع الرقم.
الجدار الناري للمضيف. مع ufw أو firewalld أو iptables بسياسة إسقاط في INPUT/FORWARD على الخادم،
تفتح اللوحة (وكل عقدة) هناك منافذ مساراتها العاملة وتسمح لنفق AmneziaWG بالمرور عبر FORWARD — في
سلاسلها الخاصة ROSPANEL-IN/ROSPANEL-FWD، أو كقواعد firewalld وقت التشغيل — وتسحبها حين يُعطَّل
المسار. ROSPANEL_HOSTFW=off يعطّل ذلك.
الحماية من الإغراق (حدود nftables على منافذ TCP العامة، راجع «التشغيل») تُضبط عبر البيئة أيضًا — وهذا مفيد حين يقف مكتب كامل أو مشغّل CGNAT خلف عنوان IP واحد ويصطدم العملاء بالقيم الافتراضية:
| المتغير | ما يفعله |
|---|---|
ROSPANEL_CONNLIMIT=off |
يعطّل الحدود كليًا (تُزال قواعد nftables) |
ROSPANEL_CONNLIMIT_MAX |
الحد الأقصى لاتصالات TCP المتزامنة من عنوان IP واحد |
ROSPANEL_CONNLIMIT_RATE |
الحد الأقصى للاتصالات الجديدة في الثانية من عنوان IP واحد |
الحالة الحالية ظاهرة في لوحة المعلومات ← الإدارة ← التشخيص: إن لم تكن nftables مثبّتة أو لم تكن اللوحة تعمل بصلاحيات root، فلن تُطبَّق القواعد بصمت — وسيخبرك التشخيص بذلك.
طلبات الدمج (PR) والـ issues مرحّب بها. تتبع الالتزامات (commits) معيار Conventional Commits: يستخدمه release-please لإصدار النسخ ونشر الملف التنفيذي وصورة Docker على GHCR.
💝 ادعم المشروع¶
يُطوَّر RosPanel في أوقات الفراغ ويُوزَّع مجانًا. إن وجدت اللوحة مفيدة، فأسهل طريقة لدعمها هي DonationAlerts أو Boosty (بطاقات روسية، لمرة واحدة أو بشكل دوري). شكرًا لك! 🙏
العملات المشفرة
USDT. اختر شبكة وانسخ العنوان بعناية — يجب أن تتطابق شبكة المرسل وشبكة المستلم. أرسل USDT فقط، وعلى الشبكة المذكورة فقط: التحويل على شبكة خاطئة لا يمكن استرداده. أقل الرسوم على TRON (TRC20) وTON.
| الشبكة | الرمز | العنوان |
|---|---|---|
| TRC20 (Tron) | USDT | TJwyrPVEZVZ1YrcmDiZTyFjLo3Q2DmEGzs |
| ERC20 (Ethereum) | USDT | 0xf9d663146ce902da91911b214c71cc73a5269d1d |
| Solana | USDT | 2qAZRTbaUMTfYuZbD1dCYHjkYgxkw4dUYE9XY3JhC2Cs |
| TON | USDT | UQDoat731MLYuIw8ayL3Vhhw7zTBbLvRaQFmDvab--CNNI7e |
Bybit. إن كنت تستخدم Bybit أيضًا — حوّل إلى UID 136462734: فوري ومجاني.
لا تستطيع الدعم ماليًا؟ لا يزال بإمكانك المساعدة — استأجر خوادم عبر روابط الإحالة في من أين تحصل على خادم. لن يكلفك ذلك شيئًا وسيساعد المشروع.
📄 الترخيص¶
GNU Affero General Public License v3.0 (AGPL-3.0).
المشروع مجاني للاستخدام والتعديل والاستضافة الذاتية. إذا قدّمت وصولًا عبر الشبكة إلى نسخة معدّلة من اللوحة (بما في ذلك كخدمة)، فعليك نشر الشيفرة المصدرية لتعديلاتك بالشروط نفسها.