Skip to content

مسیریابی — 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-REGEXregex RE2 در برابر دامنهٔ کاملDOMAIN-REGEX,^([a-z]+)\.cdn\.example$,proxy
DOMAIN-WILDCARDglob با *+ که با یک برچسب تطبیق دارد)DOMAIN-WILDCARD,*.example.com,proxy
GEOSITEدسته از geosite.dat / MaxMindGEOSITE,category-ads,REJECT
GEOIPدسته از geoip.dat / MaxMindGEOIP,CN,DIRECT
IP-CIDRتطبیق CIDRIP-CIDR,10.0.0.0/8,DIRECT,no-resolve
IP-SUFFIXتطبیق بر اساس بیت‌های انتهایی IPIP-SUFFIX,::1/128,DIRECT
IP-ASNASN از MaxMindIP-ASN,13335,proxy

تطبیق‌دهنده‌های منبع

نوعبارمثال
SRC-IP-CIDRCIDR منبعSRC-IP-CIDR,192.168.1.0/24,DIRECT
SRC-IP-SUFFIXIP-suffix منبعSRC-IP-SUFFIX,::1/128,DIRECT
SRC-GEOIPدستهٔ GeoIP منبعSRC-GEOIP,CN,DIRECT
SRC-IP-ASNASN منبع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
NETWORKtcp یا udpNETWORK,udp,proxy-udp
DSCPمقدار DSCPDSCP,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-REGEXregexPROCESS-NAME-REGEX,^chrome.*$,proxy
PROCESS-NAME-WILDCARD / PROCESS-PATH-WILDCARDglobPROCESS-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 به آن‌ها ارجاع می‌دهید. دو نوع ترابرد و سه قالب:

yaml
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 به آن‌ها فراخوانی کنید. برای تو در توی منطق قاعده بدون تکرار آن مفید است.

yaml
sub-rules:
  sub-udp:
    - GEOIP,CN,DIRECT
    - MATCH,udp-proxy

rules:
  - SUB-RULE,(NETWORK,udp),sub-udp
  - MATCH,proxy

مثال‌ها

مسیریابی کلاسیک با عبور از CN:

yaml
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

تقسیم بر اساس فرایند:

yaml
rules:
  - PROCESS-NAME,curl,DIRECT
  - PROCESS-NAME-WILDCARD,fire*,proxy
  - MATCH,DIRECT

ترکیب‌کننده‌های بولی:

yaml
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:

yaml
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 مراجعه کنید.

Core Tutorial اثر Argsment