خيارات متنوعة

[General]
ipv6 = true
loglevel = notify

skip-proxy = 127.0.0.1, 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, 100.64.0.0/10, localhost, *.local

tun-excluded-routes = 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12
tun-included-routes = 192.168.1.12/32

خيارات شائعة

تفعيل دعم IPv6 الكامل (الافتراضي: true)

ipv6 = true

loglevel (الافتراضي: warning)

loglevel = notify

واحد من none أو fatal أو warning أو notify أو info أو verbose. لا ينصح بتفعيل verbose في الاستخدام اليومي لأن هذا سيبطئ الأداء بشكل كبير.

skip-proxy

skip-proxy = 127.0.0.1, 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, 100.64.0.0/10, localhost, *.local

في نسختي iOS وtvOS، يُضاف مدخل اسم المضيف إلى قائمة استثناءات البروكسي في النفق، فتُعالَج الاتصالات إليه بواسطة Chute TUN بدلاً من بروكسي Chute؛ أما مدخل عنوان IP أو CIDR فيصير كذلك مساراً مستبعداً من النفق، فتخرج حركة ذلك النطاق من النفق كلياً بدلاً من أن يعالجها Chute TUN. ويفعل Chute Android الشيء نفسه في وضع VPN: فما دام System HTTP Proxy مفعّلاً، تنضم أسماء المضيفين وأحرف البدل * وعناوين IPv4 إلى قائمة استثناءات البروكسي الذي تسلّمه VPN للتطبيقات، وعلى Android 13 وما بعده يصبح كل مدخل عنوان IP أو CIDR مساراً مستبعداً من VPN — والعنوان المفرد مساراً /32 أو /128؛ وتُستبعد مدخلات الاسترجاع (loopback)، لأن حركة الاسترجاع لا تدخل النفق أصلاً. في نسخة macOS، ستطبق هذه الإعدادات على النظام عند تفعيل "Set as System Proxy". يستخدم هذا الخيار لإصلاح مشاكل التوافق مع بعض التطبيقات.

  • لتحديد نطاق واحد، أدخل اسم النطاق - على سبيل المثال، apple.com.
  • لتحديد جميع المواقع على نطاق، استخدم نجمة قبل اسم النطاق - على سبيل المثال، *apple.com.
  • لتحديد جزء محدد من نطاق، حدد كل جزء - على سبيل المثال، store.apple.com.
  • لتحديد مضيفين أو شبكات بعناوين IP، أدخل عنوان IP محدد مثل 192.168.2.11 أو نطاق عناوين، مثل 192.168.2.* أو 192.168.2.0/24.

ملاحظة: إذا أدخلت عنوان IP أو نطاق عناوين، ستتمكن فقط من تجاوز البروكسي عند الاتصال بذلك المضيف باستخدام ذلك العنوان، وليس عند الاتصال بالمضيف باسم نطاق يُحلَّل إلى ذلك العنوان.


استماع خادم البروكسي

interface = 127.0.0.1
port = 8118
socks-interface = 127.0.0.1
socks-port = 8119

يتحكم interface / port في عنوان ومنفذ استماع خادم بروكسي HTTP (الافتراضي 127.0.0.1:8118). ويتحكم socks-interface / socks-port في خادم بروكسي SOCKS5 (الافتراضي 127.0.0.1:8119).

بالنسبة إلى طلب http:// غير مشفّر، لا يحمل خادم بروكسي HTTP إلا تبادلاً واحداً في كل اتصال: تخرج كل استجابة مع Connection: close ثم يُغلق الاتصال، فيرسل العميل طلبه التالي على اتصال جديد. أما الطلب المُرسَل بالتتابع خلف الأول فيُسقَط، ويعيد العميل إرساله على الاتصال الجديد. ولذلك لا يمكن أن تكتمل عبره طريقة مصادقة تحتاج إلى عدة جولات على الاتصال نفسه، مثل NTLM أو Negotiate. ولا يتأثر بذلك نفق CONNECT غير المفكوك تشفيره. وتحتفظ ترقية WebSocket باتصالها: فبعد استجابة 101 تمر البيانات في الاتجاهين دون تغيير.

أسماء بديلة للتوافق: يُقبل doh-server و doh-service كاسمين بديلين لـ doh؛ كما يُربط http-listen / socks5-listen (مثل 0.0.0.0:6152 أو [::]:6153 أو رقم منفذ مجرد) بإعدادات الواجهة/المنفذ أعلاه. كما أن مضيف استماع شامل (0.0.0.0 أو :: أو *) يعيّن أيضاً allow-wifi-access = true.


مصادقة البروكسي الوارد

http-auth = username:password

يتطلب من العملاء المصادقة قبل استخدام خوادم بروكسي HTTP و SOCKS5 الخاصة بـ Chute. يمكن تكرار السطر للسماح ببيانات اعتماد متعددة.

يرد بروكسي HTTP على الطلب الذي لا يحمل بيانات اعتماد صالحة — طلباً عادياً كان أو CONNECT — بـ 407 Proxy Authentication Required مع Proxy-Authenticate: Basic realm="KLNEKit"، ثم يغلق الاتصال. ويأخذ خادم SOCKS5 بيانات الاعتماد نفسها عبر مصادقة اسم المستخدم/كلمة المرور في SOCKS5، ويغلق الاتصال الذي لا يعرضها أو يفشل فيها.


تجاوز طلبات النظام

bypass-system = true

عند التفعيل، يُلحق Chute قائمة ثابتة من 18 اسم مضيف تابعاً لـ Apple — الإشعارات الفورية، وبوابة iCloud، وفحص البوابة المقيَّدة، و OCSP وما شابهها — بـ skip-proxy، ويُلحق IP-CIDR,17.0.0.0/8,DIRECT,no-resolve بعد قواعدك، قبل FINAL مباشرةً — فتظل قاعدتك التي تطابق 17.0.0.0/8 أولاً هي الغالبة. ولا توجد مطابقة قائمة على العمليات: فالخيار هو تلك القائمة الثابتة من المضيفين والعناوين، لا مرشِّح على العملية التي أطلقت الطلب.

الافتراضي: true.


IP الحقيقي دائماً

always-real-ip = *.example.com, tracker.example.org

عندما يقدم Chute عناوين IP وهمية لاستعلامات DNS المختطفة (انظر hijack-dns)، تتم الإجابة دائماً على أسماء المضيفين المطابقة لهذه القائمة المفصولة بفواصل بعناوين IP الحقيقية المحللة بدلاً من ذلك. أحرف البدل (wildcards) مدعومة. ويُقرأ always-ip-address (بصيغة Shadowrocket) على أنه هذا المفتاح: فالقيمة المنطقية (true أو yes أو on أو 1) تعني كل المضيفين وتُعاد كتابتها always-real-ip = *؛ وfalse تُسقَط؛ وأي قيمة أخرى تُقرأ قائمة مضيفين. ويُحفظ الإعداد بصيغة always-real-ip.


قراءة ملف hosts الخاص بالنظام

read-etc-hosts = false

يحدّد ما إذا كان ملف hosts الخاص بالنظام يُقرأ إلى جدول [Host]. اضبطه على false لتجاهل ذلك الملف؛ ويسري التغيير عند إعادة التحميل. راجع تعيين DNS المحلي.

الافتراضي: true.


مقاطعة الاتصالات الحالية

interrupt-exist-connections = true

عند التفعيل، سيؤدي تغيير السياسة المختارة في أي مجموعة سياسات (عبر URL Test، Fallback، Load Balance، SSID، أو الاختيار اليدوي) إلى إنهاء الاتصالات الحالية التي كانت تستخدم السياسة القديمة بشكل آمن. هذا يضمن استخدام الاتصالات للبروكسي المختار حديثاً فوراً بدلاً من البقاء على القديم.

ينطبق هذا على كل مجموعة سياسات يمر بها الاتصال: المجموعة التي تسميها قاعدته، والمجموعة المتداخلة فيها، والمجموعة المنبع لسياسة متسلسلة (underlying-proxy)، والمجموعات الأعضاء في مجموعة الترحيل.

يتم إغلاق كل اتصال متأثر بشكل آمن مع مهلة 3 ثوانٍ قبل الإغلاق القسري.

الافتراضي: false. هذا إعداد عام — يؤثر على جميع مجموعات السياسات.


Network Framework (macOS / iOS / tvOS)

network-framework = true

تفعيل Apple Network.framework للاتصالات الصادرة. يمكن أن يوفر استخدام Network.framework أداء أفضل وتكاملاً حديثاً مع مكدس TLS على المنصات المدعومة.

الافتراضي: true على macOS، false على iOS و tvOS.


استبعاد أسماء المضيفين البسيطة

exclude-simple-hostnames = true

عند التفعيل، تتجاوز الطلبات إلى أسماء المضيفين البسيطة (أسماء ذات تسمية واحدة بدون نقطة، مثال localhost) قواعد البروكسي وتحل محلياً. هذا يساعد في تجنب استعلامات DNS غير الضرورية لأسماء الشبكة المحلية. وهذا هو إعداد "استبعاد أسماء المضيفين البسيطة" الخاص ببروكسي نظام macOS نفسه: يكتبه Chute Mac في إعدادات بروكسي النظام، فيسري على التطبيقات التي تتبع بروكسي النظام دون غيرها — لا على الوضع المحسن ولا على حركة TUN. وعلى iOS و tvOS يُكتب بالطريقة نفسها في إعدادات بروكسي النفق، فيعالج Chute TUN اسم المضيف البسيط بدلاً من بروكسي Chute، كما يُعالَج اسم المضيف المدرج في skip-proxy. أما Chute Android فلا يستخدمه.

على Chute Mac، تُفعّل عملية ترحيل تُنفَّذ مرة واحدة هذا الخيار افتراضياً عند التشغيل الأول؛ ويُحترم إيقافه صراحةً من قبل المستخدم.

الافتراضي: false.


تعطيل سجل قاعدة البيانات

disable-db-record = true

عند التفعيل، يتوقف Chute عن كتابة سجلات حركة المرور إلى قاعدة البيانات المحلية. هذا يمكن أن يحسن الأداء ويقلل استخدام التخزين، لكن سجل حركة المرور لن يكون متاحاً في Chute Dashboard.

الافتراضي: false.


menu-bar-show-speed = true

عند التفعيل، يعرض Chute Mac سرعة الرفع والتنزيل الحالية في شريط القوائم.

يُحلَّل لكنه غير فعّال في المحرك الحالي — فلا شيء في Chute Mac يقرأ هذا المفتاح. وسرعة شريط القوائم تُبدَّل من عنصر القائمة Show Connection Speed، وهو مخزَّن في إعدادات التطبيق نفسه. ويظل المفتاح يُكتب مجدداً عند حفظ الإعدادات.


اختطاف خوادم DNS الأخرى

hijack-dns = 8.8.8.8:53

افتراضياً، يرجع Chute فقط عناوين IP وهمية لاستعلامات DNS المرسلة إلى عنوان DNS الخاص بـ Chute (198.18.0.2). الاستعلامات المرسلة إلى DNS القياسي سيتم توجيهها ببساطة.

بعض الأجهزة أو البرامج تستخدم دائماً خادم DNS مبرمج بشكل ثابت. (على سبيل المثال، Google Speakers تستخدم دائماً 8.8.8.8). يمكنك استخدام هذا الخيار لاختطاف الاستعلام للحصول على عنوان وهمي.

يمكنك استخدام hijack-dns = *:53 لاختطاف جميع استعلامات DNS.

المدخل بلا منفذ يعني المنفذ 53، فـ hijack-dns = 8.8.8.8 هو 8.8.8.8:53. والمدخل الذي يتعذر قراءته يُتخطّى مع إشعار، ويظل باقي السطر نافذاً.

Fake IP متاح على Apple TV أيضاً (tvOS 17 وما بعده). كان معطّلاً هناك، والتحقق على جهاز فعلي لا يزال جارياً.


المسارات المستبعدة

tun-excluded-routes = 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12

يستطيع Chute VIF معالجة بروتوكولات TCP و UDP فقط. استخدم هذا الخيار لتجاوز نطاقات IP محددة للسماح لجميع حركات المرور بالمرور.

ملاحظة: ينطبق هذا الخيار على نفقَي الحزم في iOS و tvOS، حيث تصير النطاقات مسارات مستبعدة من إعدادات IP للنفق، وعلى Chute Android في Android 13 وما بعده، حيث تصير مسارات مستبعدة من الـ VPN — فلا واجهة في Android 11 و 12 للمسارات المستبعدة، ولذا تُتجاهل النطاقات هناك. وليس له تأثير على macOS في أيٍّ من نوعَي الوضع المحسن — فلا utun المساعد ولا امتداد شبكة Mac يستبعد أي مسار. الطلبات التي يعالجها خادم بروكسي Chute لن تتأثر. ادمج 'skip-proxy' و 'tun-excluded-routes' للتأكد من أن حركة HTTP معينة تتجاوز Chute.

قد يتسبب هذا الخيار في خطأ نظام ENOMEM (Cannot allocate memory). يبدو أنه خطأ في نظام iOS. يرجى عدم استخدام هذا الخيار إذا أمكن.


المسارات المضمنة

tun-included-routes = 192.168.1.12/32

افتراضياً، ستعلن واجهة Chute VIF عن نفسها كمسار افتراضي. لكن نظراً لأن واجهة Wi-Fi لديها مسار أصغر، قد لا تمر بعض حركات المرور عبر واجهة Chute VIF. استخدم هذا الخيار لإضافة مسار أصغر.

وسبب عدم كفاية المسار الافتراضي وحده: النظام يختار المسار بطول البادئة، لا بالترتيب. فالشبكة الفرعية المباشرة للواجهة الفيزيائية — 192.168.1.0/24 مثلاً — أدقّ من 0.0.0.0/0 الخاص بالنفق، فلا تصل تلك الحركة إلى Chute أبداً. والمدخل هنا يثبّت مساراً أدقّ منها فيفوز. وتُضاف هذه المسارات فوق المسار الافتراضي ولا تضيّق أبداً ما يلتقطه النفق.

ملاحظة: تجنّب إدراج النطاقات الخاصة (10.0.0.0/8 و 172.16.0.0/12 و 192.168.0.0/16) بكاملها. فذلك غير ضروري عادةً وقد يربك توجيه النظام نفسه؛ ويحترم Chute مدخلاً كهذا لكنه يسجّل تحذيراً — إلا في نوع Network Extension من الوضع المحسن على macOS، الذي يحترمه دون تحذير. والسبب المعتاد لاستخدام هذا الخيار هو الوصول إلى نطاق يملكه نفق تطبيق VPN آخر.

ملاحظة: يُرفض المدخل الذي يقطع الغصن الذي يجلس عليه Chute، ويُذكر السبب في السجل: العنوان الاسترجاعي، والشبكتان الفرعيتان الخاصتان بـ VIF (198.18.0.0/15 و fd12:1:1:1::/64)، والعناوين المحلية للوصلة، والبث المتعدد، والبث العام، وطول بادئة يساوي 0. ويرفض نوع helper-utun من الوضع المحسن على macOS كذلك المدخل الذي يغطي البوابة الافتراضية الحالية. وفي نوع Network Extension يُكتب السبب في سجل النظام لا في سجل Chute.

ملاحظة: على iPhone يقرر النظام التقاط الشبكة المحلية على حدة. فالشبكة الفرعية المحلية المدرجة هنا لا تُحترم إلا إذا كان تضمين الشبكات المحلية (Include Local Networks) مفعّلاً أيضاً في إعدادات التطبيق — وهو مفتاح لا يمكن تفعيله إلا ما دام تضمين كل الشبكات (Include All Networks) مفعّلاً؛ أما النطاق الذي يملكه نفق تطبيق آخر فلا يحتاج إلى ذلك المفتاح. ويعرض Chute tvOS المفاتيح نفسها لكنه لا يطبّقها على النفق. وعلى macOS تُثبَّت المسارات مباشرةً فلا ينطبق هذا القيد.

ملاحظة: على macOS يثبّت نوع helper-utun من الوضع المحسن هذه المسارات عند إرفاق الواجهة، فتغيير القائمة يعيد إرفاق الواجهة عند إعادة التحميل. ويتطلب هذا الخيار إصدار المساعد 0.8.6 أو أحدث — بعد تحديث Chute وافق على طلب إعادة تثبيت المساعد مرة واحدة، وإلا أبلغ نوع helper-utun أن المساعد لا يعمل.


استكشاف البروتوكول

sniffing-enabled = true
sniffing-timeout = 100

يستطيع Chute اكتشاف البروتوكول الفعلي للاتصال عن طريق فحص البايتات الأولية. هذا يمكن قواعد مثل PROTOCOL,TLS,Proxy من العمل بشكل صحيح حتى للاتصالات الواردة غير HTTP.

sniffing-enabled (الافتراضي: false)

sniffing-enabled = true

تفعيل اكتشاف البروتوكول لاتصالات TCP. وفي الوضع المحسن يتيح المفتاح نفسه مطابقة تدفق HTTP/3 (QUIC) الموجّه إلى عنوان IP مجرد بالاسم: يقرأ Chute اسم الخادم من ClientHello الخاص بـ QUIC، فترى قواعد DOMAIN ذلك الاسم بدل العنوان، وتتبع كل الحزم اللاحقة في التدفق حكم الحزمة الأولى. أما ClientHello الأكبر من أن تسعه حزمة واحدة — وهو شائع مع تبادل مفاتيح ما بعد الكم — فيُعاد تجميعه لكل تدفق من حزم Initial التي تحمله، بحد أقصى 16 كيبيبايت للـ hello المُجمَّع، فيُقرأ اسمه أيضاً. وبينما لم يصل باقي الـ hello بعد، تُحتجز مخططات بيانات التدفق بدل إرسالها بعنوانها المجرد، ثم تخرج معاً وفق سياسة الاسم بمجرد قراءته — فلم يعد الجزء الأول من hello مقسّم يسلك طريقاً مختلفاً عن بقيته. والحدود الاحتياطية هي: انتظار ثانية واحدة، وثماني مخططات بيانات أو 16 كيبيبايت محتجزة لكل تدفق، و64 تدفقاً قيد التجميع في آن واحد؛ والتدفق الذي يتجاوز أياً منها، أو الذي لا تكتمل ClientHello من حزم Initial الخاصة به أبداً، يُطابَق بالعنوان كما في السابق.

sniffing-timeout (الافتراضي: 100ms)

sniffing-timeout = 200

الحد الأقصى للوقت بالمللي ثانية لانتظار البيانات الأولية لتحديد البروتوكول. قم بزيادة هذه القيمة إذا فشل اكتشاف البروتوكول على الاتصالات البطيئة.


حظر QUIC

block-quic = auto

يتحكم هذا الخيار في ما إذا كان Chute سيرفض حركة مرور QUIC المكتشفة، بما في ذلك HTTP/3. يعمل QUIC عبر UDP ولا يمكن فك تشفيره بواسطة HTTP MitM في Chute. قد يدفع رفض QUIC العملاء المتوافقين إلى إعادة المحاولة عبر TCP، مما يتيح معالجة البروكسي المعتمدة على TCP وفك تشفير HTTPS عند تفعيله.

القيمة السلوك
off عدم تطبيق حظر عام على QUIC (الافتراضي). تتبع حركة QUIC المكتشفة قواعد التوجيه العادية.
on رفض كل تدفق QUIC مكتشف، بما في ذلك حركة المرور الموجهة إلى DIRECT.
auto رفض QUIC المكتشف فقط عندما تكون سياسة الخروج النهائية بروكسي. يُسمح بحركة المرور الموجهة إلى DIRECT، وتظل حركة المرور الموجهة إلى REJECT مرفوضة وفقاً لتلك القاعدة.
all تهجئة Surge للقيمة on.
all-proxy، per-policy تهجئتا Surge، وتُقرأ كلتاهما على أنهما auto — فليس في Chute حظر QUIC لكل سياسة على حدة، لذا يحظر per-policy كل تدفق QUIC يمر عبر بروكسي. وتُحفظ الكلمة التي كتبتها كما هي عند حفظ الملف.

بالنسبة إلى حركة المرور الداخلة عبر TUN، يرد Chute على تدفق QUIC المرفوض برسالة ICMP/ICMPv6 Port Unreachable، مما يسمح للعملاء المتوافقين بالعودة إلى TCP دون انتظار انتهاء مهلة QUIC.

يُسجَّل تدفق QUIC المرفوض بسياسة REJECT، أياً كانت السياسة التي اختارتها القاعدة.

يتم اكتشاف QUIC الخاص بـ block-quic تلقائياً ولا يتطلب sniffing-enabled؛ إذ يتحكم sniffing-enabled في اكتشاف البروتوكولات — TLS على TCP، واسم الخادم في تدفق QUIC. استخدم قاعدة PROTOCOL,QUIC,... عند الحاجة إلى معالجة تدفقات QUIC منفردة بواسطة القواعد.


الرد على ICMP داخل النفق

icmp-auto-reply = false

يرد Chute بنفسه على أي طلب ICMP echo يدخل النفق — IPv4 أو IPv6 —: يُولَّد الرد محلياً ولا يُرسَل شيء إلى الوجهة. لذلك تجيب كل وجهة، بما فيها عنوان تُسقطه قاعدة REJECT أو مضيف متوقف، فنجاح ping داخل النفق لا يدل على أن الوجهة قابلة للوصول. اضبطه على false لإيقاف الرد: عندها يُمرَّر الطلب خارج الجهاز، لكن رده لا يعود أبداً عبر النفق، فلا يُجاب ping أبداً.

الافتراضي: true. ينطبق على الحركة الواردة عبر TUN؛ ولا يُمرَّر ICMP عبر بروكسي أبداً.


تجاوز TUN

bypass-tun = 192.168.0.0/16, 10.0.0.0/8

مشابه لـ skip-proxy، لكنه يعمل على مستوى توجيه TUN/VIF. الاتصالات إلى نطاقات IP هذه ستتجاوز واجهة TUN بالكامل وتذهب عبر مكدس شبكة النظام مباشرة.

ملاحظة: ينطبق هذا الخيار على نفقَي الحزم في iOS و tvOS، حيث تنضم نطاقاته إلى tun-excluded-routes بوصفها مسارات مستبعدة من النفق، وبالطريقة نفسها على Chute Android في Android 13 وما بعده (ويتجاهله Android 11 و 12). وليس له تأثير على macOS في أيٍّ من نوعَي الوضع المحسن.


عرض صفحة خطأ للرفض

show-error-page-for-reject = true

عند التفعيل، يرجع Chute صفحة خطأ سهلة الاستخدام للطلبات المرفوضة. وهذا لا ينطبق إلا على الطلب الوارد عبر مدخل بروكسي HTTP؛ ومع إطفاء الخيار يُجاب هذا الطلب بـ HTTP/1.1 503 Service Unavailable بدلاً من ذلك. أما الطلب المرفوض من أي مدخل آخر فيُسقَط في الحالتين.

الافتراضي: false.


DNS المتفائل

optimistic-dns = false

عند التفعيل، يرجع Chute نتيجة DNS المخزنة مؤقتاً فوراً مع تحديث السجل في الخلفية. هذا يقلل زمن استجابة الاتصال على حساب احتمالية إرجاع سجلات DNS قديمة. وعند إيقافه، يُسقَط السجل الذي انتهت مدته بدلاً من تقديمه ويذهب الاستعلام إلى الخادم الأعلى؛ ومع ذلك يجري التحديث في الخلفية، فيُجاب الاستعلام التالي من الذاكرة المؤقتة. ويحكم أيضاً، على كل المنصات، ما إذا كان النفق يتصل بعدة عناوين للاسم نفسه في آن واحد.

الافتراضي: true. عيّن optimistic-dns = false للتعطيل.


السماح بالوصول عبر Wi-Fi

allow-wifi-access = true

يسمح للأجهزة الأخرى على الشبكة نفسها بالوصول إلى منفذَي بروكسي HTTP و SOCKS5 في Chute، عبر توسيع عنوان الربط للمستمعَين إلى 0.0.0.0. إعدادات نمط Surge — وكذلك تحويل allow-lan عند الاستيراد من sing-box — تحمل هذا الخيار وحده وتترك interface على قيمته الافتراضية 127.0.0.1، ولهذا يجب أن يوسّع الخيار عنوان الربط بنفسه.

هذا الخيار وكتابة interface بحرف بدل صريح طريقتان للتعبير عن النية نفسها، و Chute يأخذ الاتحاد بينهما: الإعداد الذي يكتب 0.0.0.0 أصلاً لا يتغيّر سلوكه. تغيير الخيار يعيد ربط المستمعَين، لذا يسري سحب الوصول عند إعادة التحميل لا عند التشغيل التالي.

هذه منافذ البروكسي، ولا تملك أي مصادقة ما لم تضبط http-auth. على شبكة لا تتحكم بها، اضبط بيانات الاعتماد أيضاً.


الإعدادات المدارة

#!MANAGED-CONFIG https://example.com/config.conf interval=86400 strict=false

الإعداد الذي يبدأ سطره الأول بترويسة #!MANAGED-CONFIG يُعاد جلبه تلقائياً من عنوان URL. معلمات الترويسة وسلوك التحديث موثقة في الإعدادات المدارة.


Replica / تسجيل حركة المرور

replica = true

مفتاح replica في [General] (replica = true) يفعّل تسجيل حركة المرور؛ بينما يتولى قسم [Replica] تصفية ما يعرضه Chute Dashboard، ومفاتيحه موثقة في النسخ المتماثل.

على iOS و tvOS و Android يلزم كذلك ترخيص فعّال: فبدونه لا يلتقط replica = true شيئاً.


الوصول إلى المتحكم الخارجي (Chute Dashboard)

external-controller-access = password@0.0.0.0:6155

يبدأ خادم التحكم عن بعد المستخدم بواسطة Chute Dashboard. القيمة هي password@host:port؛ ويمكن اختيارياً أن يسبق كلمة المرور اسم مستخدم (user:password@host:port). على iOS و tvOS، تفتح قناة USB مرافقة على port + 1 (وليس على macOS). طريقة الاتصال موصوفة في صفحة Chute Dashboard.


HTTP Control API ووحدة تحكم الويب

[General]
external-http-controller = 127.0.0.1:9090
external-http-secret = your-secret-token
external-http-ui = true
external-http-cors = false

يوفر Chute واجهة HTTP Control API مدمجة ووحدة تحكم الويب، مشابهة للوحات معلومات Clash و Surge. تعرض API حالة المحرك، حركة المرور، الاتصالات، DNS، عناصر تحكم السياسات، وإدارة الإعدادات عبر نقاط نهاية REST.

يُقرأ http-api = <secret>@<host>:<port> الخاص بـ Surge على أنه external-http-controller مع external-http-secret. ويمكن أيضاً كتابة الأجزاء منفصلة: فيُقرأ http-api-secret و http-api-ui و http-api-cors على أنها external-http-secret و external-http-ui و external-http-cors، ويُقرأ http-api-web-dashboard كذلك على أنه external-http-ui؛ وتُحفظ الإعدادات بمفاتيح external-http-*. أما http-api-tls فغير مدعوم — إذ يتحدث المتحكم HTTP عادياً — ولا ينتج عنه سوى إشعار.

external-http-controller (الافتراضي: معطل)

external-http-controller = 127.0.0.1:9090

الطلبات التي تبقيها وحدة التحكم مقيمة أثناء الخدمة محدودة بـ 4 ميغابايت على macOS و1 ميغابايت على iOS وtvOS وAndroid.

عنوان ومنفذ خادم التحكم عبر HTTP. استخدم 127.0.0.1 للوصول المحلي فقط. الربط بأي عنوان غير استرجاعي (مثل 192.168.1.5:9090) يتطلب ضبط external-http-secret صراحةً؛ وبدونه يرفض الخادم البدء ويسجّل ما ينقصه.

عنوان البدل (0.0.0.0 أو :: أو *) يُعدّ غير استرجاعي في هذا الفحص، لأنه يستمع على كل الواجهات، وهو نقيض «المحلي فقط». والصيغ المقبولة هي 0.0.0.0:9090 و *:9090 (الشيء نفسه)، ولـ IPv6 [::]:9090 — أما :::9090 المجرّد فتُضاف له الأقواس تلقائياً؛ والعنوان الذي يتعذّر تحليله يُبلَّغ عنه كخطأ إعداد بدل ترك وحدة التحكم معطّلة بصمت. والنطاق 127.0.0.0/8 بأكمله يُعدّ استرجاعياً، لا 127.0.0.1 وحده.

external-http-secret (الافتراضي: رمز مُولَّد)

external-http-secret = your-secret-token

رمز Bearer المستخدم لمصادقة الـ API. يجب أن تتضمّن الطلبات الترويسة Authorization: Bearer <secret> — ويُقبل الرمز في هذه الترويسة فقط، لا كمعامل استعلام، وتتم المقارنة بزمن ثابت. يعيد فشل المصادقة 401 مع {"ok": false, "error": {"code": "unauthorized", "message": "missing or invalid token"}}. كل مسارات البيانات محمية: مسارات /api/*، وأسماء Clash البديلة، والمسارات الأقدم التي لا يقدمها الآن إلا Chute Android (/status و/policies و/dns و/records وما شابهها)، وهي أيضاً لا تقبل الرمز إلا في هذه الترويسة. أما لوحة المعلومات البعيدة في Chute Android نفسه فلا تستخدم الآن إلا مسارات /api/*. أما صفحة وحدة تحكم الويب وأصولها الثابتة (/ و/assets/…، وعلى Chute Android أيضاً /ui) فلا تحتاج إلى رمز (ومع external-http-ui = false تختفي كلياً — فتعيد الصفحة 404).

عند غياب هذا المفتاح يولّد Chute رمزاً بدل التقديم دون مصادقة. يُكتب الرمز المُولَّد إلى ملف control-token في مجلد المشاركة الخاص بـ Chute — لا بجوار الإعداد: حاوية مجموعة التطبيقات على iOS و tvOS، ودليل البيانات الخاص بالتطبيق على Android — بصلاحيات للمالك وحده، ويُعاد استخدامه بعد إعادة التشغيل، وتعرضه التطبيقات — انظر فتح وحدة تحكم الويب. يمكن لواجهة التحكم أن تسلّم قاعدة بيانات الاتصالات، وسجلاتها تحمل كل رابط وترويسة واسم عملية شاهدها التشغيل، فواجهة تحكم مفتوحة ليست إعداداً افتراضياً معقولاً.

إن أردت التقديم دون مصادقة رغم ذلك، فقل ذلك صراحةً في الإعداد:

external-http-secret = none

وهذا مقبول على ربط استرجاعي فقط. خارج عنوان الاسترجاع لا يكفي none ولا غياب المفتاح: يرفض خادم التحكم البدء ويوضّح ما يحتاجه.

ملاحظة عند الترقية: إن كنت تعتمد على أن غياب external-http-secret يعني «بلا مصادقة»، فستبدأ سكريبتاتك المحلية بتلقّي 401. اقرأ الرمز المُولَّد من التطبيق، أو اكتب external-http-secret = none للإبقاء على السلوك القديم عن قصد.

external-http-ui (الافتراضي: true)

external-http-ui = true

عند التفعيل، يقدم Chute وحدة تحكم ويب مدمجة عند عنوان المتحكم. توفر وحدة تحكم الويب نظرة عامة، إدارة الاتصالات، فحص DNS، مراقبة حركة المرور، عناصر تحكم السياسات، وتحرير الإعدادات. عيّن إلى false لإبقاء API مفعلة مع تعطيل واجهة المستخدم.

فتح وحدة تحكم الويب

تُقدَّم وحدة التحكم على عنوان خادم التحكم، ويستطيع كل تطبيق أن يسلّمك العنوان والرمز — بما في ذلك الرمز المُولَّد الذي لا سبيل آخر لقراءته:

  • Chute Mac: شريط القوائم ← Open Web Console (فتح وحدة تحكم الويب)، و Copy Web Console Token (نسخ رمز وحدة تحكم الويب). وفي نافذة تفاصيل الاتصال زر Requests & History (الطلبات والسجل) يفتح وحدة التحكم أيضاً — صفحتها الرئيسية لا ذلك الاتصال.
  • Chute iOS: لوحة التحكم ← صف Web Console ← Open (فتح) أو Copy Address (نسخ العنوان) أو Copy Access Token (نسخ رمز الوصول).
  • Chute tvOS: في لوحة التحكم صف مستقل باسم Web Console Address يعرض المضيف والمنفذ. وعند اختياره يظهر رمز QR إن كان المستمع متاحاً من أجهزة أخرى — ورمز تسجيل الدخول داخل الرمز لا على الشاشة — أما إن كانت وحدة التحكم مربوطة بعنوان الاسترجاع فيظهر شرح بدلاً منه، لأن وحدة تحكم على عنوان الاسترجاع لا يمكن فتحها من هاتف.
  • Chute Android: لوحة التحكم ← Web Console Address ← Open (فتح) أو Copy Address (نسخ العنوان)، وصف Generated access token الذي يُنسخ بالنقر. ولا يظهر أي من الصفين حين يكون الرمز سرّاً ضبطته بنفسك، فهذا لا يُعرض أبداً.

العنوان الناتج يحمل الرمز في معامل استعلام. تستهلكه الصفحة عند التحميل وتزيله من شريط العنوان، لذا فتح الرابط تسجيل دخول كامل ولا أحد مضطر لنسخ 32 خانة ست عشرية يدوياً.


external-http-cors (الافتراضي: false)

external-http-cors = true

تفعيل ترويسات CORS (Cross-Origin Resource Sharing) على استجابات API. مفيد عندما تحتاج وحدة تحكم الويب أو أدوات خارجية للوصول إلى API من أصل مختلف.

نقاط نهاية API:

الطريقة نقطة النهاية الوصف
GET /api/status حالة وقت التشغيل، المنافذ، مدة التشغيل
GET /api/traffic عدادات حركة المرور العامة ولكل سياسة
GET /api/connections الاتصالات النشطة الحالية
DELETE /api/connections/:id إغلاق اتصال
GET /api/connections/history سجلات الاتصالات التاريخية
GET /api/connections/processes إحصاءات الاتصالات لكل عملية
GET /api/connections/:id/request بيانات الطلب الملتقطة لاتصال
GET /api/connections/:id/response بيانات الاستجابة الملتقطة لاتصال
GET /api/dns سجلات ذاكرة DNS المؤقتة
DELETE /api/dns/cache مسح ذاكرة DNS المؤقتة
DELETE /api/dns/records/:domain إزالة سجل DNS واحد
GET /api/config الإعدادات الحالية
PUT /api/config إعادة تحميل الإعدادات
POST /api/config/validate تحليل إعدادات والإبلاغ عن أخطائها دون تحميلها
GET /api/policies مجموعات السياسات والاختيار الحالي؛ ويحمل كل عنصر hidden، وقيمته true للمجموعة الموسومة بـ hidden=true
PUT /api/policies/:group تغيير اختيار مجموعة السياسات
PUT /api/mode تعيين وضع الخروج
GET /api/features حالات مفاتيح الميزات
PUT /api/features/mitm تبديل MitM
PUT /api/features/record-traffic تبديل تسجيل حركة المرور
GET /api/rules جدول القواعد الذي يمر عليه المطابِق، ومصدر كل قاعدة، وقواعد إعادة الكتابة التي عملت
POST /api/rules/match إلى أين سيُوجَّه طلب، دون إرساله
GET /api/logs أحدث مدخلات السجل
GET /api/loglevel مستوى السجل الحالي، والأقسام التي تُكتب
PUT /api/loglevel تغيير مستوى السجل أو الأقسام دون إعادة تشغيل
GET /api/health صحة المحرك: مرات الرفض، الأجيال، البصمة، الخروج السابق
GET /api/events لحظات جديرة بالانتباه في هذا التشغيل
GET /api/tailscale الحالة الحيّة لمحرك Tailscale
GET /api/scripts السكريبتات العامة التي يمكن تشغيلها عند الطلب
POST /api/scripts/run تشغيل سكريبت عام واحد بالاسم
POST /api/diagnostics/ping فحص وصول عبر ICMP أو TCP
POST /api/diagnostics/dns-query حلّ نطاق عبر المحلِّل العامل
POST /api/diagnostics/egress-probe فحص العنوان: على محركات Apple عناوين الجهاز نفسه، وعلى Android عنوان الخروج العام
POST /api/diagnostics/internet-test اختبار الإنترنت المباشر: جلب internet-test-url بلا بروكسي
POST /api/diagnostics/url-test/:policy تشغيل اختبار زمن الاستجابة لسياسة
POST /api/diagnostics/bundle بناء أرشيف تشخيصي مُنقّح
GET /api/connections/export تصدير الاتصالات بصيغة HAR 1.2
GET /api/rewrites كل عائلات إعادة الكتابة/الاستجابة الوهمية وقائمة مضيفي MitM
GET /api/rewrites/:family قواعد عائلة واحدة
POST /api/rewrites/:family إضافة قاعدة
DELETE /api/rewrites/:family/:id حذف قاعدة
DELETE /api/rewrites/:family إفراغ عائلة
GET /api/mitm/hosts المضيفون الذين يُفكّ تشفيرهم حالياً
POST /api/mitm/hosts إضافة مضيف
DELETE /api/mitm/hosts/:host حذف مضيف
DELETE /api/mitm/hosts إفراغ القائمة
GET /api/rules/providers مزوّدو القواعد ومجموعات القواعد وحالة كل منها — بما في ذلك سبب عدم تحميل أحدها

ملاحظات نقاط النهاية:

  • GET /api/connections تقبل limit (عدد صحيح موجب، الافتراضي والحد الأقصى 1000) و cursor (تُرجع فقط الاتصالات التي يكون id فيها أكبر من المؤشر). يحمل حقل data في الاستجابة connections و total و page_size و has_more و — عند وجود صفحات إضافية — next_cursor.
  • GET /api/connections/history تقبل limit (الافتراضي 100، الحد الأقصى 1000) و cursor/before (مترادفان؛ تمريرهما معاً يُرفض).
  • GET /api/connections/:id/request و .../response تُرجعان {"connection_id": <id>, "data": "<base64>"}. الالتقاطات الأكبر من 2 MiB تُرجع 413.
  • GET /api/config تُرجع الإعدادات مع استبدال القيم الحساسة (http-auth و external-http-secret و ca-p12 و ca-passphrase ومفاتيح WireGuard وما شابه) بـ <redacted> — لا تُعِد إرسال الناتج كما هو إلى PUT /api/config، وإلا كُتبت العناصر النائبة في الإعدادات حرفياً.
  • كما يمكن بلوغ GET و PUT /api/config عبر /api/configs، وعبر الاسم البديل المتوافق مع Clash /configs.
  • PUT /api/config تقبل إما JSON بالشكل {"configuration": "<full text>"} أو نص الإعدادات الخام كمحتوى للطلب (بحد 1 MB). عند النجاح يعيد المحرك التحميل — أو يبدأ، إن لم يكن يعمل.
  • PUT /api/policies/:group تأخذ الاختيار من أول مفتاح موجود في المحتوى من بين policy و name و selected و select؛ ويمكن أن تكون القيمة اسم سياسة أو فهرساً رقمياً كنص. اسم المجموعة الخاص GLOBAL يعيّن السياسة المختارة العامة.
  • PUT /api/mode تتطلب رقم JSON: {"mode": 0} — 0 القواعد، 1 مباشر، 2 بروكسي.
  • PUT /api/features/mitm و PUT /api/features/record-traffic تأخذان {"enabled": true}.
  • GET /api/logs تقبل since (ثوانٍ Unix)؛ يحتفظ المخزن المؤقت في الذاكرة بأحدث 1000 مدخلة، كل منها {timestamp, wall_time, level, section, message} — ويحمل timestamp و wall_time القيمة نفسها بثوانٍ Unix، مدفوعةً إلى الأمام حين لا تتقدم الساعة، كي يبقى ترتيب المدخلات صارماً.
  • يبلّغ GET /api/health عمّا يحتفظ به المحرك وسبب آخر رفض صدر عنه، وكيف انتهى التشغيل السابق (clean أو unclean أو suspected_memory — انظر استكشاف الأخطاء وإصلاحها).
  • يقدّم GET /api/events الحلقة الموجودة في الذاكرة؛ أما ?persisted=1 فيقرأ السجل المحفوظ لهذا التشغيل، ويجيب بـ available: false عند تعطيل التسجيل.
  • يجيب GET /api/tailscale بـ state: "idle" عندما لا يوجد قسم [Tailscale] — وهذه إجابة طبيعية لا خطأ.
  • تأخذ فحوص POST /api/diagnostics/* معاملاتها من سلسلة الاستعلام أو من محتوى JSON، ومحدودة بعشر ثوانٍ، وتجيب مرة واحدة بالضبط. ويرفض url-test/:policy اسم سياسة غير معرّفة بدل قياس REJECT.
  • يسرد GET /api/scripts السكريبتات العامة المفعّلة بالشكل {name, type}؛ ويأخذ POST /api/scripts/run الحقل name من المحتوى أو من سلسلة الاستعلام، وهو محدود كفحوص التشخيص، ويجيب بـ {name, timedOut, result} — وtimedOut يميّز السكريبت الذي لم يستدعِ $done قط عن الذي عمل حتى النهاية. والاسم الذي ليس سكريبتاً عاماً مفعّلاً يعطي 404.
  • يجيب POST /api/rules/match عن إلى أين سيذهب الطلب، دون فتح اتصال. يقبل host (أو url يأخذ منه المضيف والمنفذ؛ وتُختبر قاعدة URL-REGEX على url هذا كما هو مكتوب تماماً، مع أنها في الحركة الحقيقية لا ترى إلا طلبات http:// العادية)، وport (الافتراضي 443)، واختيارياً ip وprotocol وprocess وprocess_path وsrc_ip وsrc_port وin_port وin_type وin_user وin_name وnetwork وssid وbssid وfrom_tun وuser_agent — والحقل غير المعروف يُرفض مع قائمة الحقول المقبولة بدل أن يُتجاهل. ويحمل الرد القاعدة matched (سطرها ونوعها والسياسة التي تسمّيها وresolved_policy التي تشير إليها المجموعة حالياً)، وpolicy، وneed_resolve، إضافة إلى rule_count وmatch_generation اللذين حُسب الجواب عليهما. ولأن النطاق يُطابَق مرتين — مرة بالاسم ومرة أخرى بعد معرفة العنوان — يحمل passes مدخلاً لكل مرور؛ وبدون ip لا يوجد إلا مرور ما قبل الحلّ، ويقول الرد ذلك في note. أضف explain=true للحصول على القواعد المرشّحة التي كان يمكن أن تطابق أيضاً، حتى 50 قاعدة، مع عدد مجموعات القواعد التي لم تُفتح.
  • يحلّل POST /api/config/validate إعدادات ثم يرميها: لا يتبنّى المحرك العامل منها شيئاً. أرسلها بصيغة {"configuration": "<full text>"} أو نصاً خاماً. والرد هو valid وerror_count وadvisory_count وrule_count وpolicy_count، وقائمة errors من {line, severity, content, error} — وseverity يفرّق بين سطر مرفوض وسطر قُبل مع تحفّظ، وcontent هو السطر المخالف بعد التنقيح، لأن سطر [Proxy] السيّئ يحمل عادةً كلمة المرور نفسها التي أفسدته. استخدمه قبل PUT /api/config الذي يعيد تشغيل الجلسة التي تنقّحها.
  • يبلّغ GET /api/loglevel بـ level الحالي وnslog_level وsections التي تُكتب في الملف، وavailable_levels / available_sections التي يمكنك ضبطها. ويقبل PUT (أو PATCH) الحقلين level وsections أو كليهما: وsections مصفوفة أسماء أقسام أو السلسلة "all"، والمصفوفة الفارغة مرفوضة — ولإيقاف التسجيل استخدم level بقيمة none. وتغيير المستوى بهذه الطريقة لا يعيد تشغيل الجلسة، وهذا هو المقصود: loglevel = verbose في الملف يحتاج إعادة تحميل، وإعادة التحميل تضيّع ما كنت تحاول رؤيته.
  • يبلّغ GET /api/rules أيضاً بـ rewrite_hits: كل قاعدة إعادة كتابة أو استجابة وهمية عملت في هذا التشغيل، مع عدّادها. القاعدة التي لا تظهر هناك لم تطابق قط، وهذا هو التفسير المعتاد لإعادة كتابة تبدو بلا أثر. يتتبّع الجدول حتى 512 قاعدة مختلفة ويبلّغ عمّا زاد عليها في rewrite_hit_dropped_rules. تسرد rules كل قاعدة يمر عليها المطابِق بالترتيب: قواعد Tailscale التلقائية، ثم قواعد الوحدات، ثم قسم [Rule] في الإعدادات، وتنتهي بـ FINAL؛ وتسمّي rule_regions مصدر كل سطر بالفهرس نفسه (front و module و configuration).
  • يأخذ POST /api/rewrites/:family الشكل {"rule": "<configuration line>"} — النص نفسه الذي تكتبه في الملف. والسطر الذي لا يمكن تحليله يُرفض بـ 400 بدل تخزينه كقاعدة لا تطابق أبداً. و :family واحدة من url-rewrite و header-rewrite و body-rewrite و mock. القواعد المضافة بهذه الطريقة تعيش في المحرك العامل ولا تُكتب في ملف الإعدادات.
  • يعيد GET /api/connections/export?format=har وثيقة HAR 1.2، ويعيد POST /api/diagnostics/bundle ملف zip — وكلاهما ملف، لذا لا يُغلَّفان في {"ok": ..., "data": ...} خلافاً لبقية النقاط. ويقبل export المعاملات source (الافتراضي current، أو history) و limit (الافتراضي 100 والحد الأقصى 300) و ids و bodies=1 لتضمين الحمولات الملتقطة. ويحمل كل مُدخل كائن _kl بما لا يوجد له حقل في HAR: السياسة المختارة، والقاعدة المطابِقة، وعمليات إعادة الكتابة التي عملت.
  • يحمل سجل الاتصال المُسلسل في GET /api/connections وGET /api/connections/history الحقل chainPath، وهو المسار من هذا الجهاز إلى المخرج، مثل Airport/HK-01 → Landing؛ ويكون فارغاً للاتصال الذي استخدم سياسة واحدة، ويحمله تصدير HAR في _kl.chain. وفي عدّادات كل سياسة في GET /api/traffic يحتسب المنبع أيضاً البايتات التي حملها للاتصالات المُسلسلة؛ أما الإجماليات العامة فتحتسبها مرة واحدة.

مثال — قراءة الحالة، ثم تبديل مجموعة سياسات:

curl -H "Authorization: Bearer your-secret-token" http://127.0.0.1:9090/api/status
{"ok":true,"data":{"running":true,"outbound_mode":0,"mitm":false, ...}}

curl -X PUT -H "Authorization: Bearer your-secret-token" \
     -d '{"policy": "ProxyB"}' http://127.0.0.1:9090/api/policies/MainGroup
{"ok":true,"data":{"outbound_mode":0,"selectable_groups":[...], ...}}

مثال — اسأل إلى أين سيذهب الطلب قبل إرساله:

curl -X POST -H "Authorization: Bearer your-secret-token" \
     -d '{"url": "https://api.example.com/v1/orders", "explain": true}' \
     http://127.0.0.1:9090/api/rules/match
{"ok":true,"data":{"policy":"MainGroup","matched":{"rule":"DOMAIN-SUFFIX,example.com,MainGroup", ...}, ...}}

ضيّق السجل إلى نظام فرعي واحد أثناء إعادة إنتاج المشكلة، دون إعادة تشغيل الجلسة:

curl -X PUT -H "Authorization: Bearer your-secret-token" \
     -d '{"level": "verbose", "sections": ["MitM", "DNS"]}' \
     http://127.0.0.1:9090/api/loglevel

ملاحظة: هذه الميزة معطلة افتراضياً. تستخدم كل استجابة الغلاف {"ok": true, "data": {...}} عند النجاح و {"ok": false, "error": {"code": "...", "message": "..."}} عند الأخطاء؛ ومحتويات الطلبات محدودة بـ 1 MB.

تقبل نقاط النهاية PUT أيضاً PATCH. وتتوفر مسارات بديلة متوافقة مع Clash للوحات المعلومات الخارجية: /version و /traffic و /connections و /configs و /proxies و /rules — المسارات قابلة للوصول، لكن الاستجابات تستخدم غلاف Chute وأسماء حقوله بدلاً من مخطط Clash (تُرجع /version القيم {"name", "run_id", "egress_probe"}، حيث يكون egress_probe قيمته network_address على محركات Apple وegress_ip على Android)، لذا لن تعمل لوحات معلومات Clash مباشرةً دون تعديل.


رابط اختبار البروكسي

[General]
proxy-test-url = http://cp.cloudflare.com/generate_204
test-timeout = 3

proxy-test-url هو رابط الاختبار لكل مجموعة url-test و fallback و load-balance لا تضبط url خاصاً بها، و test-timeout (بالثواني) هو المهلة لكل مجموعة من هذا النوع بلا timeout. تواصل المجموعات اتباع هذين المفتاحين بعد حفظ الإعدادات، ولا يتجاوزهما إلا url أو timeout مكتوب في سطر المجموعة. قيمة proxy-test-url غير الصالحة خطأ في الإعدادات. تستخدم وحدة تحكم الويب قيمة internet-test-url لاختبار الإنترنت المباشر، ويجلبها من دون بروكسي؛ وإذا لم تُضبط، يستخدم المحرك رابط نجاح مدمجاً.


UDP عبر سياسة لا تدعم UDP

udp-policy-not-supported-behaviour = DIRECT

ما يحدث لحزمة UDP عندما لا تستطيع سياستها تمرير UDP، مثل بروكسي HTTP عادي: REJECT (الافتراضي) يُسقطها، و DIRECT يرسلها مباشرة بدلاً من ذلك. ويُقرَّر block-quic قبل ذلك، بناءً على السياسة التي اختارتها القاعدة: مع block-quic = auto يُرفض QUIC المتجه إلى بروكسي لا يستطيع تمرير UDP بدلاً من إرساله مباشرة. أما بقية حركة UDP فتعود إلى DIRECT كما من قبل. ويُعامل بالطريقة نفسها UDP الخاص بـسياسة مُسلسلة لا يستطيع المرور عبر منبعها، وكذلك خادم DoQ أو DoH3 أعلى يتبع وضع الخروج إلى سياسة لا تحمل UDP: REJECT يتخطى ذلك الخادم، و DIRECT يستعلم منه مباشرة.


البروكسي الأمامي

[General]
global-underlying-proxy = Airport

يرسل كل سياسة بروكسي ليس لها underlying-proxy خاص بها عبر السياسة أو المجموعة المسمّاة — وهو ما يسمّيه Shadowrocket البروكسي الأمامي (前置代理) ولا يُضبط فيه إلا من التطبيق. وتدخل في ذلك سياسات مزودي البروكسي. وتُترك كما هي: كل سياسة قد يمر بها اتصال عبر السياسة الأمامية نفسها — أعضاؤها ومنابعهم وقفزات أي ترحيل بينها — كي لا تمر السياسة الأمامية عبر نفسها أبداً؛ والسياسة التي تكتب underlying-proxy=DIRECT، أي تنسحب منه؛ ومجموعات السياسات، إذ يقرر أعضاؤها؛ وDIRECT وREJECT وTAILSCALE. احذف المفتاح، أو اكتب DIRECT، لإيقافه. واسمٌ غير معرّف يجعل كل سياسة كان سيشملها تُرفض بدلاً من أن تتصل مباشرة.

يُقرأ close-if-proxy-chain-missing (Shadowrocket) ويُكتب مجدداً عند حفظ ملف الإعدادات. يتصرف Chute دائماً كما تفعل قيمته true: تُرفض السياسة المُسلسلة التي فُقد منبعها. أما false — القيمة الافتراضية في Shadowrocket، التي تتخطى القفزة المفقودة وتتصل بالعقدة مباشرة — فلا تُتّبع، ويُنبَّه إلى ذلك مرة واحدة.


بصمة العميل

global-client-fingerprint = chrome

يحدد بصمة عميل TLS لكل سياسة لا تحمل fingerprint خاصة بها، بما في ذلك السياسات التي يقدمها مزود البروكسي. قيمة السياسة نفسها هي الغالبة دائماً، لذا هذا افتراضي وليس تجاوزاً.

القيم المدعومة هي chrome و firefox و safari و ios، بالإضافة إلى edge و 360 و qq و android و random التي تُعامل جميعها كـ Chrome، والأسماء الأخرى المذكورة تحت fingerprint. القيمة غير المعروفة تُتجاهل مع التحذير Ignoring unsupported global-client-fingerprint '<value>' ويُستخدم مكدس TLS الخاص بالمنصة.

الافتراضي: فارغ، أي مكدس TLS الخاص بالمنصة. تقرأه سياسات ShadowTLS دائماً، وسياسات VLESS التي تضبط tls=true أو reality=true، وسياسات Trojan وVMess التي تضبط tls=true، وسياسات Shadowsocks التي تضبط ws=true وtls=true معاً؛ والسياسة التي تستخدم نقل gRPC تحتاج إلى كتابة tls=true أيضاً. ولا تقرأه سياسات ShadowsocksR.

S. Smart Rabbit LLC © All Rights Reserved            updated 2026-09-29 21:57:05

هذه الصفحة ترجمة للنسخة الإنجليزية. في حال وجود اختلاف، يُعتمد على النسخة الإنجليزية.

ملاحظة: التطبيق لا يدعم اللغة العربية حاليًا.

results matching ""

    No results matching ""