Skip to content

نظرة عامة على البنية المعمارية

Xray-core هو منصة وكيل شبكي معيارية مكتوبة بلغة Go. يعالج حركة مرور الشبكة عبر خط أنابيب من الوارد (inbound) ← المُوزِّع (dispatcher) ← المُوجِّه (router) ← الصادر (outbound)، مع بروتوكولات قابلة للتوصيل في كل طرف وطبقة نقل قابلة للتهيئة تحتها.

هيكل المشروع

xray-core/
  core/          # Instance، تحميل الإعدادات، دورة الحياة
  app/           # ميزات على مستوى التطبيق
    dispatcher/  # المُوزِّع المركزي (وارد←توجيه←صادر)
    proxyman/    # مدراء المعالجات الواردة/الصادرة
    router/      # محرك التوجيه، القواعد، موازنات الحمل
    dns/         # مُحلل DNS، Fake-IP
    policy/      # سياسات المهلة الزمنية والمخزن المؤقت
    stats/       # إحصائيات حركة المرور
    commander/   # واجهة إدارة gRPC
    reverse/     # نفق الوكيل العكسي
    observatory/ # فحص الصحة
  common/        # أدوات مساعدة مشتركة
    buf/         # تجمع المخازن المؤقتة (أجزاء بحجم 8KB)
    net/         # بدائيات الشبكة (Address، Destination)
    protocol/    # تجريدات البروتوكول (RequestHeader، AddressParser)
    session/     # سياق الجلسة (Inbound، Outbound، Content)
    mux/         # تعدد إرسال التدفقات
    xudp/        # UDP-over-mux مع عنونة لكل حزمة
    signal/      # Notifier، ActivityTimer، Done
    strmatcher/  # مطابقة النصوص/النطاقات (full، domain، substr، regex، MPH)
    crypto/      # AES، ChaCha20، إلخ.
    singbridge/  # جسر مكتبة sing-box
  features/      # واجهات الميزات (traits/protocols)
    dns/         # واجهات dns.Client، dns.FakeDNSEngine
    inbound/     # واجهات inbound.Manager، inbound.Handler
    outbound/    # واجهات outbound.Manager، outbound.Handler
    routing/     # واجهات routing.Dispatcher، routing.Router
    policy/      # واجهة policy.Manager
    stats/       # واجهة stats.Manager
  proxy/         # تنفيذات البروتوكولات
    vless/       # VLESS (مع Vision، XUDP، reverse)
    vmess/       # VMess (AEAD)
    trojan/      # Trojan
    shadowsocks/ # Shadowsocks (الكلاسيكي)
    shadowsocks_2022/ # Shadowsocks 2022
    socks/       # SOCKS5
    http/        # وكيل HTTP
    dokodemo/    # الوكيل الشفاف (dokodemo-door)
    freedom/     # الصادر المباشر
    blackhole/   # الصادر الفارغ
    dns/         # وكيل DNS
    loopback/    # إعادة الدخول إلى التوجيه
    wireguard/   # نفق WireGuard
    hysteria/    # Hysteria2
    tun/         # جهاز TUN + مكدس IP لـ gVisor
  transport/     # طبقة النقل
    internet/    # سجل النقل + التنفيذات
      tcp/       # TCP
      websocket/ # WebSocket
      grpc/      # gRPC (gun)
      httpupgrade/ # HTTP Upgrade
      splithttp/ # Split HTTP
      kcp/       # mKCP (UDP موثوق)
      tls/       # TLS + uTLS
      reality/   # REALITY
      hysteria/  # QUIC (نقل Hysteria)
      udp/       # مُوزِّع UDP
    pipe/        # أنبوب داخلي (Reader↔Writer)
  infra/conf/    # تحويل إعدادات JSON إلى protobuf

تدفق البيانات عالي المستوى

mermaid
flowchart LR
    Client([العميل]) -->|TCP/UDP| Inbound

    subgraph Xray["نسخة Xray-core"]
        Inbound["معالج الوارد<br/>(VLESS/VMess/Trojan/...)"]
        Dispatcher["المُوزِّع<br/>(الاستشعار + التوجيه)"]
        Router["المُوجِّه<br/>(القواعد + موازن الحمل)"]
        Outbound["معالج الصادر<br/>(Freedom/VLESS/VMess/...)"]

        Inbound -->|"Dispatch(ctx, dest)"| Dispatcher
        Dispatcher -->|"PickRoute(ctx)"| Router
        Router -->|وسم الصادر| Dispatcher
        Dispatcher -->|"Dispatch(ctx, link)"| Outbound
    end

    Outbound -->|النقل| Server([الخادم البعيد])

الاعتماديات الرئيسية

الاعتماديةالغرض
google.golang.org/protobufتسلسل الإعدادات
google.golang.org/grpcنقل gRPC + واجهة Commander
gvisor.dev/gvisorمكدس TCP/IP في مساحة المستخدم (لـ TUN)
github.com/gorilla/websocketنقل WebSocket
github.com/apernet/quic-goنقل QUIC (Hysteria)
github.com/refraction-networking/utlsانتحال بصمة TLS
github.com/xtls/realityبروتوكول REALITY
github.com/sagernet/sing-shadowsocksShadowsocks 2022
github.com/miekg/dnsتحليل رسائل DNS
golang.zx2c4.com/wireguardتنفيذ WireGuard
lukechampine.com/blake3تجزئة BLAKE3 (XUDP GlobalID)

مبادئ التصميم

  1. إعدادات Protobuf أولاً: جميع الإعدادات مُعرَّفة كرسائل protobuf. صيغة JSON ما هي إلا تنسيق تسلسل يُحوَّل إلى protobuf عند التحميل.

  2. سجل الميزات: تُسجِّل المكونات نفسها عبر common.RegisterConfig() مع نوع إعداداتها في protobuf. يحل Instance الاعتماديات تلقائياً.

  3. بنية مبنية على الواجهات: العقود الأساسية مُعرَّفة في features/ كواجهات Go. التنفيذات في app/ و proxy/ تُحقق هذه الواجهات.

  4. تدفق بيانات مبني على الأنابيب: يتم الربط بين الوارد والصادر عبر transport/pipe، مما يوفر قنوات مُخزَّنة مؤقتاً واعية بالضغط العكسي.

  5. اعتماد كبير على السياق: تتدفق بيانات الجلسة الوصفية (المصدر، الوجهة، المستخدم، الوسوم، إعدادات الاستشعار) عبر context.Context باستخدام مفاتيح مُنمَّطة.

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