Skip to content

قائمة مراجعة التنفيذ

دليل تفصيلي خطوة بخطوة لإعادة تنفيذ 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
  • [ ] تحويل الإعدادات إلى كائنات وقت التشغيل
  • [ ] إنشاء معالجات الوارد/الصادر
  • [ ] إعدادات التدفق (النقل + الأمان)
  • [ ] إعداد الاستنشاق
  • [ ] إعداد قواعد التوجيه

ترتيب الأولويات لمنتج قابل للتطبيق بالحد الأدنى

لوكيل قابل للتطبيق بالحد الأدنى:

  1. المخزن المؤقت + الأنبوب -- الأساس
  2. المُوزّع + الموجّه -- خط المعالجة الأساسي (يمكن البدء بتوجيه بسيط قائم على الوسوم)
  3. نقل TCP + TLS -- الاتصال
  4. صادر Freedom -- الاتصالات المباشرة
  5. بروتوكول VLESS -- بروتوكول كامل واحد (وارد + صادر)
  6. الاستنشاق -- على الأقل TLS SNI للتوجيه القائم على النطاقات
  7. DNS -- محلل DNS أساسي بـ UDP

هذا يمنحك وكيل VLESS يعمل. أضف الميزات تدريجيًا من هناك.

تحليل تقني لأغراض إعادة التنفيذ.