Skip to content

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

sing-box هو منصة بروكسي شاملة مبنية على مكتبة الشبكات sing. على عكس التصميم المتجانس لـ Xray-core، يفوّض sing-box تنفيذ البروتوكولات إلى مكتبات sing-* الخارجية ويستخدم نظام السياق (context) في Go لحقن التبعيات.

المصدر: box.go، adapter/، route/، common/، protocol/

هيكل المشروع

sing-box/
├── box.go                    # هيكل Box، دورة الحياة (New/PreStart/Start/Close)
├── adapter/                  # الواجهات الأساسية (Inbound, Outbound, Router, إلخ.)
│   ├── inbound/              # مدير الوارد والسجل
│   ├── outbound/             # مدير الصادر والسجل
│   ├── endpoint/             # مدير نقاط النهاية والسجل (WireGuard, Tailscale)
│   └── service/              # مدير الخدمات والسجل
├── route/                    # الموجّه، مدير الاتصالات، مدير الشبكة
│   └── rule/                 # مطابقة القواعد والإجراءات
├── dns/                      # عميل DNS، الموجّه، مدير النقل
│   └── transport/            # تنفيذات نقل DNS
├── protocol/                 # جميع تنفيذات بروتوكولات البروكسي
│   ├── vless/                # VLESS وارد/صادر
│   ├── vmess/                # VMess وارد/صادر
│   ├── trojan/               # Trojan وارد/صادر
│   ├── shadowsocks/          # Shadowsocks (مفرد/متعدد/ترحيل)
│   ├── hysteria2/            # Hysteria2
│   ├── tuic/                 # TUIC
│   ├── tun/                  # TUN وارد
│   ├── group/                # Selector, URLTest
│   └── ...                   # direct, block, dns, socks, http, إلخ.
├── transport/                # وسائل نقل متوافقة مع V2Ray
│   ├── v2raywebsocket/       # WebSocket
│   ├── v2raygrpc/            # gRPC (كامل)
│   ├── v2raygrpclite/        # gRPC (خفيف، بدون تبعيات)
│   ├── v2rayhttp/            # HTTP/2
│   ├── v2rayhttpupgrade/     # HTTP Upgrade
│   ├── v2rayquic/            # QUIC
│   └── wireguard/            # جهاز/مكدس WireGuard
├── common/                   # أدوات مشتركة
│   ├── dialer/               # نظام المتصل (افتراضي، تحويل، حل، TFO)
│   ├── listener/             # مستمعات TCP/UDP
│   ├── sniff/                # كاشفات البروتوكولات
│   ├── tls/                  # TLS, uTLS, REALITY, ECH, kTLS, ACME
│   ├── mux/                  # عميل/موجّه تعدد الإرسال
│   └── ...                   # redir, process, geoip, geosite, إلخ.
├── option/                   # أنواع الإعدادات
├── include/                  # تضمين وسوم البناء
├── experimental/             # Clash API, V2Ray API, ملف التخزين المؤقت, libbox
├── log/                      # نظام التسجيل
├── constant/                 # الثوابت والتعدادات
└── service/                  # تنفيذات الخدمات الخارجية (CCM, OCM, DERP, إلخ.)

التبعيات الرئيسية

الحزمةالغرض
sagernet/singمكتبة الشبكات الأساسية: N.Dialer, buf.Buffer, M.Socksaddr, bufio
sagernet/sing-vmessتنفيذ بروتوكول VLESS + VMess
sagernet/sing-shadowsocksShadowsocks AEAD
sagernet/sing-shadowsocks2Shadowsocks 2022
sagernet/sing-shadowtlsبروتوكول ShadowTLS
sagernet/sing-muxتعدد الإرسال (مبني على smux)
sagernet/sing-quicبروتوكولات مبنية على QUIC (Hysteria2, TUIC)
sagernet/sing-tunجهاز TUN + مكدس IP
sagernet/gvisorمكدس TCP/IP في مساحة المستخدم
sagernet/quic-goتنفيذ QUIC
metacubex/utlsبصمة uTLS
sagernet/wireguard-goتنفيذ WireGuard
sagernet/tailscaleتكامل Tailscale
miekg/dnsتحليل رسائل DNS
anytls/sing-anytlsبروتوكول AnyTLS

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

┌─────────────────────────────────────────────────────────┐
│                        Box                               │
│                                                          │
│  ┌──────────┐    ┌──────────┐    ┌───────────────┐      │
│  │  مدير   │───→│  الموجّه │───→│    مدير      │      │
│  │ الوارد  │    │          │    │   الصادر     │      │
│  └──────────┘    │ matchRule│    └───────────────┘      │
│       │          │  sniff   │          │                 │
│       │          │  resolve │          │                 │
│       ▼          └──────────┘          ▼                 │
│  ┌──────────┐         │          ┌───────────────┐      │
│  │ بروتوكول│    ┌────┴────┐     │   بروتوكول   │      │
│  │  وارد   │    │  موجّه  │     │    صادر      │      │
│  │ (فك)    │    │  DNS    │     │   (تشفير)    │      │
│  └──────────┘    └─────────┘     └───────────────┘      │
│                       │                │                 │
│                  ┌────┴────┐     ┌─────┴──────┐         │
│                  │  نقل   │     │   مدير    │         │
│                  │  DNS    │     │ الاتصالات │         │
│                  │         │     │(حلقة النسخ)│         │
│                  └─────────┘     └────────────┘         │
└─────────────────────────────────────────────────────────┘

تدفق الاتصال

  1. الوارد يقبل الاتصال (TCP) أو الحزمة (UDP)
  2. يفك الوارد ترويسة البروتوكول ويستخرج الوجهة
  3. يستدعي الوارد router.RouteConnectionEx(ctx, conn, metadata, onClose) أو RoutePacketConnectionEx
  4. الموجّه يثري البيانات الوصفية: معلومات العملية، معلومات الجوار، بحث FakeIP، DNS العكسي
  5. الموجّه يتكرر على القواعد بالترتيب، منفذاً الإجراءات:
    • sniff — فحص البيانات لاكتشاف البروتوكول/النطاق
    • resolve — حل DNS للنطاق إلى عناوين IP
    • route — اختيار الصادر (إجراء نهائي)
    • reject — إسقاط الاتصال (إجراء نهائي)
    • hijack-dns — معالجة كاستعلام DNS (إجراء نهائي)
    • bypass — تجاوز التوجيه (إجراء نهائي)
  6. الموجّه يختار الصادر بناءً على القاعدة المطابقة (أو الافتراضي)
  7. متتبعات الاتصال تغلّف الاتصال (إحصائيات، Clash API)
  8. إذا كان الصادر ينفّذ ConnectionHandlerEx، يتعامل معه مباشرة
  9. وإلا، مدير الاتصالات يتصل بالخادم البعيد ويشغّل النسخ ثنائي الاتجاه

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

  1. تفويض المكتبات: تنفيذات البروتوكولات موجودة في مكتبات sing-*. يعمل sing-box كطبقة تنسيق.

  2. حقن التبعيات عبر السياق: جميع الخدمات تُسجّل في السياق عبر service.ContextWith[T]() وتُسترجع عبر service.FromContext[T](). لا توجد كائنات مفردة عامة.

  3. اتصالات مباشرة: على عكس نموذج القارئ/الكاتب المبني على Pipe في Xray-core، يمرر sing-box net.Conn وN.PacketConn مباشرة عبر خط الأنابيب. هذا يتيح عمليات بدون نسخ و splice/sendfile.

  4. توجيه مبني على الإجراءات: القواعد تنتج إجراءات، وليس مجرد وسوم صادرة. هذا يسمح بأن يكون الاستكشاف وحل DNS جزءاً من سلسلة القواعد.

  5. دورة حياة من 4 مراحل: تبدأ المكونات في مراحل (تهيئة ← بدء ← ما بعد البدء ← مُبتدأ) لمعالجة ترتيب التبعيات المعقد بدون رسوم بيانية صريحة للتبعيات.

  6. سجلات قابلة للتوسيع: أنواع الوارد والصادر ونقاط النهاية ونقل DNS والخدمات كلها مسجلة عبر سجلات الأنواع، مما يسهّل إضافة أنواع بروتوكولات جديدة.