وحدة تحكم الويب
يقدّم Chute وحدة تحكم إدارية عبر HTTP من داخل المحرك العامل. وهي الواجهة الوحيدة المتطابقة على كل المنصّات، ولذلك يشير إليها هذا الدليل كلّما احتاج شيء إلى أن يُرى لا أن يُضبط: مسار طلب، أو إعادة كتابة لا تعمل، أو سبب رفض اتصال.
هذه ليست Chute Dashboard. فـ Dashboard تطبيق macOS مستقل يتصل بنسخة من Chute، أما وحدة التحكم الموصوفة هنا فيقدّمها المحرك نفسه وتُفتح بمتصفّح.
التفعيل والدخول
تحتاج وحدة التحكم إلى external-http-controller في قسم [General]، وهي معطّلة افتراضياً:
[General]
external-http-controller = 127.0.0.1:9090
external-http-ui = true
الطلبات التي تبقيها وحدة التحكم مقيمة أثناء الخدمة محدودة بـ 4 ميغابايت على macOS و1 ميغابايت على iOS وtvOS وAndroid.
الوصول مُصادَق عليه. وإن لم تضبط external-http-secret فإن Chute يولّد رمزاً ويحفظه في ملف control-token، فيُعاد استخدام الرمز نفسه بعد إعادة التشغيل — ولذا فالطريقة العملية للدخول أن يسلّمك التطبيق العنوان ومعه الرمز جاهزاً. تلتقط الصفحة الرمز من ذلك العنوان عند التحميل وتحتفظ به في localStorage المتصفّح، فيسجّل المتصفّح الدخول مرة واحدة. ولكل منصّة مدخل لذلك؛ انظر فتح وحدة تحكم الويب.
Overview (نظرة عامة)
هل الخدمة تعمل، ومنذ متى، وكم تستهلك من الذاكرة، وعناوين ومنافذ مستمعَي HTTP و SOCKS، ومسارات الملفات التي يستخدمها هذا التشغيل. وحين لا تدري إلى أي نسخة يشير تبويب المتصفّح، هذه الصفحة تعرّفها.
Traffic (حركة المرور)
البايتات التراكمية والسرعة الحالية للمحرك كله، ورسم بياني لتاريخ السرعة، وتفصيل حسب المهايئ. استخدمها للإجابة عن «هل يتحرك شيء أصلاً»، ولمعرفة أي مخرج يحمل الحمل حين تختار مجموعة سياسات بين عدة مخارج.
Connections (الاتصالات)
الصفحة التي ستقضي فيها أطول وقت. وفيها تبويبان:
- Current (الحالية) — الاتصالات المفتوحة الآن.
- History (السجل) — الاتصالات المغلقة، الأحدث أولاً، تُقرأ من سجلات هذا التشغيل.
يحمل كل صف المضيف والمنفذ والنوع والسياسة المختارة والقاعدة المطابِقة والمدة وعدّادات البايت. وتُحسب المدة منذ أن رأى تبويب المتصفّح هذا الاتصالَ للمرة الأولى، لا منذ فتح الاتصال، فلا معنى لها إلا في تبويب Current (الحالية). ويوسّع Inspect (فحص) الصف في مكانه ليجيب عن لماذا ذهب هذا الطلب إلى هناك:
| الحقل | ماذا يخبرك |
|---|---|
| القاعدة المطابقة / مصدر القاعدة | سطر القاعدة الذي حسم هذا الاتصال، ومن أي قسم جاء |
| السياسة المختارة / المحوّل | السياسة التي اختارتها القاعدة، والمخرج الذي حملها فعلاً |
| سلسلة البروكسيات | للاتصال المار عبر سلسلة: المسار من هذا الجهاز إلى المخرج، مثل Airport/HK-01 → Landing — كل قفزة بالترتيب، والمجموعة يتبعها اختيارها الحالي بعد شرطة مائلة. - للاتصال الذي استخدم سياسة واحدة |
| مصدر DNS | أي محلِّل أجاب، وهل كانت إصابة في الذاكرة المؤقتة |
| إعادات الكتابة المطبّقة | قواعد إعادة الكتابة أو الاستجابة الوهمية التي غيّرت هذه الرسالة — بنصّ القاعدة نفسها؛ يُحتفظ بـ 16 إصابة على الأكثر لكل اتصال، وبعدها يذكر الصف كم واحدة أخرى غير معروضة |
| سبب الإغلاق / ملاحظة | لماذا انتهى، وما أراد المحرك قوله عنه |
وتحت الجدول يعرض الصف الموسَّع الطلب والاستجابة الملتقطَين — الترويسات والمحتوى كما مرّا على الخط (بعد فك التشفير للمضيفين المشمولين بـفك تشفير HTTPS).
المحتويات تشترط تسجيل الحركة
المحتويات موجودة فقط إن كان Chute قد التقطها. فعّل التسجيل قبل إعادة إنتاج المشكلة:
replica = trueفي[General]، أو- Chute Mac: شريط القوائم ← Traffic Capture، أو
- عبر الـ API:
PUT /api/features/record-trafficبالمحتوى{"enabled": true}.
من دونه تظهر الاتصالات كاملةً ببيانات توجيهها وتوقيتاتها — الناقص هو الحمولات وحدها. وعلى iOS و tvOS و Android يتطلب التسجيل ترخيصاً فعّالاً كذلك: بدونه لا يُلتقط شيء مهما كان المفتاح المشغَّل. ويزيد قسم [Replica] من تضييق ما يُلتقط — وكل مرشّحاته نافذة، بما فيها hide-crashlytics-request — فالطلب الذي يُستبعد هناك لن يكون له محتوى أيضاً.
التصدير إلى HAR
يُنزّل زر Export HAR (تصدير HAR) في صفحة Connections التبويب الحالي كملف HAR 1.2 — بحدّ 100 مُدخل، وهو الافتراضي لنقطة النهاية (يرفعه limit على نقطة النهاية إلى 300 على الأكثر)، بينما يعرض تبويب History نفسه حتى 200. و HAR صيغة قياسية: افتحه في أدوات مطوّري المتصفّح (لوحة الشبكة ← استيراد) أو في أدوات مثل Charles و Proxyman.
يحمل الملف ما تتوقّعه تلك الأدوات — ترويسات الطلب والاستجابة، والتوقيتات، والمحتويات إن كان التسجيل مفعّلاً — إضافة إلى كائن _kl لكل مُدخل يحمل ما لا حقل له في HAR: السياسة المختارة، والقاعدة المطابِقة، وعمليات إعادة الكتابة التي عملت. وتأتي أزمنة الإرسال والاستقبال من طوابع الالتقاط نفسها لا من استنتاج، فهي ذات معنى. وللتطبيقات مخارجها الخاصة أيضاً: يقدّم لوحة المعلومات (Dashboard) في Chute iOS الخيارين Export as HAR و Export All as HAR (يولّدهما المحرك بالصيغة نفسها)، ونافذة تفاصيل الاتصال في Chute Mac فيها زر Requests & History الذي يفتح وحدة التحكم — صفحتها الرئيسية لا ذلك الاتصال بعينه. المُدخل اتصال واحد: على اتصال keep-alive حمل عدة طلبات، يصف التصدير الرسالة الأولى ويذكر كم بايتاً من الرسائل اللاحقة أغفل.
DNS
الذاكرة المؤقتة للمحلِّل مع الخادم الذي أجاب عن كل سجل، والمدخلات الآتية من [Host]، وملف hosts الخاص بالنظام. ويمسح Clear Cache (مسح الذاكرة المؤقتة) السجلات الديناميكية؛ ولا يوجد هنا حذف لسجل بعينه — فذلك متاح فقط عبر DELETE /api/dns/records/:domain في الـ API.
Policies (السياسات)
وضع الخروج (Rule / Global / Direct — القواعد / عام / مباشر) وكل مجموعة سياسات مع اختيارها الحالي، باستثناء المجموعات الموسومة بـ hidden=true. وتغيير الاختيار هنا يسري فوراً على المحرك العامل — وهو الإجراء نفسه الذي تفعله بتبديل مجموعة داخل التطبيقات.
Rules (القواعد)
تتقاسم هذه الصفحة فئتان مختلفتان، وسلوكهما ليس واحداً.
قواعد التوجيه — كل قاعدة يمر عليها المطابِق، مرتّبةً بترتيب التقييم: قواعد Tailscale التلقائية، ثم قواعد الوحدات، ثم قسم [Rule] في الإعداد، وتنتهي بـ FINAL. للقراءة فقط، لأنها تأتي من ملف الإعدادات ووحداته.
قواعد إعادة الكتابة والاستجابة الوهمية — إعادة كتابة الرابط وإعادة كتابة الترويسات وإعادة كتابة المحتوى والاستجابة الوهمية، إضافةً إلى قائمة مضيفي MitM. هذه يمكن إضافتها وحذفها هنا:
- الصق القاعدة تماماً كما كنت ستكتبها في ملف الإعدادات ثم اضغط Add (إضافة). والسطر الذي يتعذّر تحليله يُرفض مع اعتراض المحلِّل بدل أن يُخزَّن — فالقاعدة التي لا تطابق أبداً بلا عرَض، ومن الأفضل أن تعرف الآن.
- يحذف Remove (إزالة) قاعدة واحدة، ويُفرغ Clear (مسح) عائلة كاملة.
- التغييرات تعيش في المحرك العامل فقط. لا تُكتب في ملف الإعدادات، وتعيدها إعادة التحميل أو التشغيل إلى ما يقوله الملف. استخدم هذا لتجربة قاعدة، ثم اكتب السطر الناجح في الملف.
مطابقات إعادة الكتابة والاستجابة الوهمية — كل قاعدة إعادة كتابة أو استجابة وهمية عملت في هذا التشغيل، مع عدّادها ووقت آخر مطابقة؛ يتتبّع الجدول حتى 512 قاعدة مختلفة، ويذكر كم قاعدة أخرى عملت بعد ذلك دون تتبّع. هذا الجدول هو الجواب عن «إعادة الكتابة عندي لا تفعل شيئاً»: القاعدة التي لا تظهر هنا لم تطابق قط، وهي مشكلة غير تلك التي طابقت ولم تُحدث أثراً مرئياً. وللتفريق بينهما انظر لماذا لا تفعل إعادة الكتابة شيئاً؟.
مجموعات القواعد — كل مزوّد قواعد وكل مجموعة قواعد تشير إليها الإعدادات، مع حالة كل منها: عدد القواعد التي أضافها بعد التحميل أو سبب عدم التحميل. الحِمل الذي يتجاوز حدّ المنصة، وعنوان URL لا يستجيب، ومحتوى تعذّر تحليله تظهر هنا بدلاً من ألّا تطابق شيئاً بصمت؛ وتوفّر GET /api/rules/providers القائمة نفسها.
Diagnostics (التشخيص)
ما الذي يحتفظ به المحرك، وكيف انتهى التشغيل السابق، ومجموعة فحوص يمكنك إطلاقها عليه.
- Footprint / CPU / Uptime / Live flows / Superseded flows / Engine generation (استهلاك الذاكرة / CPU / مدة التشغيل / التدفقات النشطة / تدفقات من جيل سابق / جيل المحرك) — شكل هذا التشغيل الآن. والبصمة التي تتصاعد بينما يبقى عدد التدفقات ثابتاً تستحق البحث؛ وعلى iOS و tvOS هي أيضاً ما يراقبه النظام قبل استرجاع الامتداد.
- Previous exit (الخروج السابق) — إمّا
Clean(سليم) أوTerminated unexpectedly(أُنهي بشكل غير متوقع) أوKilled for memory(أُوقف بسبب الذاكرة)، مع معرّف التشغيل السابق ومدّته وذروة بصمته. اقرأ هذا أولاً حين «ينهار» Chute: فـ Killed for memory (أُوقف بسبب الذاكرة) تعني أن النظام استرجع Chute لا أن Chute أخفق، وهذا يغيّر ما تبحث عنه. - Refusals (حالات الرفض) — جدول بما رفضه المحرك ولماذا، معدوداً حسب المورد والسبب. وحين يسقط اتصال ولا يفسّره شيء آخر، فالسبب عادةً هنا.
- Run a probe (تشغيل فحص) — الوصول (ICMP، أو TCP إن أعطيت منفذاً)، واستعلام DNS عبر المحلِّل العامل، واختبار إنترنت مباشر دون بروكسي، وفحص العنوان (على محركات Apple يسمّى عنوان الشبكة ويبلّغ عن عناوين الجهاز نفسه، وعلى Android يسمّى IP الخروج ويبلّغ عن العنوان العام الذي تخرج منه حركة المرور)، واختبار زمن استجابة سياسة. كلّها محدودة وتجيب مرة واحدة بالضبط. واسم السياسة غير المعرّف يُرفض بدل أن يُقاس، فيعود الخطأ المطبعي خطأً مطبعياً.
- Events (الأحداث) — لحظات هذا التشغيل الجديرة بالانتباه: الإخفاقات الجماعية، وتغيّر العنوان، وما شابه.
- Tailscale — حالة المحرك الحيّة حين يكون قسم
[Tailscale]مضبوطاً، ولم يتم ضبط قسم [Tailscale] حين لا يوجد، وهي إجابة طبيعية. - Download diagnostic bundle (تنزيل حزمة التشخيص) — أرشيف واحد منقّح تُرفقه برسالة الدعم. وما فيه موصوف في إرسال حزمة تشخيصية.
Config (الإعدادات)
الإعداد العامل معروضاً في صندوق قابل للتحرير، مع Reload (إعادة تحميل) لتطبيق ما فيه.
الإعداد المعروض هنا منزوع الأسرار. فكلمات المرور وسرّ التحكم وعبارة مرور الـ CA ومفاتيح WireGuard وما شابهها تظهر بصيغة
<redacted>. و Reload (إعادة تحميل) يطبّق ما في الصندوق حرفياً، فإعادة تحميل النص كما هو معروض تستبدل تلك الأسرار بالكلمة<redacted>نفسها داخل المحرك العامل، وستبدأ السياسات التي تحتاجها بالفشل. أما ملف الإعداد فلا يُمسّ، ويكفي إعادة اختيار الإعداد لاستعادته.استخدم هذه الصفحة لقراءة الإعداد ولتطبيق تعديل كتبته بالكامل بنفسك. ولتحرير الملف ذاته استخدم المحرّر داخل التطبيقات.
Logs (السجلات)
متابعة حيّة لسجل المحرك، ملوّنة حسب المستوى، مع Pause (إيقاف مؤقت) ريثما تقرأ. ومستوى التفصيل يحدّده loglevel لا هذه الصفحة — فإن لم تكن الأسطر التي تحتاجها هنا، ارفعه ثم أعد الإنتاج. ولتغييره دون إعادة تشغيل الجلسة، استخدم PUT /api/loglevel في HTTP Control API.
ما الذي تستطيع وحدة التحكم تسليمه
عامل الوصول إلى وحدة التحكم كوصول إلى كل ما رآه التشغيل. فهي قادرة على تقديم سجلات الاتصالات بما فيها الروابط والترويسات وأسماء العمليات، ومحتويات الطلبات والاستجابات الملتقطة، والإعداد، والسجل. ولهذا ليست الواجهة بلا مصادقة هي الافتراض، ولهذا يتطلّب ربطها بغير العنوان الاسترجاعي (loopback) سرّاً تضبطه أنت — انظر external-http-secret.
هذه الصفحة ترجمة للنسخة الإنجليزية. في حال وجود اختلاف، يُعتمد على النسخة الإنجليزية.
ملاحظة: التطبيق لا يدعم اللغة العربية حاليًا.