خيارات متنوعة
[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، يفرض هذا الخيار معالجة الاتصالات إلى نطاقات النطاق/IP هذه بواسطة Chute TUN، بدلاً من بروكسي Chute. في نسخة 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).
أسماء بديلة للتوافق: يُقبل
doh-serverكاسم بديل لـ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. يمكن تكرار السطر للسماح ببيانات اعتماد متعددة.
تجاوز طلبات النظام
bypass-system = true
عند التفعيل، تتجاوز الطلبات المرسلة بواسطة عمليات النظام معالجة Chute.
الافتراضي:
true.
Real IP دائماً
always-real-ip = *.example.com, tracker.example.org
عندما يقدم Chute عناوين IP وهمية لاستعلامات DNS المختطفة (انظر hijack-dns)، تتم الإجابة دائماً على أسماء المضيفين المطابقة لهذه القائمة المفصولة بفواصل بعناوين IP الحقيقية المحللة بدلاً من ذلك. العلامات النجمية (wildcards) مدعومة.
مقاطعة الاتصالات الحالية
interrupt-exist-connections = true
عند التفعيل، سيؤدي تغيير السياسة المختارة في أي مجموعة سياسات (عبر URL Test، Fallback، Load Balance، SSID، أو الاختيار اليدوي) إلى إنهاء الاتصالات الحالية التي كانت تستخدم السياسة القديمة بشكل آمن. هذا يضمن استخدام الاتصالات للبروكسي المختار حديثاً فوراً بدلاً من البقاء على القديم.
يتم إغلاق كل اتصال متأثر بشكل آمن مع مهلة 3 ثوانٍ قبل الإغلاق القسري.
الافتراضي:
false. هذا إعداد عام — يؤثر على جميع مجموعات السياسات.
Network Framework (macOS / tvOS)
network-framework = true
تفعيل Apple Network.framework للاتصالات الصادرة. يمكن أن يوفر استخدام Network.framework أداء أفضل وتكاملاً حديثاً مع مكدس TLS على المنصات المدعومة.
الافتراضي:
trueعلى macOS،falseعلى iOS و tvOS.
استبعاد أسماء المضيفين البسيطة
exclude-simple-hostnames = true
عند التفعيل، تتجاوز الطلبات إلى أسماء المضيفين البسيطة (أسماء ذات تسمية واحدة بدون نقطة، مثال localhost) قواعد البروكسي وتحل محلياً. هذا يساعد في تجنب استعلامات DNS غير الضرورية لأسماء الشبكة المحلية.
على Chute Mac، تُفعّل عملية ترحيل تُنفَّذ مرة واحدة هذا الخيار افتراضياً عند التشغيل الأول؛ ويُحترم إيقافه صراحةً من قبل المستخدم.
الافتراضي:
false.
تعطيل سجل قاعدة البيانات
disable-db-record = true
عند التفعيل، يتوقف Chute عن كتابة سجلات حركة المرور إلى قاعدة البيانات المحلية. هذا يمكن أن يحسن الأداء ويقلل استخدام التخزين، لكن سجل حركة المرور لن يكون متاحاً في Chute Dashboard.
الافتراضي:
false.
عرض السرعة في شريط القوائم (Mac فقط)
menu-bar-show-speed = true
عند التفعيل، يعرض Chute Mac سرعة الرفع والتنزيل الحالية في شريط القوائم.
الافتراضي:
false.
اختطاف خوادم 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.
المسارات المستبعدة
tun-excluded-routes = 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12
يستطيع Chute VIF معالجة بروتوكولات TCP و UDP فقط. استخدم هذا الخيار لتجاوز نطاقات IP محددة للسماح لجميع حركات المرور بالمرور.
ملاحظة: هذا الخيار يعمل فقط لنوع Enhanced Mode VIF (utun) — ليس له تأثير عند استخدام نوع PacketTunnel VPN. الطلبات التي يعالجها خادم بروكسي 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. استخدم هذا الخيار لإضافة مسار أصغر.
ملاحظة: هذا الخيار يعمل فقط لنوع Enhanced Mode VIF (utun) — ليس له تأثير عند استخدام نوع PacketTunnel VPN.
استكشاف البروتوكول
sniffing-enabled = true
sniffing-timeout = 100
يستطيع Chute اكتشاف البروتوكول الفعلي للاتصال عن طريق فحص البايتات الأولية. هذا يمكن قواعد مثل PROTOCOL,TLS,Proxy من العمل بشكل صحيح حتى للاتصالات الواردة غير HTTP.
sniffing-enabled (الافتراضي: false)
sniffing-enabled = true
تفعيل اكتشاف البروتوكول لاتصالات TCP.
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 مرفوضة وفقًا لتلك القاعدة. |
بالنسبة إلى حركة المرور الداخلة عبر TUN، يرد Chute على تدفق QUIC المرفوض برسالة ICMP/ICMPv6 Port Unreachable، مما يسمح للعملاء المتوافقين بالعودة إلى TCP دون انتظار انتهاء مهلة QUIC.
يتم اكتشاف QUIC الخاص بـ
block-quicتلقائيًا ولا يتطلبsniffing-enabled؛ إذ يتحكمsniffing-enabledفي اكتشاف بروتوكولات TCP. استخدم قاعدةPROTOCOL,QUIC,...عند الحاجة إلى معالجة تدفقات QUIC منفردة بواسطة القواعد.
تجاوز TUN
bypass-tun = 192.168.0.0/16, 10.0.0.0/8
مشابه لـ skip-proxy، لكنه يعمل على مستوى توجيه TUN/VIF. الاتصالات إلى نطاقات IP هذه ستتجاوز واجهة TUN بالكامل وتذهب عبر مكدس شبكة النظام مباشرة.
ملاحظة: هذا الخيار يعمل فقط لنوع Enhanced Mode VIF (utun). ليس له تأثير عند استخدام نوع PacketTunnel VPN.
عرض صفحة خطأ للرفض
show-error-page-for-reject = true
عند التفعيل، يرجع Chute صفحة خطأ سهلة الاستخدام للطلبات المرفوضة بدلاً من إسقاط الاتصال ببساطة.
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، ومفاتيحه موثقة في Replica.
الوصول إلى المتحكم الخارجي (Chute Dashboard)
external-controller-access = password@0.0.0.0:6155
يبدأ خادم التحكم عن بعد المستخدم بواسطة Chute Dashboard. القيمة هي password@host:port؛ ويمكن اختيارياً أن يسبق كلمة المرور اسم مستخدم (user:password@host:port). على iOS، تفتح قناة USB مرافقة على port + 1 (وليس على macOS). طريقة الاتصال موصوفة في صفحة Chute Dashboard.
HTTP Control API و Web UI
[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.
external-http-controller (الافتراضي: معطل)
external-http-controller = 127.0.0.1:9090
عنوان ومنفذ خادم التحكم عبر 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 البديلة فقط؛ أما أصول واجهة الويب الثابتة فلا تحتاج إلى رمز (ومع 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: شريط القوائم ← فتح وحدة تحكم الويب، و نسخ رمز وحدة تحكم الويب. وفي نافذة تفاصيل الاتصال زر الطلبات والسجل يفتح وحدة التحكم أيضاً — صفحتها الرئيسية لا ذلك الاتصال.
- Chute iOS: لوحة التحكم ← صف واجهة الويب ← فتح أو نسخ العنوان أو نسخ رمز الوصول.
- Chute tvOS: في لوحة التحكم صف مستقل باسم Web UI Address تحت مفتاح واجهة الويب يعرض المضيف والمنفذ. وعند اختياره يظهر رمز QR إن كان المستمع متاحاً من أجهزة أخرى — ورمز تسجيل الدخول داخل الرمز لا على الشاشة — أما إن كانت وحدة التحكم مربوطة بعنوان محلي فيظهر شرح بدلاً منه، لأن وحدة تحكم محلية لا يمكن فتحها من هاتف.
- Chute Android: تعرض لوحة التحكم العنوان كعنوان فرعي لمفتاح HTTP API، وصفاً مستقلاً باسم 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 |
مجموعات السياسات والاختيار الحالي |
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 |
POST |
/api/diagnostics/ping |
فحص وصول عبر ICMP أو TCP |
POST |
/api/diagnostics/dns-query |
حلّ نطاق عبر المحلِّل العامل |
POST |
/api/diagnostics/egress-probe |
كشف عنوان الخروج الحالي |
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/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، وإلا كُتبت العناصر النائبة في الإعدادات حرفياً.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, level, section, message}.- يبلّغ
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. - يجيب
POST /api/rules/matchعن إلى أين سيذهب الطلب، دون فتح اتصال. يقبلhost(أوurlيأخذ منه المضيف والمنفذ)، و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. - يأخذ
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: السياسة المختارة، والقاعدة المطابِقة، وعمليات إعادة الكتابة التي عملت.
مثال — قراءة الحالة، ثم تبديل مجموعة سياسات:
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"})، لذا لن تعمل لوحات تحكم Clash مباشرةً دون تعديل.
بصمة العميل
global-client-fingerprint = chrome
يحدد بصمة عميل TLS لكل سياسة لا تحمل fingerprint خاصة بها. قيمة السياسة نفسها تسبق دائماً، لذا هذا افتراضي وليس تجاوزاً.
القيم المدعومة هي chrome و firefox و safari و ios، بالإضافة إلى edge و 360
و qq و android و random التي تُعامل جميعها كـ Chrome. القيمة غير
المعروفة تُتجاهل وتُستخدم حزمة TLS الخاصة بالنظام.
الافتراضي: فارغ، أي حزمة TLS الخاصة بالنظام. تقرأه فقط سياسات Trojan وVMess وVLESS وShadowTLS.
هذه الصفحة ترجمة للنسخة الإنجليزية. في حال وجود اختلاف، يُعتمد على النسخة الإنجليزية.
ملاحظة: التطبيق لا يدعم اللغة العربية حاليًا.