قائمة مراجعة التنفيذ
دليل تفصيلي خطوة بخطوة لإعادة تنفيذ Xray-core في إطار عمل آخر. العناصر مُرتّبة حسب التبعية -- العناصر الأولى مطلوبة من العناصر اللاحقة.
المرحلة الأولى: الأساس
نظام المخازن المؤقتة
- [ ] تنفيذ مخزن بايتات مجمّع (حجم افتراضي 8 كيلوبايت، مكافئ
sync.Pool) - [ ] مؤشرات البداية/النهاية لتقطيع بدون نسخ
- [ ]
MultiBuffer(قائمة مخازن) لعمليات الإدخال/الإخراج الدُفعية - [ ] حقل
Buffer.UDPلبيانات وصفية خاصة بالوجهة لكل حزمة - [ ] واجهات
Reader/WriterمعReadMultiBuffer()/WriteMultiBuffer() - [ ] حلقة
Copy(reader, writer)مع استدعاء مؤقت النشاط - [ ]
BufferedWriterلتجميع الترويسة + الحمولة الأولى
الأنبوب
- [ ] أنبوب ثنائي الاتجاه:
New() -> (Reader, Writer) - [ ] ضغط عكسي: حد حجم قابل للتعيين، حجب عند الكتابة عند الامتلاء
- [ ] إشعار قائم على الإشارات (إشارة غير حاجبة، انتظار حاجب)
- [ ] نسخة
Doneلإشعار الإغلاق - [ ] دعم القراءة بمهلة زمنية (
ReadMultiBufferTimeout)
الأوليات الشبكية
- [ ] نوع
Address: IPv4، IPv6، Domain - [ ] نوع
Destination: الشبكة (TCP/UDP) + العنوان + المنفذ - [ ]
AddressParser: التسلسل (بايت النوع + العنوان) بترتيب المنفذ-ثم-العنوان
سياق الجلسة
- [ ] بيانات
Inboundالوصفية: المصدر، الوسم، المستخدم، الاتصال، CanSpliceCopy - [ ] بيانات
Outboundالوصفية: الهدف، الهدف الأصلي، هدف المسار، الوسم، CanSpliceCopy - [ ] بيانات
Contentالوصفية: البروتوكول، طلب الاستنشاق، السمات - [ ] تمرير السياق عبر جميع الاستدعاءات
المرحلة الثانية: خط المعالجة الأساسي
رابط النقل
- [ ]
Link= زوج(Reader, Writer) - [ ] إنشاء زوج أنابيب: inboundLink <-> outboundLink (متصالبة)
المُوزّع
- [ ]
Dispatch(ctx, destination) -> Link(توجيه غير متزامن) - [ ]
DispatchLink(ctx, destination, link)(توجيه متزامن) - [ ] إنشاء أزواج أنابيب مع أغلفة إحصائية
- [ ]
cachedReaderللاستنشاق دون استهلاك البيانات - [ ] خط استنشاق: HTTP، TLS SNI، QUIC، BitTorrent، FakeDNS
- [ ] منطق قرار
shouldOverride() - [ ] RouteOnly مقابل التجاوز الكامل
- [ ]
routedDispatch()-- وسم قسري -> الموجّه -> الصادر الافتراضي
المُستنشق
- [ ] كشف طريقة HTTP + ترويسة Host
- [ ] استخراج SNI من TLS ClientHello
- [ ] استخراج SNI من حزمة QUIC الأولية
- [ ] كشف بروتوكول BitTorrent
- [ ] مُستنشق بيانات FakeDNS الوصفية (بحث في مجمع IP)
- [ ] نتيجة مركّبة (نطاق البيانات الوصفية + بروتوكول المحتوى)
- [ ] مهلة 200 ملي ثانية، بحد أقصى محاولتين
الموجّه
- [ ] تقييم تسلسلي للقواعد (أول تطابق يفوز)
- [ ] مُطابقات النطاقات: كامل، نطاق (لاحقة)، سلسلة فرعية، تعبير نمطي
- [ ] مُطابقات IP: نطاق CIDR مع بحث ثنائي
- [ ] مُطابقات المنافذ: دقيقة ونطاقية
- [ ] مُطابقات الشبكة والبروتوكول والمستخدم ووسم الوارد
- [ ] تحميل ملف GeoIP بصيغة
.dat - [ ] تحميل ملف GeoSite بصيغة
.dat - [ ] استراتيجية النطاق: AsIs، IPIfNonMatch، IPOnDemand
- [ ] الموازنات: random، roundRobin، leastPing، leastLoad
نظام الميزات
- [ ] سجل الميزات (ربط النوع -> النسخة)
- [ ] حل التبعيات (مكافئ
RequireFeatures) - [ ] سجل الإعدادات (ربط نوع protobuf -> دالة المصنع)
- [ ] دورة حياة النسخة: إنشاء -> إضافة ميزات -> حل -> بدء
المرحلة الثالثة: طبقة النقل
سجل النقل
- [ ]
RegisterTransportDialer(name, dialer) - [ ]
RegisterTransportListener(name, listener) - [ ]
MemoryStreamConfig(إعداد النقل + الأمان أثناء التشغيل) - [ ] المُتصل:
Dial(ctx, dest) -> Connection - [ ] المُستمع: يقبل الاتصالات باستدعاء
نقل TCP
- [ ] اتصال TCP أساسي واستماع
- [ ] خيارات المقبس: SO_MARK، TCP_FASTOPEN، SO_REUSEPORT
- [ ] Happy Eyeballs (RFC 8305) للمكدس المزدوج
- [ ] دعم TProxy / Redirect (على Linux)
أمان TLS
- [ ] TLS قياسي مع شهادات قابلة للتعيين
- [ ] بصمة uTLS (Chrome، Firefox، Safari، إلخ)
- [ ] تفاوض ALPN
- [ ] تثبيت الشهادات
أمان REALITY
- [ ] الخادم: انتحال خادم TLS حقيقي، مصادقة Short ID
- [ ] العميل: uTLS مع SessionID مخصص
- [ ] لا حاجة لـ CA (يستخدم شهادة الهدف الحقيقية)
وسائل نقل إضافية (تُنفَّذ حسب الحاجة)
- [ ] WebSocket (gorilla/websocket أو مكافئ)
- [ ] gRPC (تدفق ثنائي الاتجاه)
- [ ] HTTPUpgrade (ترقية HTTP/1.1)
- [ ] SplitHTTP (رفع POST + تنزيل GET)
- [ ] mKCP (نقل UDP موثوق)
المرحلة الرابعة: بروتوكولات الوكيل
VLESS (الأولوية: عالية)
- [ ] ترويسة الطلب: الإصدار + UUID + الإضافات + الأمر + العنوان
- [ ] ترويسة الاستجابة: الإصدار + الإضافات
- [ ] ترميز/فك ترميز protobuf للإضافات
- [ ] مُحقق المستخدم (UUID -> بحث الحساب)
- [ ] الوارد: فك ترميز الترويسة، المصادقة، التوزيع
- [ ] الصادر: ترميز الترويسة، اتصال النقل، نسخ ثنائي الاتجاه
- [ ] نظام الرجوع: الاسم -> ALPN -> المسار
- [ ] UDP: حزم بطول مُسبق (2 بايت + الحمولة)
- [ ] كشف ومعالجة Mux
- [ ] كشف XUDP (session=0، network=UDP)
VLESS Vision (الأولوية: عالية للأداء)
- [ ] تتبع TrafficState لكل اتصال
- [ ] XtlsPadding: حشو متغير الطول مع أمر
- [ ] XtlsUnpadding: إزالة الحشو، تحليل الأوامر
- [ ] XtlsFilterTls: كشف إصدار TLS من ServerHello
- [ ] VisionWriter: حشو أثناء المصافحة، التبديل إلى مباشر عند AppData
- [ ] VisionReader: إزالة الحشو، كشف أمر النسخ المباشر
- [ ] دعم النسخ المباشر / splice
Freedom (الأولوية: عالية)
- [ ] اتصال صادر مباشر
- [ ] استراتيجية النطاق: AsIs، UseIP، UseIPv4، UseIPv6
- [ ] تجاوز/إعادة توجيه الوجهة
- [ ] تجزئة TLS ClientHello (خيار Fragment)
VMess
- [ ] ترويسة AEAD: معرّف المصادقة + الطول (AES-GCM) + الأمر (AES-GCM)
- [ ] تشفير الجسم: AES-128-GCM، ChaCha20-Poly1305، بدون تشفير
- [ ] رقم عشوائي لكل رسالة مع عدّاد
- [ ] مصادقة قائمة على الوقت (+-120 ثانية)
Trojan
- [ ] SHA224(password) + CRLF + الأمر + العنوان + CRLF
- [ ] دعم الرجوع
- [ ] تأطير UDP (طول 2 بايت + الحمولة)
Shadowsocks
- [ ] AEAD: AES-128/256-GCM، ChaCha20-Poly1305
- [ ] اشتقاق المفتاح (HKDF)
- [ ] حماية إعادة التشغيل (مرشح الرقم العشوائي)
- [ ] Shadowsocks 2022 (عبر sing-shadowsocks أو إعادة تنفيذ)
بروتوكولات أخرى
- [ ] SOCKS5 (RFC 1928)
- [ ] وكيل HTTP (CONNECT + عادي)
- [ ] Dokodemo-door (وكيل شفاف)
- [ ] Blackhole (حوض إلغاء)
- [ ] Loopback (إعادة الدخول للتوجيه)
المرحلة الخامسة: الميزات المتقدمة
Mux
- [ ] تنسيق الإطار: meta_len + session_id + status + option + address
- [ ] العميل:
ClientManager-> مجمعClientWorker - [ ] الخادم:
ServerWorkerفك التعدد + التوزيع - [ ] إدارة الجلسات (إنشاء، بيانات، إغلاق، إبقاء حي)
XUDP
- [ ] PacketWriter: عنونة لكل حزمة في إطارات mux
- [ ] PacketReader: استخراج وجهة كل حزمة
- [ ] GlobalID: تجزئة BLAKE3 لعنوان المصدر
- [ ] علم وضع Cone في السياق
DNS
- [ ] DNS متعدد الخوادم مع توجيه قائم على النطاقات
- [ ] خلفيات UDP، TCP، DoH، DoQ
- [ ] تخزين مؤقت مع TTL
- [ ] مجمع Fake-IP (LRU، تخصيص قائم على CIDR)
- [ ] التكامل مع استنشاق المُوزّع
TUN
- [ ] إنشاء جهاز TUN خاص بالمنصة
- [ ] مكدس IP في مساحة المستخدم (gVisor أو بديل)
- [ ] مُحوّل TCP (المصافحة -> net.Conn)
- [ ] معالج NAT مخروطي كامل لـ UDP
- [ ] بناء حزمة UDP خام لمسار الإرجاع
الإحصائيات
- [ ] عدّادات حركة مرور لكل مستخدم
- [ ] تتبع المستخدمين المتصلين
- [ ] غلاف
SizeStatWriter
أخرى
- [ ] الوكيل العكسي (Bridge + Portal)
- [ ] المرصد (فحص الحالة الصحية)
- [ ] المتحكم (واجهة إدارة gRPC API)
- [ ] السياسة (المهل الزمنية، أحجام المخازن، لكل مستوى)
المرحلة السادسة: الإعدادات
- [ ] تحليل إعدادات JSON
- [ ] تحويل الإعدادات إلى كائنات وقت التشغيل
- [ ] إنشاء معالجات الوارد/الصادر
- [ ] إعدادات التدفق (النقل + الأمان)
- [ ] إعداد الاستنشاق
- [ ] إعداد قواعد التوجيه
ترتيب الأولويات لمنتج قابل للتطبيق بالحد الأدنى
لوكيل قابل للتطبيق بالحد الأدنى:
- المخزن المؤقت + الأنبوب -- الأساس
- المُوزّع + الموجّه -- خط المعالجة الأساسي (يمكن البدء بتوجيه بسيط قائم على الوسوم)
- نقل TCP + TLS -- الاتصال
- صادر Freedom -- الاتصالات المباشرة
- بروتوكول VLESS -- بروتوكول كامل واحد (وارد + صادر)
- الاستنشاق -- على الأقل TLS SNI للتوجيه القائم على النطاقات
- DNS -- محلل DNS أساسي بـ UDP
هذا يمنحك وكيل VLESS يعمل. أضف الميزات تدريجيًا من هناك.