مسیریابی — mihomo
موتور مسیریابی mihomo فهرستی از رشتههای قاعدهٔ تکخطی فشرده زیر کلید سطح بالای rules: است. هر قاعده فرم زیر را دارد:
<TYPE>,<payload>,<target>[,no-resolve][,src]قواعد به ترتیب اعلان ارزیابی میشوند؛ اولین قاعدهٔ تطبیقیافته برنده است. هدف یا نام پراکسی است، یا نام گروه پراکسی، یا یکی از نامهای توکار DIRECT / REJECT / COMPATIBLE.
انواع قاعده
mihomo بیش از ۳۰ نوع قاعده تعریف میکند. پرکاربردترینها:
تطبیقدهندههای مقصد
| نوع | بار | مثال |
|---|---|---|
DOMAIN | دامنهٔ دقیق | DOMAIN,example.com,proxy |
DOMAIN-SUFFIX | تطبیق پسوند (هر زیردامنه) | DOMAIN-SUFFIX,example.com,proxy |
DOMAIN-KEYWORD | تطبیق زیررشته در هر برچسب | DOMAIN-KEYWORD,google,proxy |
DOMAIN-REGEX | regex RE2 در برابر دامنهٔ کامل | DOMAIN-REGEX,^([a-z]+)\.cdn\.example$,proxy |
DOMAIN-WILDCARD | glob با * (و + که با یک برچسب تطبیق دارد) | DOMAIN-WILDCARD,*.example.com,proxy |
GEOSITE | دسته از geosite.dat / MaxMind | GEOSITE,category-ads,REJECT |
GEOIP | دسته از geoip.dat / MaxMind | GEOIP,CN,DIRECT |
IP-CIDR | تطبیق CIDR | IP-CIDR,10.0.0.0/8,DIRECT,no-resolve |
IP-SUFFIX | تطبیق بر اساس بیتهای انتهایی IP | IP-SUFFIX,::1/128,DIRECT |
IP-ASN | ASN از MaxMind | IP-ASN,13335,proxy |
تطبیقدهندههای منبع
| نوع | بار | مثال |
|---|---|---|
SRC-IP-CIDR | CIDR منبع | SRC-IP-CIDR,192.168.1.0/24,DIRECT |
SRC-IP-SUFFIX | IP-suffix منبع | SRC-IP-SUFFIX,::1/128,DIRECT |
SRC-GEOIP | دستهٔ GeoIP منبع | SRC-GEOIP,CN,DIRECT |
SRC-IP-ASN | ASN منبع | SRC-IP-ASN,4134,DIRECT |
SRC-PORT | بازهٔ پورت منبع | SRC-PORT,53,DNS |
IN-PORT | پورت شنوندهٔ ورودی | IN-PORT,8388,DIRECT |
IN-USER | کاربر احراز هویت ورودی | IN-USER,alice,proxy |
IN-NAME | نام شنوندهٔ ورودی | IN-NAME,vless-in,proxy |
IN-TYPE | نوع شنوندهٔ ورودی | IN-TYPE,SOCKS5,proxy |
تطبیقدهندههای اتصال
| نوع | بار | مثال |
|---|---|---|
DST-PORT | پورت مقصد (تکی، بازه، لیست) | DST-PORT,443,proxy |
NETWORK | tcp یا udp | NETWORK,udp,proxy-udp |
DSCP | مقدار DSCP | DSCP,46,proxy-priority |
UID | شناسهٔ کاربر محلی (Linux/macOS) | UID,1000,proxy |
تطبیقدهندههای فرایند
| نوع | بار | مثال |
|---|---|---|
PROCESS-NAME | نام پایهٔ فرایند | PROCESS-NAME,curl,proxy |
PROCESS-PATH | مسیر مطلق | PROCESS-PATH,/usr/bin/curl,proxy |
PROCESS-NAME-REGEX / PROCESS-PATH-REGEX | regex | PROCESS-NAME-REGEX,^chrome.*$,proxy |
PROCESS-NAME-WILDCARD / PROCESS-PATH-WILDCARD | glob | PROCESS-NAME-WILDCARD,fire*,proxy |
مجموعه و انواع ترکیبکننده
| نوع | بار | مثال |
|---|---|---|
RULE-SET | نام مجموعه قواعد (اعلانشده در rule-providers) | RULE-SET,gfw,proxy |
SUB-RULE | زیرقاعدهٔ نامدار (اعلانشده در sub-rules) | SUB-RULE,(NETWORK,udp),sub-udp |
AND / OR / NOT | ترکیبکنندههای بولی | AND,((DOMAIN-SUFFIX,com),(IP-CIDR,1.0.0.0/8)),proxy |
MATCH | پیشفرض بدون شرط | MATCH,proxy |
اصلاحکنندهها
پس از هدف، دو اصلاحکنندهٔ اختیاری جداشده با کاما مجاز هستند:
no-resolve— برای قواعد IP/GEOIP، یک دامنهٔ مقصد را برای تطبیق به IP حل نکن. قاعده را سریعتر میکند ولی به قیمت دقت.src— برای قواعد IP-suffix، روی IP منبع بهجای IP مقصد تطبیق میدهد.
rule-providers
سطح بالای rule-providers: منابع قاعدهٔ نامدار را اعلان میکند که از قواعد RULE-SET به آنها ارجاع میدهید. دو نوع ترابرد و سه قالب:
rule-providers:
geosite-cn:
type: http
behavior: domain # 'domain', 'ipcidr', or 'classical'
format: mrs # 'yaml', 'text', or 'mrs' (binary)
url: https://example.com/geosite-cn.mrs
interval: 86400 # refresh interval in seconds
path: ./rule-providers/geosite-cn.mrs
proxy: DIRECT # outbound used for the download
local-block:
type: file
behavior: classical
format: yaml
path: ./rule-providers/block.yamlرفتارها:
domain— بار یک دامنه در هر خط. سریع.ipcidr— بار یک CIDR در هر خط.classical— بار رشتههای کامل قاعدهٔ mihomo است (همه چیز جز هدف). کندتر اما انعطافپذیرترین.
sub-rules
سطح بالای sub-rules: لیستهای زیرقاعدهٔ نامدار را اعلان میکند که میتوانید با SUB-RULE به آنها فراخوانی کنید. برای تو در توی منطق قاعده بدون تکرار آن مفید است.
sub-rules:
sub-udp:
- GEOIP,CN,DIRECT
- MATCH,udp-proxy
rules:
- SUB-RULE,(NETWORK,udp),sub-udp
- MATCH,proxyمثالها
مسیریابی کلاسیک با عبور از CN:
rules:
- DOMAIN-SUFFIX,local,DIRECT
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- GEOSITE,cn,DIRECT
- GEOIP,CN,DIRECT
- MATCH,proxyتقسیم بر اساس فرایند:
rules:
- PROCESS-NAME,curl,DIRECT
- PROCESS-NAME-WILDCARD,fire*,proxy
- MATCH,DIRECTترکیبکنندههای بولی:
rules:
- AND,((NETWORK,udp),(DST-PORT,443)),quic-proxy
- OR,((DOMAIN-SUFFIX,onion),(GEOSITE,private)),tor
- NOT,((GEOIP,CN)),proxy
- MATCH,DIRECTاستفاده از rule-providers با قاعدهٔ RULE-SET:
rule-providers:
gfw:
type: http
behavior: domain
format: mrs
url: https://example.com/gfw.mrs
interval: 86400
path: ./providers/gfw.mrs
rules:
- RULE-SET,gfw,proxy
- MATCH,DIRECTنکات
- قواعد به ترتیب ارزیابی میشوند. اصلاحکنندههای
no-resolveرا روی قواعد IP در ابتدای لیست قرار دهید تا برای ترافیک بهوضوح محلی، از یک جستوجوی DNS در هر اتصال جلوگیری شود. - انواع قاعدهٔ
GEOSITE/GEOIPازgeoip.dat/Country.mmdbوgeosite.datمیخوانند. بازنویسی URL در بلوک سطح بالایgeox-urlقرار دارد. - نحو ترکیبکننده (
AND,(<rule>,<rule>),target) از پرانتزهایی پیرامون هر قاعدهٔ تو در تو استفاده میکند. قواعد تو در تو هدف را حذف میکنند — هدف روی ترکیبکنندهٔ بیرونی اعمال میشود. - قواعد
RULE-SETاصلاحکنندههایno-resolve/srcروی قاعدهٔ بیرونی را نادیده میگیرند؛ به جای آن این ویژگیها را روی خود اعلان rule-provider تنظیم کنید. - mihomo فیلد
finalندارد. برای رفتار catch-all،MATCH,<target>را در پایانrules:استفاده کنید.
نکات بینهستهای
- Xray-core از قواعد ساختاریافتهٔ JSON با فیلدهای هر معیار و یک شکل تطبیق چندریختی استفاده میکند. فرم رشتهٔ فشرده وجود ندارد. به Routing — Xray-core مراجعه کنید.
- sing-box نیز از قواعد ساختاریافته استفاده میکند، اما با enumهای
actionصریح (route / direct / bypass / reject / hijack-dns / sniff / resolve) و یک بلوک جداگانهٔrule_setبرای لیستهای قواعد نامدار. به Routing — sing-box مراجعه کنید.
