نوشتن دستی صدها قاعدهٔ DOMAIN-SUFFIX عملی نیست و پابهپای تغییر سایتها هم نمیآید. rule-providers امکان ارجاع به فهرستهایی را میدهد که بیرون نگهداری میشوند و طبق زمانبندی تازه میشوند.
ساختار پایه
دو گام: provider را تعریف کنید، بعد در rules به آن ارجاع بدهید.
rule-providers:
cn-domain:
type: http
behavior: domain
format: text
url: "https://example.com/rules/cn-domain.txt"
path: ./ruleset/cn-domain.txt
interval: 86400
proxy: DIRECT
rules:
- RULE-SET,cn-domain,DIRECT
- MATCH,PROXYفیلد به فیلد
| فیلد | مقادیر | معنی |
|---|---|---|
type | http / file / inline | راه دور، فایل محلی، یا نوشتهشده در جا |
behavior | domain / ipcidr / classical | باید با محتوای فایل بخواند |
format | text / yaml / mrs | قالب فایل |
url | نشانی فایل قواعد | وقتی type برابر http است الزامی |
path | مسیر کش محلی | نسبت به پوشهٔ پیکربندی |
interval | ثانیه | بازهٔ بهروزرسانی؛ ۸۶۴۰۰ یعنی یک روز |
proxy | نام سیاست | فایل از کدام مسیر دانلود شود |
behavior: این سه نوع جای هم نمینشینند
بیشترین خرابی همینجا رخ میدهد — behavior نادرست هیچ خطایی نمیدهد، قواعد فقط بیصدا کاری نمیکنند.
domain
فایل چنین است:
google.com
+.youtube.com
www.github.comپیشوند +. معادل DOMAIN-SUFFIX است (همهٔ زیردامنهها را میگیرد)؛ بدون آن تطبیق دقیق است.
ipcidr
1.0.1.0/24
8.8.8.8/32
2001:4860::/32classical
DOMAIN-SUFFIX,google.com
DOMAIN-KEYWORD,youtube
IP-CIDR,8.8.8.8/32,no-resolve
PROCESS-NAME,Telegram.exeتوجه کنید: فایل classical هیچ نام سیاستی ندارد. سیاست از همان خط RULE-SET میآید که به آن ارجاع میدهد.
format: قالبهای text و yaml و mrs
text: متن ساده، هر خط یک مدخل، # شروع توضیح. رایجترین.
yaml:
payload:
- google.com
- "+.youtube.com"mrs: قالبی دودویی مخصوص Mihomo، کوچک و سریع در بارگذاری. فقط domain و ipcidr را پشتیبانی میکند نه classical.
برای مجموعههای خیلی بزرگ (دهها هزار مدخل به بالا) اگر منبع نسخهٔ mrs میدهد همان را بردارید.
interval: هر چند وقت بهروز کنیم
| نوع مجموعه قاعده | بازهٔ پیشنهادی |
|---|---|
| فهرست دامنه / IP منطقهای | ۸۶۴۰۰ (یک روز) |
| فهرستهای مسدودسازی تبلیغات | ۸۶۴۰۰ |
| فهرستهای باز کردن پخش آنلاین | ۴۳۲۰۰ (نیم روز) |
| فهرستهای کوچکی که خودتان نگه میدارید | ۳۶۰۰ یا بیشتر |
خیلی کوتاه گذاشتنش به جایی نمیرسد — این فهرستها روزی چند بار عوض نمیشوند و شما فقط به میزبانشان بار میآورید.
یک پیکربندی کاری کامل
ترکیبی از مجموعهقواعد که نیازهای معمول را پوشش میدهد:
rule-providers:
# مسدودسازی تبلیغات
reject:
type: http
behavior: domain
format: text
url: "https://example.com/reject.txt"
path: ./ruleset/reject.txt
interval: 86400
proxy: DIRECT
# دامنههایی که باید مستقیم بروند
direct:
type: http
behavior: domain
format: text
url: "https://example.com/direct.txt"
path: ./ruleset/direct.txt
interval: 86400
proxy: DIRECT
# دامنههایی که پروکسی میخواهند
proxy:
type: http
behavior: domain
format: text
url: "https://example.com/proxy.txt"
path: ./ruleset/proxy.txt
interval: 86400
proxy: DIRECT
# بازههای IP درونمنطقهای
cncidr:
type: http
behavior: ipcidr
format: text
url: "https://example.com/cncidr.txt"
path: ./ruleset/cncidr.txt
interval: 86400
proxy: DIRECT
# loopback و بازههای خصوصی
lancidr:
type: http
behavior: ipcidr
format: text
url: "https://example.com/lancidr.txt"
path: ./ruleset/lancidr.txt
interval: 86400
proxy: DIRECT
rules:
- RULE-SET,lancidr,DIRECT,no-resolve
- RULE-SET,reject,REJECT
- RULE-SET,proxy,🚀 انتخاب
- RULE-SET,direct,DIRECT
- RULE-SET,cncidr,DIRECT,no-resolve
- GEOIP,CN,DIRECT
- MATCH,🐟 باقیماندهٔ ترافیکحواستان به ترتیب باشد: خصوصی ← مسدودسازی ← پروکسی ← مستقیم ← بازههای IP ← پوشش جغرافیایی ← MATCH.
فهرست پروکسی پیش از فهرست مستقیم میآید چون بعضی دامنهها در هر دو هستند و اولویت دادن به پروکسی با انتظار مردم میخواند.
inline: مجموعههای کوچک نوشتهشده در جا
وقتی نمیخواهید برای سه مدخل فایل جدا بسازید:
rule-providers:
my-work:
type: inline
behavior: domain
payload:
- "+.mycompany.com"
- "+.internal.corp"
- "gitlab.internal"file: استفاده از فایل محلی
برای قواعدی که خودتان نگه میدارید:
rule-providers:
personal:
type: file
behavior: classical
path: ./ruleset/personal.listبا تنظیم interval، بعضی نسخههای هسته فایل را دورهای دوباره میخوانند. راه مطمئن این است که بعد از ویرایش پیکربندی را دوباره بارگذاری کنید.
وقتی مجموعه قاعده کار نمیکند چه بررسی کنیم
فایل کششده را ببینید
فایلی که در path نامبرده شده در پوشهٔ پیکربندی شماست؛ فقط بازش کنید:
- فایل نیست ← دانلود شکست خورده؛ url و تنظیم proxy را بررسی کنید
- محتوای فایل HTML است ← آن url یک صفحهٔ وب برگردانده (مثلاً صفحهٔ ۴۰۴)؛ نشانی غلط است
- فایل سالم به نظر میرسد ولی قواعد کاری نمیکنند ← ناهماهنگی behavior
روی ویندوز پوشهٔ پیکربندی معمولاً این است:
%APPDATA%\io.github.clash-verge-rev.clash-verge-rev\لاگ را بخوانید
سطح لاگ را روی debug بگذارید و نام provider را جستوجو کنید؛ کل توالی دانلود و بارگذاری را میبینید:
INFO Start initial provider cn-domain
INFO Provider cn-domain loaded, 12043 rulesدیدن loaded, N rules یعنی کار کرده. اگر N صفر باشد، behavior یا قالب غلط است.
ملاحظات کارایی
اگر مجموع مجموعهقواعدتان از صدهزار مدخل میگذرد و دستگاه متوسطی دارید (روتر نرمافزاری، گوشی قدیمی)، اینها را در نظر بگیرید:
- رفتن به قالب mrs
- انداختن مجموعههایی که به کار نمیبرید (سکوهای پخشی که تماشا نمیکنید)
- جایگزین کردن بخشی از فهرستهای دامنه با
GEOSITEکه پایگاه دادهٔ توکار هسته را میگیرد و دانلود اضافه نمیخواهد
خلاصه
- behavior باید با محتوای فایل متناظر باشد؛ اشتباه بگذارید بیصدا از کار میافتد
- هنگام ارجاع به مجموعههای مبتنی بر IP گزینهٔ no-resolve بگذارید
- به هر provider فیلد
proxyبدهید تا بهروزرسانی شکست نخورد - ترتیب مجموعهها: خصوصی ← مسدودسازی ← پروکسی ← مستقیم ← IP ← GEOIP ← MATCH
- وقتی هیچ اتفاقی نمیافتد، اول ببینید در فایل کششده واقعاً چه هست
بعدی یک تمرین عملی: همزیستی شبکهٔ داخلی سازمان، دسترسی مستقیم محلی و پروکسی خارجی.
مستندات مرتبط
نحو و منطق تطبیق و هزینهٔ نسبی هر نوع قاعده، اینکه no-resolve واقعاً چه میکند، چرا ترتیب قواعد همهچیز را تعیین میکند، و چطور بفهمیم یک اتصال با کدام قاعده تطبیق خورده.
یک پیکربندی کامل که همزمان به VPN داخلی سازمان و دسترسی مستقیم محلی و سرویسهای خارجی پروکسیشده سرویس میدهد: دامنهها و بازههای IP، مسیریابی DNS، و تعارضهایی که پیش میآید.
تصویر کامل مسیریابی بر پایهٔ فرایند: روشن کردن find-process-mode، پیدا کردن نام فرایند، تفاوت PROCESS-NAME و PROCESS-PATH، هزینهٔ کارایی، و اینکه چرا قاعدهای که نوشتهاید کاری نمیکند.