Skip to content

گروه‌های پراکسی — mihomo

گروه‌های پراکسی بسته‌های نام‌دار پراکسی‌ها / دیگر گروه‌ها هستند که به‌عنوان یک خروجی نام‌دار واحد عمل می‌کنند. mihomo چهار نوع گروه ارائه می‌دهد: select (دستی)، url-test (خودکار مبتنی بر تأخیر)، fallback (ترتیبی مبتنی بر سلامت) و load-balance (توزیع ترافیک).

گزینه‌های مشترک

هر نوع گروه پایهٔ مشترک GroupCommonOption را حمل می‌کند. تگ group:"..." ساختار، مخصوص خود mihomo است — کلیدهای YAML با تگ مطابقت دارند.

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
namestring(required)<string>نام منحصربه‌فرد گروه. از طریق قواعد و دیگر گروه‌ها به آن ارجاع می‌شود.
typestring(required)select | url-test | fallback | load-balanceنوع گروه. `relay` حذف شد — به‌جای آن از `dialer-proxy` روی ورودی پراکسی استفاده کنید.
proxies[]string[][<proxy or group name>]لیست صریح اعضا. برای عضویت مبتنی بر تأمین‌کننده از `use:` استفاده کنید.
use[]string[][<proxy-provider name>]کشیدن اعضا از proxy-providerهای نام‌دار.
urlstring(required for url-test/fallback)<URL>URL بررسی سلامت — یک GET دوره‌ای روی این URL تأخیر اعضا را اندازه‌گیری می‌کند. معمول: `http://www.gstatic.com/generate_204`.
intervalint300<seconds>ثانیه‌های بین بررسی‌های سلامت.
timeoutint5000<milliseconds>زمان انتظار بررسی سلامت بر حسب میلی‌ثانیه.
max-failed-timesint5<int>تعداد شکست‌های متوالی بررسی سلامت قبل از این‌که یک عضو از کار افتاده در نظر گرفته شود.
lazybooltruetrue | falseوقتی true باشد، بررسی‌های سلامت تنها زمانی اجرا می‌شوند که گروه فعالانه در حال استفاده باشد. در گروه‌های در حالت آماده‌باش پهنای باند صرفه‌جویی می‌کند.
disable-udpboolfalsetrue | falseترافیک UDP را در این گروه رد می‌کند. وقتی همهٔ اعضا از UDP پشتیبانی نمی‌کنند مفید است.
filterstring(unset)<regex> | <regex>`<regex>...فیلتر regex اعمال‌شده روی نام اعضا. چند regex را می‌توان با backtick جدا کرد.
exclude-filterstring(unset)<regex>فیلتر regex — هر عضوی را که نامش تطبیق دارد حذف می‌کند.
exclude-typestring(unset)<proxy type>حذف اعضای از نوع‌های خاص (مثلاً `direct,ss`).
expected-statusstring*<HTTP status range>کدهای وضعیت بررسی سلامت قابل قبول. `2xx` یا `200-204,301`.
include-allboolfalsetrue | falseگنجاندن خودکار همهٔ پراکسی‌ها و تأمین‌کننده‌ها — از فهرست‌کردن دستی آن‌ها صرفه‌جویی می‌کند.
include-all-proxiesboolfalsetrue | falseگنجاندن خودکار همهٔ ورودی‌های پراکسی (اما نه تأمین‌کننده‌ها).
include-all-providersboolfalsetrue | falseگنجاندن خودکار همهٔ proxy-providerها (اما نه پراکسی‌های مستقیم).
hiddenboolfalsetrue | falseگروه را از رابط کاربری داشبورد پنهان می‌کند.
iconstring(unset)<URL>URL آیکونی که توسط داشبوردهای سازگار نمایش داده می‌شود.

منبع: adapter/outboundgroup/parser.go:25-45 · ثابت‌شده در v1.19.24 (a847246)

type: select

انتخاب دستی. گروه انتخاب فعلی خود را به Clash API آشکار می‌کند (داشبوردها به کاربران اجازهٔ سوییچ می‌دهند). بدون بررسی سلامت — عضو انتخاب‌شده به همان شکل استفاده می‌شود.

yaml
proxy-groups:
  - name: Manual
    type: select
    proxies: [Proxy-A, Proxy-B, Proxy-C, DIRECT]

type: url-test

انتخاب خودکار سریع‌ترین عضو از طریق پروبِ تأخیر URL دوره‌ای. پروب هر interval ثانیه اجرا می‌شود؛ انتخاب فعال تنها زمانی تغییر می‌کند که عضو جدیدی بیش از tolerance میراثی سریع‌تر باشد (تجزیه‌شده توسط parseURLTestOption در adapter/outboundgroup/urltest.go:198-205).

yaml
proxy-groups:
  - name: Auto
    type: url-test
    url: http://www.gstatic.com/generate_204
    interval: 300
    timeout: 5000
    tolerance: 50
    proxies: [Proxy-JP, Proxy-US, Proxy-HK, Proxy-SG]

گزینهٔ اضافی:

  • tolerance (int, میلی‌ثانیه) — آستانهٔ سوییچ. پیش‌فرض ۰ است (همیشه به سریع‌ترین مطلق سوییچ می‌کند، که می‌تواند نوسان ایجاد کند).

type: fallback

استفاده از اولین عضوی که پاسخ می‌دهد. اعضا به ترتیب اعلان از نظر سلامت بررسی می‌شوند؛ اولینی که زنده است تمام ترافیک را حمل می‌کند. برای الگوهای «اصلی + پشتیبان» مفید است.

yaml
proxy-groups:
  - name: HA
    type: fallback
    url: http://www.gstatic.com/generate_204
    interval: 60
    timeout: 3000
    max-failed-times: 3
    proxies: [Primary, Backup, DIRECT]

type: load-balance

توزیع ترافیک بین اعضا. فیلد strategy الگوریتم را انتخاب می‌کند:

استراتژیرفتار
round-robinچرخش بین اعضا به ترتیب.
consistent-hashingهش دامنهٔ مقصد — همان دامنه همیشه به همان عضو می‌رود. برای مسیریابی چسبان CDN مفید است.
sticky-sessionsاولین اتصال از یک کلاینت یک عضو انتخاب می‌کند؛ اتصالات بعدی از همان کلاینت از آن دوباره استفاده می‌کنند.
yaml
proxy-groups:
  - name: Distributed
    type: load-balance
    url: http://www.gstatic.com/generate_204
    interval: 300
    strategy: consistent-hashing
    proxies: [Proxy-1, Proxy-2, Proxy-3]

type: relay — حذف شد

یک گروه زنجیره‌ای از پراکسی‌ها بود. حذف شد؛ جایگزین آن فیلد dialer-proxy: در هر پراکسی است (برای مثال به Direct مراجعه کنید). پیکربندی‌هایی که هنوز type: relay را اعلان می‌کنند با خطای صریح هنگام راه‌اندازی شکست می‌خورند (adapter/outboundgroup/parser.go:187-188).

ابزارهای مجموعه-عضو

وقتی پراکسی‌های زیادی دارید، فهرست‌کردن دستی آن‌ها در هر گروه دردناک است. چهار پرچم include-all* به‌علاوهٔ filter / exclude-filter این مشکل را حل می‌کنند:

yaml
proxy-groups:
  - name: All-JP
    type: url-test
    url: http://www.gstatic.com/generate_204
    interval: 300
    include-all: true
    filter: 'JP|Japan|🇯🇵'
    exclude-type: 'direct,reject'

این چهار پرچم به‌تدریج بالا می‌روند:

  • include-all: true خلاصه‌ای برای هر دوی include-all-proxies و include-all-providers: true است.
  • include-all-proxies ورودی‌های موجود در proxies: را پوشش می‌دهد.
  • include-all-providers ورودی‌های کشیده‌شده از طریق proxy-providers: را پوشش می‌دهد.
  • use: ساده به تأمین‌کننده‌های نام‌دار به‌صورت صریح ارجاع می‌دهد.

filter regexهای جداشده با backtick را می‌پذیرد — هر کدام یک OR است. بنابراین filter: 'JP`Japan`🇯🇵' با هر پراکسی‌ای که نامش حاوی هر یک از این سه رشته باشد تطبیق دارد.

مثال‌ها

یک پیکربندی چندلایه‌ای معمول:

yaml
proxy-providers:
  vendor1:
    type: http
    url: https://example.com/sub
    interval: 86400
    path: ./providers/vendor1.yaml

proxy-groups:
  - name: 🚀 Proxy
    type: select
    proxies: [♻️ Auto, 🔯 Fallback, 🔮 LoadBalance, DIRECT]

  - name: ♻️ Auto
    type: url-test
    url: http://www.gstatic.com/generate_204
    interval: 300
    tolerance: 50
    use: [vendor1]
    filter: '香港|新加坡|HK|SG'

  - name: 🔯 Fallback
    type: fallback
    url: http://www.gstatic.com/generate_204
    interval: 60
    use: [vendor1]
    filter: '日本|JP'

  - name: 🔮 LoadBalance
    type: load-balance
    url: http://www.gstatic.com/generate_204
    interval: 300
    strategy: consistent-hashing
    use: [vendor1]

  - name: 🎬 Stream
    type: select
    include-all: true
    filter: '美|US|🇺🇸'

rules:
  - DOMAIN-SUFFIX,netflix.com,🎬 Stream
  - MATCH,🚀 Proxy

نکات بین‌هسته‌ای

معادل sing-box — خروجی‌های selector / urltest

sing-box همان ایده را به‌صورت انواع خروجی و نه به‌عنوان یک مفهوم جداگانهٔ «گروه» پیاده می‌کند:

json
{
  "outbounds": [
    { "type": "selector",
      "tag": "manual",
      "outbounds": ["proxy-jp", "proxy-us", "direct"],
      "default": "proxy-jp",
      "interrupt_exist_connections": false },
    { "type": "urltest",
      "tag": "auto",
      "outbounds": ["proxy-jp", "proxy-us"],
      "url": "https://www.gstatic.com/generate_204",
      "interval": "3m",
      "tolerance": 50 }
  ]
}

Selector:

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
outbounds[]string(required)[<outbound tag>]خروجی‌های عضو.
defaultstring(first in outbounds)<outbound tag>انتخاب اولیه در زمان راه‌اندازی.
interrupt_exist_connectionsboolfalsetrue | falseوقتی انتخاب تغییر می‌کند، اتصالات در جریان که از عضو قبلی استفاده می‌کردند را می‌بندد.

منبع: option/group.go:5-9 · ثابت‌شده در v1.13.11 (553cfa1)

URLTest:

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
outbounds[]string(required)[<outbound tag>]خروجی‌های عضو.
urlstringhttps://www.gstatic.com/generate_204<URL>URL بررسی سلامت.
intervalbadoption.Duration3m<duration>چقدر اعضا دوباره آزمایش شوند.
toleranceuint1650<milliseconds>تنها زمانی به عضو جدید سوییچ می‌کند که بیش از این تعداد میلی‌ثانیه سریع‌تر باشد. از نوسان وقتی دو عضو تأخیر مشابهی دارند جلوگیری می‌کند.
idle_timeoutbadoption.Duration30m<duration>پس از این مدت از بیکاری، بررسی سلامت را متوقف می‌کند — در تقاضای بعدی از سر گرفته می‌شود.
interrupt_exist_connectionsboolfalsetrue | falseبستن اتصالات در جریان هنگام سوییچ.

منبع: option/group.go:11-18 · ثابت‌شده در v1.13.11 (553cfa1)

sing-box معادل دقیقی برای گروه‌های fallback یا load-balance در mihomo ندارد. نزدیک‌ترین الگو استفاده از urltest با tolerance بسیار محکم برای رفتاری مانند fallback، یا زنجیر کردن selectorها است.

معادل Xray — balancerها

balancers در Xray در صفحهٔ Routing مستند شده‌اند. مقادیر استراتژی: random, roundRobin, leastPing, leastLoad. هیچ معادل Xray برای «selector» (انتخاب دستی) وجود ندارد — balancerها بر اساس استراتژی به‌صورت خودکار مسیریابی می‌کنند.

Core Tutorial اثر Argsment