خيارات متنوعة
[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.
عرض السرعة في شريط القوائم (Mac فقط)
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.
هذه الصفحة ترجمة للنسخة الإنجليزية. في حال وجود اختلاف، يُعتمد على النسخة الإنجليزية.
ملاحظة: التطبيق لا يدعم اللغة العربية حاليًا.