القواعد
يستطيع Chute توجيه الطلبات إلى خادم بروكسي آخر أو الاتصال بالمضيف مباشرة، وفقاً لقواعد مخصصة.
الأولوية
تتم مطابقة القواعد من الأولى إلى الأخيرة، بالترتيب الذي تظهر به في ملف الإعدادات. بمعنى آخر، القواعد في أعلى القائمة لها أولوية أعلى من القواعد التي تليها. تُوضع القواعد التي تضيفها الوحدات قبل قواعد ملف الإعدادات نفسه، بترتيب تحميل الوحدات، وتأتي القواعد التي يُدرجها Chute أثناء التشغيل لـ Tailscale قبلهما معاً.
التركيب
تتكون كل قاعدة من 3 أجزاء: نوع القاعدة، مطابق حركة المرور (باستثناء قاعدة FINAL)، وسياسة: TYPE, VALUE, POLICY. مثال: DOMAIN-SUFFIX,apple.com,DIRECT IP-CIDR,192.168.0.0/16,ProxyA
يجب أن تكون السياسة اسم خادم بروكسي، أو مجموعة سياسات، أو سياسة مدمجة مثل DIRECT أو REJECT (أو إحدى صيغها) أو PROXY. ينبغي أن تنتهي القواعد بقاعدة FINAL لتعريف السلوك الافتراضي. إذا لم يحتوِ ملف الإعدادات على قاعدة FINAL، يتصرف Chute كما لو أُضيفت FINAL,DIRECT في النهاية.
مثال:
[Rule]
DOMAIN-SUFFIX,company.com,ProxyA
DOMAIN-KEYWORD,google,DIRECT
GEOIP,US,DIRECT
IP-CIDR,192.168.0.0/16,DIRECT
FINAL,ProxyB
أنواع القواعد
قواعد مبنية على النطاق
| النوع | الصيغة | يطابق |
|---|---|---|
| DOMAIN | DOMAIN,www.apple.com,Proxy |
تطابق تام لاسم النطاق |
| DOMAIN-SUFFIX | DOMAIN-SUFFIX,apple.com,Proxy |
تطابق لاحقة اسم النطاق |
| DOMAIN-KEYWORD | DOMAIN-KEYWORD,google,Proxy |
احتواء النطاق على كلمة مفتاحية |
| DOMAIN-WILDCARD | DOMAIN-WILDCARD,*.apple.com,Proxy |
تطابق نمط أحرف البدل |
| DOMAIN-REGEX | DOMAIN-REGEX,^mail\..+\.com$,Proxy |
تطابق تعبير نمطي للنطاق |
| DOMAIN-SET | DOMAIN-SET,https://example.com/domains.txt,DIRECT |
مجموعة نطاقات يتم تنزيلها من رابط URL |
قواعد مبنية على IP
| النوع | الصيغة | يطابق |
|---|---|---|
| IP-CIDR | IP-CIDR,192.168.0.0/16,DIRECT |
عنوان IP في نطاق CIDR |
| IP-CIDR6 | IP-CIDR6,2001:db8::/32,DIRECT |
عنوان IPv6 في نطاق CIDR |
| GEOIP | GEOIP,US,DIRECT |
رمز الدولة من قاعدة بيانات GeoIP |
| IP-ASN | IP-ASN,13335,DIRECT |
عنوان IP ينتمي إلى ASN |
قواعد مستوى HTTP
| النوع | الصيغة | يطابق |
|---|---|---|
| USER-AGENT | USER-AGENT,Instagram*,DIRECT |
ترويسة User-Agent |
| URL-REGEX | URL-REGEX,^http://google\.com.*,DIRECT |
تطابق الرابط الكامل لطلب HTTP عادي مع تعبير نمطي |
| PROTOCOL | PROTOCOL,TLS,Proxy |
البروتوكول المكتشف (HTTP/TLS/QUIC/إلخ) |
قواعد العملية (macOS و Android)
| النوع | الصيغة | يطابق |
|---|---|---|
| PROCESS-NAME | PROCESS-NAME,Telegram,Proxy |
اسم العملية (مطابقة أحرف البدل) |
| PROCESS-PATH | PROCESS-PATH,/Applications/Safari.app,Proxy |
مسار العملية الكامل (مطابقة أحرف البدل) |
| PROCESS-NAME-REGEX | PROCESS-NAME-REGEX,^Safari$,DIRECT |
اسم العملية (مطابقة تعبير نمطي) |
قواعد المنفذ والمصدر
| النوع | الصيغة | يطابق |
|---|---|---|
| DEST-PORT | DEST-PORT,80,DIRECT |
منفذ الوجهة |
| SRC-IP | SRC-IP,192.168.20.100,DIRECT |
عنوان IP المصدر (عنوان IP مفرد أو CIDR) |
| SRC-PORT | SRC-PORT,52345,DIRECT |
منفذ المصدر |
| IN-PORT | IN-PORT,6152,DIRECT |
منفذ البروكسي الوارد على Chute |
قواعد المطابقة المتقدمة
| النوع | الصيغة | يطابق |
|---|---|---|
| SUBNET | SUBNET,TYPE:WIFI,Proxy |
سمات الشبكة الفرعية (TYPE, BSSID, SSID, ROUTER) |
| HOSTNAME-TYPE | HOSTNAME-TYPE,AAAA,Proxy |
نوع سجل DNS (A/AAAA/إلخ) |
| IN-TYPE | IN-TYPE,SOCKS5,Proxy |
نوع الاتصال الوارد (HTTP/SOCKS5/TUN) |
| IN-USER | IN-USER,user1,Proxy |
اسم مستخدم المصادقة الواردة |
| IN-NAME | IN-NAME,my-proxy,Proxy |
اسم خادم البروكسي الوارد |
ملاحظة: تطابق قاعدتا SUBNET وHOSTNAME-TYPE حركة المرور الفعلية — تطابق SUBNET الشبكة التي يتصل بها الجهاز حالياً (لا يملك Apple TV هوية شبكة، لذا لا تطابق SUBNET عليه أبداً). وتطابق IN-TYPE وIN-USER حركة المرور الفعلية أيضاً: تسمّي IN-TYPE المدخل الذي وصل عبره الاتصال (
HTTPأوSOCKS5أوTUN)، وتسمّي IN-USER اسم المستخدم الذي تحقّق منه ذلك المدخل مقابلhttp-auth— وبلا بيانات اعتماد مُعدّة لا يوجد ما يُتحقق منه، فلا تطابق IN-USER شيئاً. أما IN-NAME فمقبولة كي يُحمَّل ملف Surge، لكن Chute يشغّل مستمع HTTP واحداً ومستمع SOCKS5 واحداً بلا أسماء، فلا يوجد اسم مدخل لمطابقته ولا تُفعَّل القاعدة أبداً؛ استخدم IN-TYPE أو IN-PORT بدلاً منها.
قواعد الدمج المنطقي
| النوع | الصيغة | يطابق |
|---|---|---|
| AND | AND,((DOMAIN,example.com),(DEST-PORT,443)),Proxy |
جميع القواعد الفرعية متطابقة |
| OR | OR,((DOMAIN,example.com),(DOMAIN,test.com)),Proxy |
أي قاعدة فرعية متطابقة |
| NOT | NOT,((DOMAIN,example.com)),Proxy |
القاعدة الفرعية غير متطابقة |
قواعد خاصة
| النوع | الصيغة | يطابق |
|---|---|---|
| RULE-SET | RULE-SET,SYSTEM,DIRECT |
حزمة قواعد من رابط URL أو مزود قواعد أو مجموعات مدمجة |
| SCRIPT | SCRIPT,MyRuleScript,PROXY |
مطابقة قواعد مخصصة عبر JavaScript |
| FINAL | FINAL,ProxyB |
الافتراضي عند عدم تطابق أي قاعدة أخرى (يجب أن يكون الأخير) |
الخيارات
no-resolve
بالنسبة لطلب يكون اسم مضيفه نطاقاً، يقيّم Chute قائمة القواعد على مرحلتين. في المرحلة الأولى، يتم تخطي القواعد المبنية على IP (GEOIP و IP-CIDR و IP-ASN). إذا لم تتطابق أي قاعدة أخرى، يحلّ Chute النطاق عبر DNS ثم يقيّم القواعد مرة أخرى باستخدام عنوان IP الناتج. أضف خيار no-resolve لإبقاء القاعدة المبنية على IP متخطاة في المرحلة الثانية أيضاً، بحيث لا تطابق إلا الطلبات التي تحمل عنوان IP بالفعل.
GEOIP,US,DIRECT,no-resolve
IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
على سطر RULE-SET، يشمل no-resolve كل قاعدة مبنية على IP داخل المجموعة، كأن كل واحدة منها تحمله: RULE-SET,https://example.com/cn-ip.list,DIRECT,no-resolve. أما المجموعتان المدمجتان SYSTEM وLAN فتُفكّان إلى قواعد منفصلة ولا تأخذان هذا الخيار.
ملاحظة: بسبب التقييم على مرحلتين، يمكن لقاعدة لاحقة غير مبنية على IP أن تطابق قبل قاعدة سابقة مبنية على IP لطلب اسم مضيفه نطاق. إذا فشل تحليل DNS، فإن القواعد المبنية على IP ببساطة لن تطابق أبداً وتُطبق قاعدة FINAL؛ ولا يتم إجهاض تقييم القواعد.
force-remote-dns
فرض تحليل DNS عبر خادم البروكسي البعيد بدلاً من DNS المحلي.
DOMAIN-SUFFIX,google.com,Proxy,force-remote-dns
ملاحظة: يتم تحليل هذا الخيار حالياً لأغراض التوافق فقط وليس له أي تأثير في الإصدارات الحالية.
extended-matching
توسيع مطابقة القاعدة المبنية على النطاق لتفحص أيضاً ترويسة Host في HTTP بالإضافة إلى اسم مضيف الاتصال. تأتي الترويسة من أول طلب في اتصال العميل بمستمع بروكسي HTTP — وفي HTTPS هي ترويسة Host الخاصة بطلب CONNECT نفسه — لذا يفيد هذا الخيار عندما يوجّه العميل طلبه إلى عنوان IP، أو إلى اسم غير الذي تحمله ترويسة Host. أما الاتصالات عبر TUN أو SOCKS5 فلا تحمل ترويسة Host، ولا يغيّر الخيار فيها شيئاً.
DOMAIN-SUFFIX,example.com,Proxy,extended-matching
requires-resolve
بالنسبة لقواعد SCRIPT، يقبل المحلل هذا الخيار لكنه لا يؤخر تقييم السكريبت. يتوفر $request.dnsResult في السكريبت فقط عندما تكون الجلسة قد حُلّت بالفعل (على سبيل المثال، الطلبات الموجهة مباشرة إلى عنوان IP، أو مرحلة المطابقة الثانية بعد تحليل DNS).
SCRIPT,MyRuleScript,PROXY,requires-resolve
pre-matching
صالح فقط للقواعد التي سياستها REJECT أو أحد صيغها (REJECT-DROP وREJECT-TINYGIF وغيرها). تُقيَّم قواعد pre-matching في مرحلة منفصلة قبل ذاكرة التخزين المؤقت لنتائج القواعد وقبل جدول القواعد العادي، لذا يُطبق الرفض المطابق في المرحلة الأولى، قبل أي تحليل DNS قد يستدعيه جدول القواعد. يقبل سطر RULE-SET أو DOMAIN-SET الخيار pre-matching ويحتفظ به، لكن المجموعة لا تُطابَق في تلك المرحلة المبكرة: فهي تشارك في موضعها نفسه من قائمة القواعد.
DOMAIN-SUFFIX,tracker.example.com,REJECT,pre-matching
dns-failed
صالح فقط لقاعدة FINAL. عندما يتطلب قرار الطلب بحث DNS محلياً ويفشل هذا البحث، يُسلَّم الطلب إلى سياسة FINAL بدلاً من أن يفشل — راجع القاعدة النهائية.
FINAL,Proxy,dns-failed
notification-text
يرسل إشعار نظام عند مطابقة القاعدة: العنوان هو النص، والمحتوى يذكر الوجهة والسياسة (host:port → policy؛ وعلى Android host:port · policy · process). يحدد notification-interval عدد الثواني التي يجب أن تمر قبل أن تُرسل القاعدة نفسها إشعاراً آخر (الافتراضي 300). يمكن لأي قاعدة، بما فيها FINAL، أن تحمل هذين الخيارين. يقبلهما سطر RULE-SET أو DOMAIN-SET ويحتفظ بهما، لكن المطابقة داخل المجموعة لا ترسل إشعاراً أبداً.
DOMAIN-SUFFIX,bank.example,DIRECT,notification-text="Bank site opened",notification-interval=60
FINAL,Proxy,notification-text=Fell%20to%20FINAL
ضع النص الذي يحتوي على مسافات بين علامتي اقتباس، أو اكتب كل مسافة على الشكل %20، واكتب الفاصلة %2C. يرسل Chute الإشعار بنفسه ويتبع مفتاح التطبيق الخاص بهذه الإشعارات — Allow Notification على iPhone، وShow report event notifications على Mac، وإذن الإشعارات الذي يمنحه النظام لـ Chute على Android — فلا يظهر شيء عند إيقافه، ولا يُعرض الإشعار على Apple TV أبداً. تُسجَّل كل مطابقة أيضاً كحدث إشعار قاعدة — راجع تقارير الإشعارات.
الأسماء البديلة
- يُقبل
DOMAIN-MATCHكاسم بديل لـDOMAIN-KEYWORD. - يُقبل
NETWORKكاسم بديل لـPROTOCOL. - يُقبل
DST-PORTكاسم بديل لـDEST-PORT.
مجموعة النطاقات
يدعم Chute تحميل مجموعات النطاقات من رابط URL خارجي باستخدام نوع القاعدة DOMAIN-SET. يجب أن يكون الحقل الأول بعد النوع رابط http(s). المعامل الاختياري update-interval هو أقصى عمر بالثواني تبلغه النسخة المنزّلة قبل أن تُنزَّل من جديد؛ ولا يوجد مؤقت — راجع مجموعة القواعد الخارجية.
DOMAIN-SET,https://example.com/domains.txt,DIRECT
DOMAIN-SET,https://example.com/domains.txt,DIRECT,update-interval=86400
يحتوي ملف مجموعة النطاقات على نطاقات مجردة، واحد لكل سطر: example.com يطابق النطاق بعينه؛ .example.com أو +.example.com يطابق النطاق وجميع نطاقاته الفرعية. الأسطر التي تبدأ بـ # أو // هي تعليقات.
هذه الصفحة ترجمة للنسخة الإنجليزية. في حال وجود اختلاف، يُعتمد على النسخة الإنجليزية.
ملاحظة: التطبيق لا يدعم اللغة العربية حاليًا.