تطبيق Linux بالتفصيل
هذه هي الغوصة العميقة: كل سطح رئيس في تطبيق Linux، وما يتحكم فيه، وافتراضياته، وكيف تصلحه حين ينكسر شيء. وهي تفترض أنك ثبّتّ التطبيق واتصلت أصلاً. وإن لم تفعل، فابدأ بـالبدء. ولمعرفة كيف تعمل الشبكة خلف التطبيق، اقرأ النظرة العامة.
عميل Linux تطبيقُ سطح مكتب بواجهة GTK4/libadwaita فوق خدمة systemd خفية تعمل بصلاحيات الجذر، يُشحن بصيغة AppImage إضافة إلى ملف .deb. وكل ذلك مفتوح المصدر على github.com/urnetwork/linux.
الإعدادات بنظرة واحدة
الافتراضيات تحميك من دون إعداد. وأدوات التحكم بالاتصال تسكن في درج الاتصال؛ ومشاركة الاتصال تقع في أدوات التحكم الرئيسة؛ وتجاوزُ موقع الجهاز يقع فوق كرة المزوّدين المتصلين.
| الإعداد | الافتراضي | الأثر | الكلفة الرئيسة |
|---|---|---|---|
| وضع الاتصال | تلقائي | ينتقي نوافذ المزوّدين؛ والتلقائي يشغّل الجودة والسرعة معاً | «الويب» أو «البث» يضيّقان إلى نافذة واحدة |
| الإخفاء القوي للهوية | مفعّل | يخفي عنوان IP المصدري عن المزوّد | زمن استجابة أطول |
| تشفير ما بعد الكم | مفعّل | يشفّر من التطبيق حتى المزوّد | يتخطّى المزوّدين الذين يتعذّر ختمهم |
| مفتاح الإيقاف | متوقف | يوقف الارتداد المحلي حين يسقط النفق | لا حركة ما دام المزوّدون مخفقين |
| عنوان IP ثابت | متوقف | مزوّد واحد، وعنوان خروج واحد | لا تجاوز للأعطال |
| حجب الإعلانات والمتتبّعات | متوقف | يرشّح حركة الإعلانات والمتتبّعات | الترشيح قد يكسر بعض المواقع |
| DNS مخصّص | DoH مشفّر عبر النفق | يبقى DNS مشفّراً وداخل النفق | التخفيف منه هو المقايضة |
| مشاركة الاتصال | مطلقاً | تشارك فائض النطاق مخرجاً للآخرين | حركة الغرباء تخرج من عنوانك |
| تجاوز موقع الجهاز | متوقف | التطبيقات التي تسأل GeoClue ترى مدينة المزوّد الذي بقيت عليه أطول مدة | يحتاج إلى GeoClue 2.7+؛ ويؤثر في كل تطبيق على الجهاز |
| قواعد التقسيم (نطاق/عنوان IP) | فارغة | الوجهات المدرجة تستخدم اتصالك المحلي | تلك الحركة بلا حماية |
تحفّظات ترافق الجدول:
- إيقاف الإخفاء القوي للهوية هو الوضع المباشر: يتحدث العميل إلى المزوّد رأساً ويصير أسرع، ويرى ذلك المزوّد حينها عنوانك الحقيقي. والافتراضي يحمي هويتك. فأنفقه عن قصد.
- ومفتاح الإيقاف يقرّر أيضاً ما يحدث لحزمة يُسقطها مرشِّح الأمان (انظر مشاركة الاتصال): فمع تفعيله تُحجب حجباً تاماً؛ ومع إيقافه تغادر عبر مسارك العادي.
- تقسيم النفق حسب التطبيق غير متاح على Linux. وقواعد التقسيم على مستوى النطاق وعنوان IP.
- وحذف حسابك غير متاح على Linux أيضاً. افعل ذلك في تطبيق الويب، الذي يدير الحساب نفسه.
قسمة الخدمة الخفية
برنامجان، ومستويا امتياز:
urnetworkdخدمة خفية تعمل بصلاحيات الجذر ويديرهاurnetworkd.service، بلا أي تبعيات للواجهة الرسومية إطلاقاً. وهي تضمّن كائنDeviceLocalمن SDK، وتفتح/dev/net/tunوتملكه، وتضخّ الحزم عبر حلقة الإدخال/الإخراج في SDK، وتطبّق المسارات وDNS. ويثبّتها ملف.debأو أرشيف التثبيت.urnetworkهو تطبيق سطح المكتب، بـgtkmm-4.0 وlibadwaita، يعمل بحساب مستخدمك العادي ويُشحن بصيغة AppImage. وهو يمسك بكائنDeviceRemote: أي عرضٍ لجهاز الخدمة الخفية، لا جهازاً خاصاً به.
ويتحدثان عبر قناتين:
- RPC الجهاز. يقود
DeviceRemoteفي التطبيق كائنَDeviceLocalفي الخدمة الخفية عبر RPC على TLS بمصادقة متبادلة في SDK على الاسترجاع المحلي،127.0.0.1:12025، وهو النقل نفسه الذي يستخدمه تطبيق Windows. - مقبس التحكم. مقبس نطاق unix على
/run/urnetwork/control.sockيحمل دورة حياة النفق: رفعُ النفق، وهدمه، وضبط مشاركة الاتصال، والإبلاغ عن حالة الخدمة الخفية.
ومقبس unix هو حدّ التفويض الحقيقي. فـTCP على الاسترجاع المحلي يستطيع أي عملية محلية بلوغه، ولهذا فإن RPC الجهاز مصادَق عليه متبادلاً بالشهادات. لكن لا شيء يبدأ نفقاً من دون المرور بمقبس unix، حيث تخبر النواةُ نفسها الخدمةَ الخفية أيُّ مستخدم يسأل (SO_PEERCRED، يُفحص قبل تحليل بايت واحد من الطلب، والتفويض على معرّف المستخدم لا على معرّف العملية أبداً). والمجلد 0750 root:urnetwork، والمقبس 0660، والقاعدة: الجذر، أو عضو في مجموعة urnetwork.
ونقل RPC الجهاز إلى نقل unix هو أيضاً متابعة مسجّلة في SDK؛ وملاحظات التصميم تنصّ على حدّ الاسترجاع المحلي بدل معاملته على أنه خاص.
يجب أن يتطابق النصفان
Linux هي أول منصة في URnetwork يُحدَّث فيها التطبيق والنفق مستقلَّين: فصورة AppImage تحدّث نفسها بحسابك، والخدمة الخفية تُحدَّث عبر apt. ولذلك يفحص التطبيق شيئين عند الاتصال: إصدار بروتوكول التحكم، وأن يحمل النصفان نسخة SDK نفسها بالضبط. وعدم التطابق يُرفض من البداية برسالة مميّزة (الخدمة لا تعمل، والخدمة قديمة، والتطبيق قديم، والنسختان مختلفتان) لأن لكل حالة إصلاحاً مختلفاً، ولأن نفقاً يعمل نصف عمل بصمت أسوأ من خطأ.
كيف تُثبَّت القطع
يأتي النصفان من صفحة الإصدارات: .deb و.install.tar.gz و.AppImage، على amd64 وarm64، بحدٍّ أدنى من glibc 2.35 يعني Ubuntu 22.04 أو Debian 12 فأحدث. ولا يوجد إدراج في متجر.
وتملك الحزمة كل ما هو ذو امتياز وثابت: الخدمة الخفية على /usr/lib/urnetwork/urnetworkd، ووحدة systemd الخاصة بها، ومدخل سطح المكتب، والأيقونات، وبيانات خريطة العالم التي ترسم منها الكرة الأرضية، والترجمات، وأداة إطلاق على /usr/bin/urnetwork.
ولا تثبّت الحزمةُ صورةَ AppImage للواجهة الرسومية أبداً. فهي تسكن في مجلد المنزل لديك (~/.local/lib/urnetwork/URnetwork.AppImage)، قابلةً للكتابة من المستخدم كي تستطيع استبدال نفسها من دون صلاحيات الجذر. وتبحث أداة الإطلاق في قائمة مواضع ثابتة ($URNETWORK_APPIMAGE، ثم ~/.local/lib/urnetwork/، ثم ~/Applications/، ثم /usr/lib/urnetwork/، ثم أي urnetwork-gui على $PATH) وتشغّل أول ما تجد؛ وإن لم يكن أي منها مثبتاً، طبعت تلميحاً من سطر واحد يخبرك من أين تحصل على واحدة.
وتعمل الخدمة الخفية بالامتياز الذي تحتاج إليه وتتخلى عمّا لا تحتاج إليه: NoNewPrivileges، وProtectHome (فهي بلا واجهة ويجب ألا تقرأ مجلدات منازل المستخدمين أبداً)، وPrivateTmp، ومجلدات حالة وسجلات للجذر وحده. وهي مرتَّبة مقابل network-pre.target، وهو الموضع الذي تحتاج إليه شبكة VPN كي تتصرف قبل أن ترتفع الشبكة، وهي دائمة التشغيل لا مُفعَّلة بالمقبس، لأن وحدة تبدأ بتكاسل لا تستطيع المشاركة في ذلك الترتيب أصلاً.
المسارات
حين يرتفع النفق، لا تستبدل الخدمة الخفية مسارك الافتراضي. بل تزايد عليه، كما يفعل wg-quick:
- تضيف مسارات عبر واجهة النفق (
urnet0) تغطي مساحة IPv4 كلها باستثناء مدَيات الشبكة المحلية الخاصة: 10.0.0.0/8 و172.16.0.0/12 و192.168.0.0/16. - وتلك أكثر تحديداً من افتراضي
0.0.0.0/0القائم لديك، فتفوز من دون أن تمسّه. والهدم مجرّد إزالتها؛ وتوجيهك الأصلي لا يُعدَّل أبداً. - واستثناء المدَيات الخاصة يُبقي طابعتك وجهاز NAS وخدماتك المحلية تعمل وأنت متصل، وهو السلوك نفسه في عملاء Android وApple وWindows.
ويُقال لـNetworkManager أن يرفع يديه: فالواجهة urnet0 مُوسَمة بأنها غير مُدارة عبر ملف إضافة في إعداد NetworkManager وقاعدة udev، فلا يصارع مديرُ شبكة سطح المكتب الخدمةَ الخفية على الواجهة أبداً.
DNS
يُضبط DNS على وصلة النفق عبر systemd-resolved (resolvectl)، وهو المحلِّل القياسي على أسطح مكتب Ubuntu: تُوجَّه محلِّلات الوصلة إلى محلِّلات الشبكة، مع ~. كي تسلك الاستعلامات طريقها عبره، ويُعاد كل شيء عند الهدم. وليس كل نظام يشغّل resolved، ولذلك فالسلوك بذل جهد بحكم التصميم:
- مع systemd-resolved: يُلتقط DNS لوصلة النفق ويُستعاد.
- من دونه: يظل النفق يوجّه، لكن DNS على تلك الوصلة لا يُلتقط. وتبقى استعلاماتك تستخدم أي محلِّل كان لدى النظام.
ودقّة أخرى: نطاق بحث يقدّمه DHCP (lan أو home) تطابقُه أطول من ~. وسيغلبه للأسماء في ذلك النطاق. فإن كنت تشغّل إعداد محلِّلات غير اعتيادي، فافحص إلى أين يذهب DNS لديك فعلاً.
وورقة DNS المخصّص الخاصة بالتطبيق هي عنصر التحكم الأكثر معنى. فهي تحرّر إعدادات المحلِّلات في SDK، وافتراضيها DNS مشفّر عبر HTTPS يُحلّ عبر النفق. وهي تعرض DoH وحلاً غير مشفّر، بعيداً أو محلياً، وقوائم خوادم قابلة للتحرير لكل عائلة، ومفتاح احتياطي لـDNS المحلي يسابق محلِّلاً محلياً بينما يبدأ النفق فلا تتعطل عمليات البحث، وتوصيات إقليمية للأماكن التي يُعرف أن أشد الإعدادات صرامة ينكسر فيها، وإجراءً واحداً لاستعادة الافتراضيات الآمنة.
علبة النظام
أيقونة الحالة هي StatusNotifierItem مع قائمة com.canonical.dbusmenu، يُتكلَّم بها مباشرة عبر GDBus: وهو البروتوكول الذي تدعمه KDE ومعظم اللوحات أصلاً، وتدعمه GNOME عبر امتداد AppIndicator. وإن لم يوجد مضيف علبة، لم يعرض التطبيق أيقونة بدل أن يخفق.
وإغلاق النافذة يخفيها إلى العلبة ويُبقي النفق يعمل. وتحمل القائمة الاتصال/قطع الاتصال، والإظهار، والإنهاء. والإنهاء هنا هو الخروج الحقيقي: فهو ينهي الجلسة ويُنزل النفق. ويوماً بيوم أنت تريد زر الإغلاق لا الإنهاء.
النافذة
تسجيل الدخول أولاً، ثم العرض الرئيس: عنصر التحكم بالاتصال، وكرة المزوّدين، والدرج. ويأخذ تسجيلُ الدخول رمزاً عبر البريد الإلكتروني أو الهاتف، أو إنشاء حساب (Create account)، أو رمز مصادقة مولَّداً على جهاز مسجَّل الدخول أصلاً، أو توقيعَ محفظة عبر Solana (Phantom أو Solflare) أو Bittensor. ويقع هناك أيضاً زرٌّ قديم اسمه جرّب وضع الضيف (Try Guest Mode). وهو يسكّ حساباً عادياً دائماً على الخادم، لكن هذا التطبيق يرمي عبارة الاستعادة التي تعود معه، فاسلك أحد المسارات الأخرى إن أردت أن تستطيع استعادة الحساب لاحقاً.
كرة المزوّدين مرسومة من طوبولوجيا عالم مرفقة بالتطبيق. ولا تُجلب أي بلاطات خريطة، فلا يغادر جهازك شيء عن الخريطة التي تنظر إليها.
درج الاتصال يحمل الجلسة:
- بطاقة أدوات التحكم بالاتصال. الموقع المختار، ووضع اتصال هو تلقائي (Auto) أو الويب (Web) أو البث (Streaming)، وأربعة مفاتيح: عنوان IP ثابت، والإخفاء القوي للهوية، وتشفير ما بعد الكم، ومفتاح الإيقاف. والوضع ينتقي أي نافذة مزوّدين تعمل: فـالويب هي نافذة الجودة (2–6 مزوّدين في آن واحد)، والبث نافذة السرعة (1–2)، والتلقائي يشغّل الاثنتين جنباً إلى جنب، ولهذا يكون في الجلسة العادية عادةً 3–8 مزوّدين مفتوحين، لا واحد. والإخفاء القوي للهوية هو ما يمنع أي مسار مباشر بين العميل والمزوّد، فلا يرى أي مزوّد عنوانك الحقيقي أبداً؛ وإيقافه هو مقايضة الوضع المباشر من الجدول أعلاه. وتشفير ما بعد الكم يختم الجلسة نفسها (انظر لوحة الهوية أدناه).
- بطاقتا إحصاءات العميل والإحصاءات المحلية مع مخططات حية، وكل واحدة تفتح ورقة تفصيل.
- حالة DNS المخصّص، وهي تفتح محرّر المحلِّلات المذكور أعلاه.
- حجب الإعلانات والمتتبّعات.
- الخطة والاستخدام. فئتك، وشريط المستخدَم/المعلّق/المتاح، وصفّا الحصة اليومية والإحالة، واحصل على UR Pro (Get UR Pro)، واستبدال رمز رصيد.
- لوحة هوية ما بعد الكم (أدناه).
الأوراق، وكل واحدة شاشة حقيقية لا هيكل فارغ:
- المواقع (Locations). أقسام SDK المصنَّفة: أنداد شبكتك المتصلون أولاً، ثم أفضل المتاح، ثم الدول مع أعداد المزوّدين الحية. والكتابة في مربع البحث تضيف أفضل التطابقات إضافة إلى المناطق والمدن والأجهزة. والمدينة شيء تبحث عنه هنا، لا شيء تمرّر إليه.
- المزوّدون المتصلون (Connected providers). كرة أرضية فوق صفّ لكل مزوّد في نافذتك الآن، الأقدم اتصالاً أولاً، ومعه معرّف العميل، والمدينة/المنطقة/الدولة، والإحداثيات، والمدة، وإزالة داخل الصف.
- العقود (Contracts). عقود النقل الحية خلف جلستك، كومة لكل نِدّ، والإرسال والاستقبال منفصلان.
- قواعد التقسيم (Split rules). قواعد على مستوى النطاق وعنوان IP تُجبر حركة بعينها على اتصالك المحلي، فوق تغذية حيّة بما يجري التصرف فيه.
- استبدال رمز (Redeem code). طبّق رمز رصيد، مع تاريخ ما استبدلته.
- الترقية (Upgrade). UR Pro شهرياً أو سنوياً عبر دفع Stripe، مضمَّناً في التطبيق حيث يتوفر WebKitGTK في النظام، ومرتدّاً إلى متصفحك عدا ذلك، لأن مسار الدفع يجب ألا يخفق إخفاقاً قاطعاً أبداً.
ولا توجد اليوم شاشة منفصلة للحساب أو المحفظة أو لوحة الصدارة على Linux. فالخطة والرصيد يسكنان في الدرج وورقة الاستبدال، وإعدادات الحساب تسكن في تطبيق الويب على ur.io. وتسجيل الخروج في العرض الرئيس.
تجاوز موقع الجهاز
ينال Linux نسخة حقيقية مما يسميه Android «مزامنة موقع الجهاز»: فالتطبيقات التي تسأل النظام أين أنت يمكن أن تُخبَر بإحداثيات المزوّد الذي بقيت متصلاً به أطول مدة، بدل موقعك الفعلي. ويقع المفتاح فوق كرة المزوّدين المتصلين، ومعه دليل إعداد، وهو متوقف حتى تفعّله.
والآلية ضيّقة. فلـGeoClue، وهي الخدمة التي تسألها تطبيقات سطح المكتب عن الموقع، مصدرٌ ساكن يقرأ موقعاً ثابتاً من /etc/geolocation ويراقب الملف بحثاً عن التغييرات. وذلك الملف هو نقطة الحقن الوحيدة، وهو يسكن تحت /etc، ولذلك تتولى الخدمةُ الخفية الكتابةَ عبر قناة التحكم نفسها؛ والواجهة الرسومية لا تلمسه أبداً ولا تحتاج إلى الجذر أبداً.
ويذكر الدليل حدوده مباشرة. فهو يحتاج إلى GeoClue 2.7.0 فأحدث، وهي ليست على كل نظام؛ فـUbuntu 22.04 وDebian 12 يشحنان نسخة أقدم ولا يمكن أن يفيا بذلك أبداً. وهو لا يحرّك إلا ما تبلّغ عنه GeoClue: فتتبعه إعدادات GNOME وخرائطها، وFirefox، وتطبيقات Flatpak وSnap المعزولة. أما Chrome وKDE Plasma فلا يسألان GeoClue إطلاقاً، وكل ما يستنتج موقعك من عنوان IP لديك يبقى بلا مساس، وFirefox يرتدّ إلى بحثه الخاص إن أجاب النظام ببطء. كما أنه يغيّر الموقع المُبلَّغ عنه لكل تطبيق على الجهاز، لا لـURnetwork وحده. وكل ما عدا ذلك في التطبيق يعمل بصرف النظر.
مشاركة الاتصال
المشاركة متوقفة افتراضياً، وتعرض أدواتُ التحكم الرئيسة تلقائي (Auto) أو دائماً (Always) أو الشبكة (Network) — أجهزة حسابك أنت وحدها — أو مطلقاً (Never). ويشارك المزوّدون في بروتوكول UR؛ ويوثّق ur.xyz طريقة عمل المكافآت.
والذي يحميك حين تشارك هو طبقة ip_security المفتوحة المصدر في محرك الاتصال. تُجري فحصاً عميقاً للحزم عند منفذ خروجك أنت وتُسقط الحركة من فئة DMCA (تواقيع BitTorrent ومشاركة الملفات المتتبِّعة للحالة، وإسقاطات البروتوكولات المبهمة) والحركة من فئة CFAA (أنماط الهجوم والاقتحام) قبل أن تغادر جهازك. والمرشِّح نفسه يعمل أيضاً على مسار إرسالك أنت بوصفك مستخدماً عادياً، سواء فعّلت المشاركة يوماً أم لا، فحركتك محكومٌ عليها على جهازك قبل أن تصل إلى أي مزوّد.
وعند التطابق تُسقط الحزمة، بلا تسجيل وجهة ولا نطاق ولا محتويات. وتوقيع BitTorrent على حركة تحملها لشخص آخر يرفع إضافةً إلى ذلك علامة إساءة إلى المشغّل لا تحمل إلا معرّف الجهاز المرسِل وقيمة نعم/لا، ولا يشحن المشغّل لها أي معالج اليوم. والتدفق المشفّر المبهم إسقاطٌ بسيط لا يُبلغ عن شيء إطلاقاً. والختم لا يتجاوز المرشِّح، لأنه يعمل حيث تخرج الحركة. ومفتاح الإيقاف يقرّر مصير حزمة من فئة الإسقاط قادمة من جهازك أنت: فمع إيقافه تخرج عبر اتصالك المحلي؛ ومع تفعيله تتوقف.
لوحة هوية ما بعد الكم
يعرض الدرج هوية جلسة هذا الجهاز: أيقونة هوية (identicon)، وتجزئة المفتاح المعيارية ومعرّف العميل (انقر لتنسخ)، ومجموعةً من هويات المزوّدين الذين أقمت معهم جلسات موثَّقة، وقائمة هويات المزوّدين الكاملة، وحوارَ مشاركة لمقارنة بصمتك خارج القناة.
وما يفعله الإعداد: تشفير ما بعد الكم يُشحن مفعّلاً، وما دام مفعّلاً يختم عميلك الحركة من طرف إلى طرف حتى المزوّد عبر جلسة مُتفاوَض عليها بـX25519MLKEM768 (هجين تقليدي مع ML-KEM). وتلك المرحلة المختومة هي التي تجعل القفزة الوسطى عمياء: فالمشغّل يحمل بايتات لا يستطيع قراءتها. وهو يفشل مغلقاً: فما دام الإعداد مفعّلاً لا يرسل العميل بيانات التطبيق ولا يقبلها بلا تشفير، فالمزوّد الذي يتعذّر إقامة تلك الجلسة معه يُتخطّى بدل أن يُستعمل بلا ختم. والكلفة مزوّد تخسره، لا تشفير تخسره، ولا يمكن خفض مستواك في صمت. كل إصدارات المزوّد الحالية تفعّل الجانب المجيب، فالتخطّي نادر. وبإيقاف الإعداد يعود بوسع الحركة أن تسلك مسار TLS القياسي إلى المنصة. وتوقيعات الهوية تبقى Ed25519، والتشفير AES-256-GCM. و«ما بعد الكم» يعني تبادل المفاتيح هذا، لا شيئاً أوسع.
ماذا تفعل الشبكة في الأسفل
تقطع حركتك أربع مراحل: أنت ← الموسّع ← المشغّل ← المزوّد ← الإنترنت. والموسّع قفزة وصول تمرّر جلستك المشفّرة من دون أن تقرأها؛ وبوصفه قفزتك الأولى، فهو يرى عنوانك. وتشرح النظرة العامة المسار كاملاً، وسببَ توقفه عند أربع مراحل، ونوافذَ المزوّدين.
والذي يهمّ في أدوات تحكم هذا التطبيق هو القسمة بين طرفي الترحيل. فالمزوّد لا يعرف من أنت أبداً، لأن المشغّل يقف في الوسط. والمشغّل لا يستطيع قراءة ما ترسله، لأن تشفير ما بعد الكم يختم الجلسة من طرف إلى طرف حتى المزوّد افتراضياً. وكلتا الخاصيتين قائمة في تثبيت خارج من الصندوق، فلا يجمع أي طرف واحد بين هويتك ونشاطك. والحالات الثلاث التي ينتجها المفتاحان:
| الوضع | ما يراه المشغّل | ما يراه المزوّد | الافتراضي والتوافر |
|---|---|---|---|
| مُرحَّل مختوم | حسابك واتصال المصدر، وأي المزوّدين أنت عليهم، ونص مشفّر مع توقيته وحجمه | الوجهات التي يُخرجها ومعرّف جهاز/عقد، وليس عنوان IP الحقيقي الخاص بك | الافتراضي المشحون: تشفير ما بعد الكم، مفعّل في درج الاتصال |
| مُرحَّل قياسي | حسابك واتصال المصدر، وأي المزوّدين أنت عليهم، والوجهات وبايتات الحزم في الداخل | الوجهات التي يُخرجها ومعرّف جهاز/عقد، وليس عنوان IP الحقيقي الخاص بك | فقط عند إيقاف تشفير ما بعد الكم |
| مباشر | دور أقل في الترحيل | عنوان IP الحقيقي الخاص بك والوجهات التي يُخرجها | يُفعَّل يدوياً: بإيقاف الإخفاء القوي للهوية |
ويُخضِع نموذج التهديد هذه الصفوف لخصوم مسمّين، ويصرّح بموضع إخفاق كل صف.
وعلى جانب المشغّل ليس هناك ما يُحتفظ به إلا القليل: فسجلات الاتصال تحمل تجزئة أحادية الاتجاه بمفتاح (مشوَّشة بمفتاح سري واحد) لكتلة عنوانك لا العنوان نفسه، وسجل العقود يحمل معرّفات العملاء وعدد البايتات بلا أي وجهة ولا مضيف ولا URL ولا نطاق في أي مكان، ومسار البيانات لا يسجّل شيئاً. نعم، يسجّل بحثٌ جغرافي مدينةً تقريبية لكل اتصال؛ أما ما تبلغه عبره فلا يُسجَّل إطلاقاً. ولا يغطي أي تدقيق مستقل البروتوكول ولا كود خوادم المشغّل (فتقييما 2025 الخارجيان يغطيان سطحين آخرين: اختبار اختراق لتطبيق الويب وواجهة API، وتقييم Leviathan MASA AL2 المجتاز لتطبيق Android، لا لعميل Linux). أما الفحوص الموجودة بدل ذلك فهي المصدر المفتوح نفسه، القابل للفحص المستمر من أي شخص، وتصميمُ المخرج: فالخروج أسطولٌ لا مركزي من مزوّدين يعملون كلٌّ على حدة، لا وصيٌّ واحد يمسك بكل شيء. الحد: لم يُقس قط مدى استقلال ذلك الأسطول فعلاً، ولا شيء يمنع المشغّل من تشغيل مزوّدين خاصين به (نموذج التهديد §6.1).
الحدود
- مفتاح الإيقاف يُشحن متوقفاً. وهو مفتاح حقيقي في درج الاتصال، لكن حتى تفعّله، ترتدّ الحركة إلى اتصالك العادي كلما لم يكن أي مزوّد مرفوعاً بدل أن تتوقف. والدرج يطبّقه حيّاً عبر RPC الجهاز، وتستعيد الخدمة الخفية اختيارك عند البدء التالي.
- IPv4 وحده عبر النفق. فـIPv6 لا يُوجَّه عبره، ولذلك على شبكة مفعَّلة الـIPv6 يستطيع موقع قادر على v6 أن يرى عنوانك الحقيقي. عطّل IPv6 على الاتصال إن أردت أن يخرج كل شيء عبر مزوّد.
- لا تقسيم للنفق حسب التطبيق. فالقواعد على مستوى النطاق وعنوان IP.
- لا تسجيل دخول عبر Google أو Apple.
- التقاط DNS يتوقف على systemd-resolved، كما هو موصوف أعلاه.
استكشاف الأخطاء وإصلاحها
«خدمة نظام URnetwork لا تعمل»
افحص الخدمة الخفية ومقبسها:
systemctl status urnetworkd
journalctl -u urnetworkd -fتروي الخدمة الخفية ما تضبطه وما تستعيده، فهذا أول مكان تبحث فيه عن مشاكل رفع النفق والمسارات وDNS. أما سجلات الواجهة الرسومية فتبقى في جلسة مستخدمك، منفصلةً عن النصف ذي الامتياز، وهذا هو مغزى القسمة.
وإن كانت الخدمة الخفية تعمل وما زال التطبيق لا يستطيع بلوغها، فأنت على الأرجح لست في مجموعة urnetwork: وسيخبرك id -nG بذلك. أضف نفسك بأمر sudo usermod -aG urnetwork "$USER" ثم سجّل الخروج والدخول من جديد.
«الخدمة قديمة» / «نسختان مختلفتان»
حدّث النصفين إلى الإصدار نفسه: الخدمة الخفية بتثبيت ملف .deb الأحدث (أو بإعادة تشغيل install.sh من الأرشيف الأحدث)، وصورةَ AppImage في ~/.local/lib/urnetwork/. والفحص موجود كي يقول التثبيتُ المُرقّى نصفياً ذلك بدل أن يسيء التصرف بصمت.
صورة AppImage لا تبدأ
لا يشحن Ubuntu 22.04 فأحدث حزمة libfuse2 افتراضياً، وصور AppImage تحتاج إليها. وملف .deb يعلن تلك التبعية، فتثبيت حزمة الخدمة الخفية يحلّ ذلك عادةً؛ وإلا فثبّت libfuse2 (أو libfuse2t64 على الإصدارات الأحدث). وتحقّق أيضاً من أن الملف قابل للتنفيذ.
لا أيقونة في علبة النظام
سطحُ مكتبك بلا مضيف StatusNotifierItem. على GNOME، ثبّت امتداد AppIndicator؛ أما KDE ومعظم اللوحات فتدعمه أصلاً. والتطبيق يعمل جيداً من دونه: فإغلاق النافذة يخفيها فحسب، وتعيد فتحها من قائمة التطبيقات.
روابط urnetwork:// لا تفعل شيئاً
يعود تسجيل الدخول بالمحفظة عبر رابط urnetwork://، وهو يحتاج إلى تحديث قاعدة بيانات سطح المكتب بعد التثبيت. نفّذ update-desktop-database ~/.local/share/applications (أو المسار النظامي بصلاحية sudo). والتثبيت المحزَّم يُطلق ذلك عنك؛ أما التثبيت اليدوي فقد لا يكون فعل.
الواجهة موجودة لكن لا شيء يُوجَّه
تحقّق من أن NetworkManager لا يدير urnet0. فالحزمة تشحن ملف إضافة في الإعداد وقاعدة udev توسمها بأنها غير مُدارة، وكلاهما يحتاج إلى إعادة تحميل (nmcli general reload conf وudevadm control --reload)، وهو ما يفعله المثبِّت.
في أماكن أخرى
تشرح النظرة العامة الشبكة من طرف إلى طرف: المزوّدون، والعقود، وما يستطيع كل طرف رؤيته وما لا يستطيع، والتشفير. وتجيب الأسئلة الشائعة عن الأسئلة المتكررة. والمنصات الأخرى: Android وiOS وmacOS وWindows والمتصفح.