شبكة عُقدة

كيف تعمل
// نظرة عامة

هذه الصفحة تشرح كيف تعمل شبكة عُقدة من لحظة التثبيت حتى إرسال البيانات بين العقد. سنغطي توليد المفاتيح، تعريف العقدة، التشفير، التوجيه، وإعادة توجيه الحزم.

الخطوة 1: التثبيت

عند تثبيت عُقدة، يقوم النظام بما يلي:

  1. تثبيت الحزمة: يضع المثبت الملفات التنفيذية في مجلدات النظام
  2. إعداد الخدمة: ينشئ خدمة نظامية للبدء التلقائي (اختياري)
  3. موقع الملفات: uqda (البرنامج الرئيسي) و uqdactl (أداة التحكم)
# مثال تثبيت Linux sudo dpkg -i uqda-debian-amd64.deb # الملفات المثبتة: # /usr/bin/uqda - البرنامج الرئيسي # /usr/bin/uqdactl - أداة التحكم # /etc/uqda/ - مجلد الإعدادات (يُنشأ عند أول تشغيل)
الخطوة 2: التهيئة وتوليد المفاتيح

عند بدء عُقدة لأول مرة:

2.1 توليد زوج المفاتيح

تولد عُقدة زوج مفاتيح مشفرة باستخدام Ed25519:

عملية توليد المفاتيح: 1. توليد زوج مفاتيح Ed25519: ├─ المفتاح الخاص (32 بايت) - يُحفظ سرياً └─ المفتاح العام (32 بايت) - هوية عقدتك 2. تخزين المفتاح الخاص: ├─ الخيار أ: مفتاح عشوائي (وضع الإعداد التلقائي) └─ الخيار ب: تحميل من ملف (وضع الإعداد اليدوي) 3. استخدام المفتاح العام: ├─ هوية العقدة (من أنت) ├─ اشتقاق عنوان IPv6 └─ هدف التشفير (الآخرون يشفرون لك)

2.2 اشتقاق عنوان IPv6

يُشتق عنوان IPv6 الدائم من مفتاحك العام:

الخوارزمية: 1. أخذ المفتاح العام (32 بايت) 2. عكس البتات (عملية NOT) 3. عد البتات 1 الرائدة 4. اقتطاع وتنسيق كـ IPv6 5. النتيجة: عنوان في نطاق 0200::/7 مثال: المفتاح العام: ed25519_public_key_bytes... ↓ عنوان IPv6: 200:xxxx:xxxx:xxxx::1

2.3 إنشاء ملف الإعداد

إذا كنت تستخدم وضع ملف الإعداد:

# توليد الإعداد uqda -genconf > uqda.conf # الملف يحتوي على: { "PrivateKey": "base64_encoded_private_key", "Peers": [], "Listen": [], "AdminListen": "unix:///var/run/uqda.sock" }
الخطوة 3: بدء العقدة

عند تشغيل uqda:

3.1 تهيئة المكونات الأساسية

تسلسل البدء: 1. تحميل الإعداد ├─ قراءة المفتاح الخاص ├─ تحليل قائمة الأقران └─ تعيين مسار مقبس الإدارة 2. تهيئة المكونات الأساسية ├─ موجه Core (محرك التوجيه) ├─ واجهة TUN (شبكة افتراضية) ├─ مدير الروابط (اتصالات الأقران) ├─ معالج البروتوكول (بروتوكول التوجيه) └─ مقبس الإدارة (واجهة التحكم) 3. إنشاء واجهة TUN ├─ Linux: /dev/net/tun ├─ Windows: محول Wintun └─ macOS: واجهة utun 4. تعيين عنوان IPv6 └─ عنوانك المشتق: 200:xxxx:xxxx:xxxx::1

3.2 إعداد واجهة الشبكة

تظهر واجهة TUN في نظامك:

# مثال Linux ip addr show uqda0 # يظهر: inet6 200:xxxx:xxxx:xxxx::1/128 # مثال Windows netsh interface ipv6 show address "Uqda" # يظهر عنوان IPv6 الخاص بك
الخطوة 4: إنشاء اتصالات الأقران

تتصل العقد مع بعضها من خلال الاتصالات:

4.1 الاتصال الثابت (يدوي)

# إضافة قرين uqdactl addPeer tcp://peer.example.com:12345 # ما يحدث: 1. البحث عن DNS (مخزن مؤقت لمدة 5 دقائق) 2. محاولة اتصال TCP (مهلة 3 ثوان) 3. تبادل المصافحة (مهلة 5 ثوان) 4. التحقق من المفاتيح 5. إنشاء الاتصال

4.2 عملية المصافحة

تسلسل المصافحة: العقدة أ العقدة ب │ │ ├─ الاتصال TCP ────────────────>│ │ │ ├─ إرسال البيانات الوصفية ──────>│ │ ├─ المفتاح العام │ │ ├─ إصدار البروتوكول │ │ └─ الأولوية │ │ │ │<─ استقبال البيانات الوصفية ────┤ │ │ ├─ التحقق من الإصدار ───────────>│ │ │ │<─ التحقق من الإصدار ───────────┤ │ │ ├─ الاتصال منشأ <──────────────>│

4.3 اكتشاف البث المتعدد (تلقائي)

على الشبكات المحلية، يمكن للعقد اكتشاف بعضها تلقائياً:

# إشارة البث المتعدد تُرسل إلى: [ff02::114]:9001 # أي عقدة على نفس الشبكة الفرعية تستقبل الإشارة # محاولة اتصال تلقائية تُبدأ # لا حاجة للإعداد!
الخطوة 5: بروتوكول التوجيه

بمجرد الاتصال، تتبادل العقد معلومات التوجيه:

5.1 بناء الشجرة الممتدة

بناء الشجرة: 1. اختيار الجذر └─ العقدة ذات المفتاح العام الأقل تصبح جذراً 2. انتشار الشجرة ├─ الجذر يبث معلومات الشجرة ├─ كل عقدة تحسب المسافة └─ الإحداثيات تُخصص 3. هيكل الشجرة: الجذر (أقل مفتاح) / \ العقدة أ العقدة ب / \ | العقدة ج العقدة د

5.2 توجيه فضاء المفاتيح (DHT)

تتبادل العقد مرشحات bloom تصف المفاتيح القابلة للوصول:

# كل عقدة تحافظ على: - مرشح bloom للمفاتيح القابلة للوصول - إدخالات جدول التوجيه - معلومات المسار # عند إعادة التوجيه: 1. تحقق إذا كانت الوجهة في مرشح bloom المحلي 2. إذا نعم، أعد التوجيه إلى المسار المعروف 3. إذا لا، أعد التوجيه نحو موقع فضاء المفاتيح 4. العقد المتوسطة تحدّث جداول التوجيه
الخطوة 6: التشفير وفك التشفير

جميع حركة المرور مشفرة من طرف إلى طرف:

6.1 عملية التشفير (الإرسال)

خط أنابيب التشفير: بيانات التطبيق (نص عادي) │ ▼ ┌───────────────────┐ │ الحصول على المفتاح│ │ العام للوجهة │ └─────────┬─────────┘ │ ▼ ┌───────────────────┐ │ توليد مفتاح عابر │ │ (X25519) │ └─────────┬─────────┘ │ ▼ ┌───────────────────┐ │ ChaCha20-Poly1305 │ │ التشفير │ │ ├─ تدفق التشفير │ │ └─ علامة المصادقة │ └─────────┬─────────┘ │ ▼ حزمة مشفرة (نص مشفر)

6.2 عملية فك التشفير (الاستقبال)

خط أنابيب فك التشفير: استقبال حزمة مشفرة │ ▼ ┌───────────────────┐ │ استخراج البيانات │ │ الوصفية (مفتاح │ │ عابر) │ └─────────┬─────────┘ │ ▼ ┌───────────────────┐ │ اشتقاق مفتاح │ │ الجلسة (X25519) │ └─────────┬─────────┘ │ ▼ ┌───────────────────┐ │ ChaCha20-Poly1305 │ │ فك التشفير │ │ ├─ التحقق من │ │ العلامة │ │ └─ فك تشفير │ │ البيانات │ └─────────┬─────────┘ │ ▼ بيانات التطبيق (نص عادي)

6.3 تفاصيل تبادل المفاتيح

# لكل حزمة: 1. المرسل يولد زوج مفاتيح عابر (X25519) 2. يستخدم المفتاح العام للوجهة (Ed25519 → X25519) 3. يشتق السر المشترك 4. يشفر بـ ChaCha20-Poly1305 5. المستقبل يستخدم مفتاحه الخاص لفك التشفير # السرية الأمامية: - كل حزمة تستخدم مفتاح عابر جديد - المفتاح المخترق لا يؤثر على حركة المرور السابقة - حركة المرور المستقبلية تبقى آمنة
الخطوة 7: إعادة توجيه الحزم

كيف تسافر الحزم عبر الشبكة:

7.1 إرسال حزمة

رحلة الحزمة: تطبيقك │ ├─ يرسل حزمة IPv6 إلى: 200:yyyy:yyyy:yyyy::1 │ ▼ واجهة TUN (uqda0) │ ├─ عُقدة تستقبل الحزمة │ ▼ محرك التوجيه │ ├─ يبحث عن الوجهة في جدول التوجيه ├─ يجد المسار: أنت → العقدة أ → العقدة ب → الوجهة │ ▼ طبقة التشفير │ ├─ تشفر بمفتاح الوجهة العام │ ▼ مدير الروابط │ ├─ يعيد التوجيه إلى العقدة أ (القفزة الأولى) │ ▼ العقدة أ (متوسطة) │ ├─ تستقبل حزمة مشفرة ├─ لا تستطيع فك التشفير (ليس لديها مفتاح الوجهة) ├─ تبحث عن القفزة التالية: العقدة ب ├─ تعيد التوجيه إلى العقدة ب │ ▼ العقدة ب (متوسطة) │ ├─ تستقبل حزمة مشفرة ├─ لا تستطيع فك التشفير ├─ تعيد التوجيه إلى الوجهة │ ▼ عقدة الوجهة │ ├─ تستقبل حزمة مشفرة ├─ تفك التشفير بمفتاحها الخاص ├─ تسلم إلى التطبيق │ ▼ تطبيق الوجهة

7.2 قرار التوجيه

# خوارزمية التوجيه: 1. تحقق إذا كانت الوجهة قرين مباشر └─ إذا نعم: أرسل مباشرة 2. تحقق من جدول التوجيه للمسار └─ إذا وُجد: أعد التوجيه إلى القفزة التالية 3. استخدم توجيه فضاء المفاتيح (DHT) └─ أعد التوجيه نحو موقع مفتاح الوجهة 4. العودة إلى الشجرة الممتدة └─ استخدم توجيه الشجرة إذا فشل DHT
الخطوة 8: أمثلة من العالم الحقيقي

8.1 إرسال ملف

# السيناريو: إرسال ملف عبر SCP 1. تشغل: scp file.txt user@[200:yyyy:yyyy:yyyy::1]:/home/user/ 2. SCP ينشئ اتصال TCP للوجهة 3. حزم TCP تُرسل إلى واجهة uqda0 4. عُقدة تشفر كل حزمة بمفتاح الوجهة العام 5. الحزم تُوجّه عبر الشبكة (مشفرة في كل قفزة) 6. الوجهة تستقبل حزم مشفرة 7. الوجهة تفك التشفير بمفتاحها الخاص 8. اتصال TCP منشأ، نقل الملف يبدأ

8.2 لعب لعبة

# السيناريو: اتصال لعبة متعددة اللاعبين 1. عميل اللعبة يتصل بالخادم على [200:zzzz:zzzz:zzzz::1] 2. كل حزمة لعبة (الموقع، الإجراءات) تُرسل عبر عُقدة 3. الحزم مشفرة من طرف إلى طرف 4. توجيه بزمن استجابة منخفض (مسار مباشر عند الإمكان) 5. الخادم يستقبل حزم مشفرة، يفك التشفير 6. حالة اللعبة متزامنة بشكل آمن

8.3 Traceroute (اكتشاف المسار)

# شغّل traceroute لرؤية المسار traceroute -6 200:yyyy:yyyy:yyyy::1 # المخرجات تظهر: 1 200:xxxx:xxxx:xxxx::1 (عقدتك) 0.000 ms 2 200:aaaa:aaaa:aaaa::1 (العقدة أ) 15.234 ms 3 200:bbbb:bbbb:bbbb::1 (العقدة ب) 28.567 ms 4 200:yyyy:yyyy:yyyy::1 (الوجهة) 35.123 ms # كل قفزة تمثل: - عقدة تعيد توجيه حزمتك - التشفير/فك التشفير في كل قفزة (للتوجيه) - لكن الحمولة تبقى مشفرة للوجهة
الخطوة 9: صيانة الشبكة

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

إذا فشل رابط:

# ما يحدث: 1. العقدة تكتشف فقدان الاتصال 2. جدول التوجيه يُحدّث 3. مسار بديل يُكتشف 4. حركة المرور تُعاد توجيهها تلقائياً 5. لا حاجة لتدخل يدوي

9.2 مراقبة الاتصال

# تحقق من اتصالاتك uqdactl getPeers # المخرجات: Peer: tcp://peer.example.com:12345 ├─ الحالة: متصل ├─ وقت التشغيل: 2س 15د ├─ بايتات RX: 1.2 GB ├─ بايتات TX: 850 MB └─ زمن الاستجابة: 25ms
// الملخص

التدفق الكامل:

  1. التثبيت: إعداد النظام وتثبيت الملفات التنفيذية
  2. توليد المفاتيح: إنشاء زوج مفاتيح Ed25519، اشتقاق عنوان IPv6
  3. بدء العقدة: إنشاء واجهة TUN، تهيئة المكونات الأساسية
  4. الاتصال بالأقران: إنشاء اتصالات مع عقد أخرى (يدوي أو تلقائي)
  5. التوجيه: اكتشاف طوبولوجيا الشبكة، بناء جداول التوجيه
  6. التشفير: تشفير جميع حركة المرور بمفتاح الوجهة العام
  7. إعادة التوجيه: توجيه الحزم عبر الشبكة، مشفرة في كل قفزة
  8. فك التشفير: الوجهة تفك التشفير بمفتاحها الخاص
  9. التسليم: تسليم البيانات للتطبيق

ميزات الأمان الرئيسية: