# امتداد المتصفح: الجولة

الامتداد هو URnetwork داخل المتصفح، وتطبيقُ الويب على ur.io هو لوحة التحكم
فيه: منتج واحد بنصفين. وهذه الصفحة هي الغوصة العميقة: آلية البروكسي في كل
متصفح، وأدوات التحكم بافتراضياتها المشحونة، وما يَعِد به مفتاح الإيقاف وما
لا يَعِد به، وما تفحصه حين ينكسر شيء. ولمعرفة الشبكة خلفه، ومن هم
المزوّدون، وما يستطيع كل طرف رؤيته، اقرأ [النظرة العامة](/docs/overview).
ولروابط المتاجر وتسجيل الدخول وأول اتصال، ابدأ
بـ[البدء في المتصفح](/docs/getting-started-browser).

والإطار الذي عليك أن تحفظه دائماً: **هذا بروكسي متصفح، لا شبكة VPN.**
والبروكسي وسيطٌ يجلب المواقع للمتصفح، فترى المواقعُ عنوانه بدل عنوانك.
والامتداد يضبط إعدادات البروكسي الخاصة بالمتصفح نفسه، فهو يحكم بالضبط ما
يرسله ذلك المتصفح، لا أكثر. المغطّى: كل تبويب وكل نافذة في ذلك المتصفح،
والتصفح المتخفي أيضاً، على Chromium دائماً، وعلى Firefox حالما تسمح له في
النوافذ الخاصة. وغير المغطّى: المتصفحات الأخرى، وتطبيق بريدك، وتحديثات
النظام، وكل ما عدا ذلك، بلا حماية وبلا كسر على السواء. ثبّته لكل متصفح؛
أما تغطية الجهاز كله فعملُ تطبيقات URnetwork ‏(Android وiOS وmacOS وWindows
وLinux): الحساب نفسه، ومفتاح الإيقاف نفسه، بطبقة واحدة أدنى.

![النافذة المنبثقة للامتداد](/docs-assets/connect-extension.png)

## الإعدادات بنظرة واحدة

يُبقي الامتداد سطحه صغيراً عن قصد. عنصرا تحكم اثنان، وكلاهما في النافذة
المنبثقة:

| الإعداد | الافتراضي | الأثر | الكلفة الرئيسة |
|---|---|---|---|
| مفتاح الإيقاف | مفعّل | يحجب حركة المتصفح حين يسقط البروكسي، بدل الارتداد إلى اتصالك المباشر | التبويبات تُظهر أخطاء أثناء الانقطاع |
| تجاوز تحديد الموقع الجغرافي | متوقف | تُبلّغ واجهة تحديد الموقع في المتصفح عن مدينة مخرجك بدل موضعك الحقيقي | المواقع التي تريدها أن ترى موقعك الحقيقي تحتاج إلى إيقافه؛ وبقاؤه محدَّثاً يحتاج إلى تبويب ur.io مفتوح |

تحفّظات ترافق الجدول:

- مفتاحان من مفاتيح التطبيقات لا نظير لهما في المتصفح، وذلك بحكم التصميم.
  فلا يوجد هنا **تشفير ما بعد الكم**، لأن الامتداد بلا جلسة بين العميل
  والمزوّد يختمها؛ والاستثناء كاملاً تحت «جمع البيانات» أدناه. ولا يوجد
  مفتاح **الإخفاء القوي للهوية**، لأن الوضع المباشر مُجبَر على الإيقاف على
  جهاز البروكسي المستضاف الذي يعمل عليه الامتداد: فلا يمكن أبداً أن يُسلَّم
  أي مزوّد عنوانك الحقيقي.
- ومفتاح الإيقاف يبقى عبر عمليات إعادة تشغيل المتصفح، فالانقطاع يُبقيك
  محجوباً لا مكشوفاً، حتى تقطع الاتصال أو يتعافى المسار.

## كيف يعمل

الامتداد Manifest V3 على كل متصفح، لكن سباكة البروكسي تختلف، لأن واجهات
المتصفحات تختلف:

- **Chrome وEdge** (ومتصفحات عائلة Chromium عموماً) تستخدم واجهة إعدادات
  البروكسي. فيثبّت الامتداد سكربت PAC مولَّداً، وهو ملف قواعد صغير يستشيره
  المتصفح ليقرّر إلى أين يذهب كل طلب، ويرسل حركة المتصفح إلى نقاط نهاية
  بروكسي URnetwork المجهَّزة لك. وضبطُه يستحوذ على إعداد البروكسي في
  المتصفح، وهذا أيضاً سبب استحالة تعايش امتدادَي بروكسي (انظر استكشاف
  الأخطاء). وهو لا يمسّ إعدادات نظام التشغيل أبداً ويتراجع نظيفاً: فقطع
  الاتصال يعيد الاتصال المباشر، وإزالة التثبيت تُلغي الاستحواذ.
- **Firefox** بلا تسليم إعدادات مكافئ، ولذلك يستخدم `proxy.onRequest`:
  يُستشار الامتداد عند كل طلب فيجيب بقائمة البروكسيات المجهَّزة كلها، فلا
  يترك بروكسي واحد غير قابل للوصول الطلبَ عالقاً. ولا يُلحَق `direct` بتلك
  القائمة إلا إن كنت قد أوقفت مفتاح الإيقاف؛ فإن كان مسلَّحاً، انتهت القائمة
  عند آخر بروكسي وأخفق الانقطاع الكامل.

ولا توجد نسخة لـSafari، لأن Safari يفتقر إلى هذه الواجهات. وعلى أجهزة Apple
يغطي التطبيق كل شيء، ومنه Safari.

ويخرج التصفح عبر نافذة صغيرة من المزوّدين في آن واحد: أجهزةُ أعضاء اختار
أصحابها المشاركة ويشاركون في [بروتوكول UR](https://ur.xyz). و«عنوان IP
لمخرجك» متعدد، وانتماءُ كل موقع يُبقي كل موقع على مخرج واحد، فيرى مصرفك
عنواناً واحداً ثابتاً.

ويُشحن SDK الخاص بـURnetwork بصيغة WebAssembly داخل حزمة الامتداد.
فالتجهيز، وسرد المواقع، واستدعاءات API، كلها تعمل محلياً. ولا يُجلب شيء
قابل للتنفيذ وقت التشغيل؛ فما راجعه المتجر هو ما يعمل.

**وتطبيق الويب هو لوحة التحكم بالامتداد؛ وهما منتج واحد.** سجّل الدخول مرة
واحدة على [ur.io](https://ur.io) وتتحدث الصفحة والامتداد عبر جسر موثَّق:
بروتوكول أفعال قصير (`SETUP` و`CONNECT` و`DISCONNECT` و`SET_LOCATION`،
ومفتاح الإيقاف، ومزامنة الموقع الجغرافي) يحمله `window.postMessage`، وهي
القناة الوحيدة التي تعمل على Chrome وEdge وBrave وFirefox على السواء.
و`SETUP` يسلّم الجلسة المسجَّل دخولها رأساً، ولهذا لا يطلب منك الإعدادُ من
التطبيق رمز مصادقة أبداً. وقسمة العمل حقيقية: فالامتداد يسكّ جلسة البروكسي
ويثبّت بروكسي المتصفح، بينما يمسك التطبيق بالجهاز الحيّ. وتغييرُ الموقع في
التطبيق يعيد توجيهه من دون إعادة اتصال في المتصفح، وكل سطح يعرض ما فعلته في
الآخر.

**والجسر ضيّق عن قصد.** فهو لا يعمل إلا على صفحات `ur.io`
و`app.ur.network`؛ ولا يستطيع أي موقع آخر التحدث إلى الامتداد. وسكربت واحد
آخر يُحمَّل فعلاً في كل صفحة، وهو تجاوز تحديد الموقع الجغرافي، ويبقى خاملاً
والدوال الأصلية بلا مساس، ما لم تفعّله (أدناه).

ويشترط تسجيل الدخول حساباً، لأن الاستخدام مقيس لكل حساب: رمزٌ عبر البريد
الإلكتروني أو الهاتف، أو أحد خيارات SSO في ur.io، أو توقيع محفظة، أو رمز
مصادقة مولَّد على جهاز مسجَّل الدخول أصلاً. والطريقان الخاليان من البريد
الإلكتروني هنا هما المحفظة ورمز المصادقة؛ أما الحساب الفوري بلا بريد
إلكتروني وبنقرة واحدة فيُنشأ في تطبيقات الهاتف وسطح المكتب، والامتداد يلتقط
ذلك الحساب كأي حساب آخر. والمجانية حصة بيانات يومية؛ وPro حصة شهرية كبيرة
(5 دولارات شهرياً أو 40 دولاراً سنوياً؛ والأرقام الحالية على
ur.io/products).

## دلالات مفتاح الإيقاف

ما يفعله: إن انقطع اتصال البروكسي ومفتاح الإيقاف مفعّل، حجب الامتدادُ حركةَ
المتصفح بدل أن يدع المتصفح يرتد بهدوء إلى اتصالك المباشر ويكشف عنوانك
الحقيقي في منتصف الجلسة.

- وهو **مفعّل افتراضياً**، السطح الوحيد في URnetwork الذي يُشحن مسلَّحاً.
- والإنفاذ هو قاعدة البروكسي في المتصفح نفسه: فحين يكون مسلَّحاً لا يوجد
  مخرج «وإلا فاذهب مباشرة»، فتخفق الطلبات بدل أن ترتد. وهو يبقى عبر عمليات
  إعادة تشغيل المتصفح. فتعود محجوباً، لا مكشوفاً.
- وإن انطلق، توقف هذا المتصفح وحده (تُظهر التبويبات أخطاءً؛ والنافذة
  المنبثقة تعرض السبب). أما بقية حاسوبك فلم تمرّ عبره أصلاً.
- وإيقافه يعني الفشل المفتوح: فالاتصال المنقطع يعيدك إلى التصفح المباشر،
  ظاهراً في النافذة المنبثقة لكن صامتاً في تبويباتك. وهذا مقبول فقط حيث
  يكون التسريب إزعاجاً لا ضرراً.
- وحدّ النطاق: هو يحجب حركة *المتصفح*، وهو كل ما يستطيع امتداد أن يحكمه؛
  وليس جدار حماية نظامياً. والعناوين المحلية (localhost والطابعات) تتجاوزه
  عن قصد، وWebRTC (الصوت والفيديو داخل المتصفح) يستطيع فتح اتصالات تتجاهل
  إعدادات البروكسي، وهي ثغرة في كل امتداد بروكسي؛ والمتصفحات تستطيع تقييده.

## تجاوز تحديد الموقع الجغرافي

إشارتان: عنوان IP لديك يقول الآن أمستردام، لكن واجهة تحديد الموقع في
المتصفح، المُجابة من إشارات نظام التشغيل مثل شبكات Wi-Fi القريبة، ما زالت
تبلّغ عن مكان جسدك. والمواقع التي تقارن الاثنين ترى التناقض. والتجاوز يصلح
الإشارة الثانية فتتفق الروايتان:

- **متوقف افتراضياً.** لا يتغير شيء حتى تفعّله في النافذة المنبثقة.
- ومفعَّلاً، يجيب عند `document_start` **في كل الإطارات**، فتعطي واجهةُ
  تحديد الموقع موقعَ مخرجك قبل أن يستطيع أي سكربت في الصفحة أن يسأل، بما في
  ذلك إطارات iframe التي تحاول أن تسبقه. والإحداثيات هي مدينة أقدم مزوّد
  متصل لديك، وهي تصل إلى الامتداد عبر جسر التطبيق: فالامتداد لا يملك جهازاً
  خاصاً به، ولذلك فتبويب ur.io المفتوح هو ما يُبقي الموضع محدَّثاً.
- ومعطَّلاً، لا يقول شيئاً إطلاقاً: فتحتفظ الصفحة بتحديد موقعها الأصلي، ولا
  يُسلَّم أي موقع إشارة جديدة بأنك تشغّل امتداداً. أوقفه حين *تريد* من
  المواقع أن ترى موقعك الحقيقي (الخرائط، والتوصيل).

## نبضات السلامة والحالة المتدهورة

وأنت متصل، يجلب الامتداد نقطة نهاية خفيفة (`my-ip-info` على واجهة API في
URnetwork) عبر البروكسي كل خمس دقائق، وهي مهملة حتى في مواجهة الحصة
المجانية. وذلك يثبت أن المسار يعمل من طرف إلى طرف، لا أن الإعدادات طُبِّقت
فحسب:

- **إخفاقان متتاليان**: تصير الحالة **متدهورة** (degraded). أنت ما زلت
  مضبوطاً، لكن تدفق الحركة غير مؤكَّد. وتعرض النافذة المنبثقة مؤشّر عدم
  استقرار.
- **ثلاثة إخفاقات متتالية**: إعادة اتصال تلقائية، مع تراجع تصاعدي (من 2
  ثانية يتضاعف حتى 30 ثانية، وخمس محاولات)، وإعادةُ تجهيز البروكسيات عند
  الحاجة.
- ونجاح واحد في أي لحظة يعيد الحالة إلى «متصل». وتتجنب مهلةُ سماح بعد
  الاتصال التذبذبَ بينما يستقر الاتصال الأول.

والتدهور ليس تسريباً. فأنت ما زلت موجَّهاً إلى البروكسي، ومع التسليح يحجب
المسارُ الميت بدل أن يكشف. وهو ليس خطأً تصلحه؛ بل هو الامتداد يخبرك باكراً،
وعادةً عن شبكة متقلبة بينك وبين البروكسي.

## جمع البيانات: لا شيء

- إدراج Firefox يصرّح بذلك في البيان، بصيغة مقروءة آلياً:
  `data_collection_permissions` هي **none**. وهذه عبارة يفرضها المتجر، لا
  وعدٌ في صفحة خصوصية.
- والامتداد لا يتحدث إلا إلى واجهة API في URnetwork لتجهيز بروكسياتك،
  وهي الاستدعاءات نفسها التي يجريها أي عميل. لا تحليلات، ولا قياس عن بُعد،
  ولا جمع لتاريخ التصفح في أي مكان.
- **أذونات المضيفين تختلف باختلاف المتصفح، لسبب.** فعلى Chrome يطلب
  الامتداد الوصول إلى مضيفي واجهة API في URnetwork وحدهم
  (`api.bringyour.com` و`api-v4.bringyour.com`)؛ فواجهة البروكسي القائمة
  على PAC لا تحتاج إلى رؤية طلباتك. أما على Firefox فيحتاج الامتداد إلى
  `<all_urls>`: لأن `proxy.onRequest` يستشير الامتداد عند كل طلب قد يوجّهه،
  وFirefox يشترط الوصول إلى المضيفين كي يعمل ذلك. فالإذن الأوسع هناك هو
  ثمن واجهة البروكسي في Firefox، لا استيلاءً على بيانات.
- **لم يقيّم أي طرف ثالث الامتداد.** فتطبيق URnetwork على Android اجتاز
  تقييم MASA بمستوى AL2 من Leviathan Security Group في مايو 2025، وهو قائمة
  الفحص الأمنية الثابتة من Google لتطبيقات الهاتف، وأجرت شركة مستقلة اختبار
  اختراق لتطبيق الويب وواجهة API في أبريل–مايو 2025؛ ولا يغطي أي منهما
  الامتداد، ولا يغطي أي تدقيق مستقل البروتوكول ولا كود خوادم المشغّل. وما
  تقدّمه هذه الصفحة بدلاً من ذلك قابل للتكذيب: فتلك الأذونات مقروءة في
  نسختك المثبَّتة أنت، ولا يُجلب شيء وقت التشغيل، والمصدر علني. ادعاءات
  تستطيع فحصها، لا شهادة.

وما تحتفظ به الخدمة: حسابك وسجل عدد بايتات لكل جهاز (وهذا للحصص ولقياس
المزوّدين)، لا الوجهات ولا عناوين URL أبداً؛ وعنوان عميل يُحفظ بصيغة تجزئة
أحادية الاتجاه بمفتاح لكتلة عنوانك لا العنوان نفسه؛ ومدينة تقريبية من بحث
جغرافي. ويُخرج المزوّدون الحركةَ من دون أن يعرفوا عنوانك الحقيقي، ولا يرون
إلا بيانات وصفية من مستوى شركة الإنترنت (أسماء المواقع، لا الصفحات ولا كلمات
المرور أبداً، فتلك تبقى مختومة بـHTTPS)؛ والمواقع لا ترى إلا المخرج.

لكن كن دقيقاً بشأن الوسط. فللشبكة ثلاثة أوضاع، والمتصفح لا يشغل منها إلا
واحداً:

| الوضع | ما يراه المشغّل | ما يراه المزوّد | المتاح هنا |
|---|---|---|---|
| **مُرحَّل قياسي** | حسابك واتصال المصدر، وأي المزوّدين أنت عليهم، والوجهات وبايتات الحزم في الداخل | الوجهات التي يُخرجها ومعرّف جهاز/عقد، **وليس** عنوان IP الحقيقي الخاص بك | **نعم: وهو وضع المتصفح الوحيد** |
| **مُرحَّل مختوم** | الشيء نفسه، لكن نصاً مشفّراً مع توقيته وحجمه بدل الوجهات | كما أعلاه | لا: فجلسة التشفير حتى المزوّد في التطبيقات، المفعّلة هناك افتراضياً، لا نظير لها في المتصفح |
| **مباشر** | دور أقل في الترحيل | **عنوان IP الحقيقي الخاص بك** والوجهات التي يُخرجها | لا: مُجبَر على الإيقاف على جهاز البروكسي المستضاف الذي يعمل عليه الامتداد |

وذلك الصف الأول هو موضع المتصفح، والتباين مع التطبيقات حادّ لا ليّن: فهي
تختم جلسة العميل↔المزوّد افتراضياً، والمتصفح بلا جلسة هناك يختمها. ولا يمكن
أن تكون له واحدة. فالمتصفح يتكلم بروتوكول البروكسي الخاص به ولا يستطيع
تشغيل محرك الشبكة، ولذلك يعمل جهاز عميلك عن بُعد داخل المشغّل، الذي يترجم
بين البروتوكولين — وأي ختم يبدأ من ذلك الجهاز سيبدأ عند المشغّل، وهو الطرف
الذي وُجد الختم لحجبه. لقد قايض التنفيذ الختمَ بالوصول إلى المتصفح أصلاً.
والضمانة هنا ضمانةُ تخزين لا ضمانةُ تشفير. فأي بروكسي متصفح يسلّم كل وجهة
إلى نقطة النهاية التي يتصل بها، فالمشغّل يتولى وجهاتك في العبور؛ والذي يقف
خلف ذلك مسارُ بيانات بروكسي لا يكتب أي سجل إطلاقاً، مثبَّتٌ باختبار انحدار
في المصدر المفتوح، وسجلٌّ لا مكان فيه لوجهة. ومفتاح **الإخفاء القوي
للهوية** في التطبيقات غائب كذلك وغير لازم كذلك: فمع إجبار الوضع المباشر على
الإيقاف، لا يمكن أبداً أن يُسلَّم أي مزوّد عنوانك الحقيقي.

ولمعرفة ما تستطيع الشبكة نفسها رؤيته وما لا تستطيع حالما تتدفق حركتك، اقرأ
[النظرة العامة](/docs/overview). ويذهب [نموذج التهديد](/docs/threat-model)
أبعد ويسمّي الختمَ الغائب في مسار المتصفح إخفاقاً من إخفاقاته هو.

## استكشاف الأخطاء وإصلاحها

### «تعذّر تجهيز أي اتصالات بروكسي. افحص حسابك.»

طلب الامتداد اعتمادات بروكسي من واجهة API فلم يُمنح أياً منها. والسبب في
الغالب الأعم حالة في الحساب:

1. تأكّد من أنك تستطيع تسجيل الدخول على [ur.io](https://ur.io) وافحص خطتك.
   والسبب المعتاد حصة يومية مجانية نفدت (وهي تتجدد يومياً).
2. افحص ما إذا كانت أجهزة أخرى قد استنفدت حدَّ العملاء المتزامنين في خطتك؛
   واقطع اتصال أحدها.
3. سجّل الخروج من الامتداد ثم الدخول من جديد لتحديث الاعتمادات.

### «فُقد الاتصال. أعد الاتصال من فضلك.»

أخفقت فحوص السلامة مراراً ونفدت محاولات إعادة الاتصال التلقائية. والأرجح أن
شبكتك الأساسية تغيّرت (انتقلت بين الشبكات، أو نام الحاسوب المحمول، أو شبكة
Wi-Fi معادية). أعد الاتصال من النافذة المنبثقة؛ وإن تكرر ذلك على شبكة
بعينها، فقد تكون تلك الشبكة تحجب منافذ البروكسي.

### امتداد آخر يتنازع على البروكسي

لا يستطيع التحكم بإعدادات البروكسي في المتصفح إلا امتداد واحد في كل مرة
(وعلى Chrome يفوز أحدثُها تثبيتاً). شغّل امتداد VPN أو بروكسي آخر فيتبادلان
الإعداد ذهاباً وإياباً، ويبدو كلاهما مكسوراً. والنافذة المنبثقة تقول ذلك
حين تفقد التحكم، و`chrome://settings` يسمّي الممسك الحالي؛ فعطّل الآخر.
وعلى Firefox، افحص وجود إضافات أخرى مثبَّتة لها إذن بروكسي.

### البوابات الأسيرة

شبكات Wi-Fi في الفنادق والمطارات تشترط أن تسجّل الدخول عبر صفحة بوابة *قبل*
أن يعمل الإنترنت، ومع رفع البروكسي (وخصوصاً مسلَّحاً)، لا تستطيع البوابة
التحميل. ولا يمكن أن تعلق: فقطع الاتصال محلي ولا يحتاج إلى شبكة. اقطع اتصال
الامتداد، وأتمّ تسجيل الدخول في البوابة، ثم أعد الاتصال. وهذا ملازم لكل
بروكسي وكل VPN، وليس خللاً في الامتداد.

### قراءة الحالة

مؤشّر الحالة في النافذة المنبثقة هو أسرع تشخيص:

- **خامل** (Idle): مسجَّل الدخول، غير متصل. والتصفح مباشر.
- **يتصل** (Connecting) مع دوّامة: يجهّز البروكسيات ويطبّق الإعدادات.
- **متصل** (Connected): مضبوط وفُحصت سلامته حديثاً.
- **متدهور** (Degraded) مع أيقونة عدم استقرار: مضبوط، لكن نبضات السلامة
  تخفق؛ فتوقّع إعادة اتصال إن استمر.
- **يعيد الاتصال** (Reconnecting): تعافٍ تلقائي جارٍ؛ دعه وشأنه.
- **خطأ** (Error): إحدى الرسائل أعلاه، ومعها الإصلاح المدرج هنا.

## إلى أين تذهب بعد

- [البدء في المتصفح](/docs/getting-started-browser): روابط المتاجر، وتسجيل
  الدخول، وأول اتصال، ومنها ملاحظة النافذة الخاصة.
- [كيف تعمل URnetwork](/docs/overview): الشبكة خلف النافذة المنبثقة، ومن
  أين يأتي المزوّدون.
- [الأسئلة الشائعة](/docs/faq): الخطط والحصص وأسئلة الحساب.
