Skip to content

مسیریابی — sing-box

بلوک route در sing-box قواعد، مجموعه قواعد، و چند کلید تغییر وضعیت رابط پیش‌فرض / جستجوی فرایند را نگه می‌دارد. قواعد چندریختی هستند (default + logical) و یک action صریح حمل می‌کنند که یکی از هفت رفتار را انتخاب می‌کند.

گزینه‌های سطح بالا

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
geoip*GeoIPOptions(legacy)GeoIPOptionsمحل پایگاه‌دادهٔ GeoIP قدیمی و تنظیمات دانلود. به نفع rule-set منسوخ شده است.
geosite*GeositeOptions(legacy)GeositeOptionsپایگاه‌دادهٔ GeoSite قدیمی. به نفع rule-set منسوخ شده است.
rules[]Rule[][Rule]قواعد مسیریابی، به ترتیب ارزیابی می‌شوند.
rule_set[]RuleSet[][RuleSet]مجموعه قواعد نام‌گذاری‌شده — از طریق کلیدهای تطبیق `rule_set` در قواعد ارجاع داده می‌شوند. سه نوع: `inline`، `local`، `remote`.
finalstring(unset)<outbound tag>خروجی پیش‌فرض وقتی هیچ قاعده‌ای تطبیق نمی‌یابد. وقتی تنظیم نشود، اولین خروجی در `outbounds` استفاده می‌شود.
find_processboolfalsetrue | falseجستجوی فرایند مبدأ برای هر اتصال. توسط قواعد `process_name` / `process_path` لازم است.
auto_detect_interfaceboolfalsetrue | falseکشف خودکار رابط خروجی پیش‌فرض سیستم — توسط خروجی‌های Direct بدون `bind_interface` استفاده می‌شود.
override_android_vpnboolfalsetrue | falseفقط Android — دور زدن سرویس VPN سیستم برای شماره‌گیری‌های خروجی.
default_interfacestring(auto)<interface>بازنویسی رابط خروجی پیش‌فرض. `auto_detect_interface` را بازنویسی می‌کند.
default_markFwMark0<uint32>SO_MARK لینوکس که روی سوکت‌های خروجی اعمال می‌شود.
default_domain_resolver*DomainResolveOptions(none)DomainResolveOptionsحل‌کنندهٔ پیش‌فرض برای دامنه‌های مقصد وقتی هیچ قاعده‌ای یکی را مشخص نمی‌کند.
default_network_strategy*NetworkStrategy(unset)NetworkStrategyاستراتژی شبکهٔ پیش‌فرض که توسط مسابقه‌های شماره‌گیری Happy-Eyeballs / cellular-vs-wifi استفاده می‌شود.
default_network_typebadoption.Listable[InterfaceType][]<InterfaceType>انواع شبکهٔ ترجیحی برای خروجی پیش‌فرض.
default_fallback_network_typebadoption.Listable[InterfaceType][]<InterfaceType>انواع شبکهٔ پشتیبان وقتی نوع ترجیحی شکست می‌خورد.
default_fallback_delaybadoption.Duration0<duration>تأخیر پیش از تعویض به یک شبکهٔ پشتیبان.

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

قواعد

هر ورودی در rules[] یک شیء چندریختی Rule است. فیلد type شکل را تعیین می‌کند:

  • type: "default" (یا حذف‌شده) — RawDefaultRule تخت با فیلدهای تطبیق + یک RuleAction.
  • type: "logical" — ترکیب‌کنندهٔ بولی روی قواعد تودرتو.

قاعدهٔ پیش‌فرض — فیلدهای تطبیق

RawDefaultRule دارای ۴۱ فیلد است، همگی اختیاری و وقتی چندتایی تنظیم شوند با AND ترکیب می‌شوند. پراستفاده‌ترین‌ها:

فیلدنوعتوضیح
inbound[]stringتطبیق بر اساس برچسب ورودی.
network[]stringtcp، udp، یا tcp,udp.
protocol[]stringپروتکل کاربردی اسنیف‌شده.
domain / domain_suffix / domain_keyword / domain_regex[]stringتطبیق‌کنندگان دامنه.
geosite[]stringدستهٔ GeoSite — در پیکربندی‌های مدرن از rule-set خوانده می‌شود.
geoip / source_geoip[]stringدستهٔ GeoIP.
ip_cidr / source_ip_cidr[]stringتطبیق CIDR.
ip_is_private / source_ip_is_privateboolتطبیق RFC1918 / link-local / loopback.
port / source_port[]uint16تطبیق پورت گسسته.
port_range / source_port_range[]stringتطبیق محدودهٔ پورت (80:90، 1024:، …).
process_name / process_path / process_path_regex[]stringتطبیق فرایند (به find_process: true نیاز دارد).
package_name[]stringنام بستهٔ Android (UID از طریق API سیستم حل می‌شود).
user / user_id[]string / []int32کاربر محلی / UID.
clash_modestringفقط زمانی تطبیق کند که حالت زمان اجرا (کنترل‌شده از طریق Clash API) با این رشته تطبیق یابد.
wifi_ssid / wifi_bssid[]stringمسیریابی Wifi-آگاه (فقط موبایل).
network_is_expensive / network_is_constrainedboolپرچم‌های نوع شبکهٔ iOS/macOS.
rule_set[]stringتطبیق اگر هر یک از مجموعه قواعد نام‌گذاری‌شده تطبیق یابد.
invertboolمعکوس‌کردن کل نتیجهٔ تطبیق قاعده.

قاعدهٔ منطقی

json
{
  "type": "logical",
  "mode": "and",
  "rules": [ <Rule>, <Rule>,  ],
  "invert": false,
  "action": "..."
}

mode می‌تواند and (پیش‌فرض) یا or باشد. قواعد تودرتو می‌توانند خودشان منطقی باشند.

کنش قاعده

هر قاعده یک کنش حمل می‌کند که تصمیم می‌گیرد در تطبیق چه اتفاقی بیفتد. هشت مقدار کنش:

کنشمعنا
route (پیش‌فرض)ارسال به outbound. فیلدهای اضافی: override_address، override_port، network_strategy، udp_*، tls_fragment*.
route-optionsاعمال گزینه‌های مسیر روی تطبیق‌های بعدی بدون خروج از زنجیرهٔ قاعده.
directشماره‌گیری مستقیم — دور زدن کامل خروجی‌ها (از default_interface و غیره استفاده می‌کند).
bypassشکل یکسان با route، عمداً جدا برای گزارش‌گیری.
rejectحذف اتصال. با method: "drop" یا method: "default".
hijack-dnsربودن اتصال انگار که DNS باشد، مسیریابی به موتور DNS.
sniffاجرای اسنیف پروتکل روی اتصال.
resolveحل‌وفصل دامنهٔ مقصد از طریق سرور DNS نام‌گذاری‌شده پیش از اجرای قواعد بعدی.

مجموعه قواعد

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
typestringinlineinline | local | remoteمحل قرارگیری مجموعه قواعد. `inline` قواعد را درست در همین پیکربندی نگه می‌دارد؛ `local` از یک مسیر فایل می‌خواند؛ `remote` از یک URL دانلود می‌کند.
tagstring(required)<string>نام مرجع که توسط کلید تطبیق `rule_set` قواعد استفاده می‌شود.
formatstring(inferred)source | binaryقالب فایل. `source` همان JSON است؛ `binary` قالب کامپایل‌شدهٔ `.srs` است. وقتی تنظیم نشود، از پسوند فایل استنباط می‌شود.

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

مجموعه قواعد محلی

json
{ "type": "local", "tag": "cn", "format": "binary", "path": "geosite-cn.srs" }

مجموعه قواعد راه دور

json
{
  "type": "remote",
  "tag": "cn",
  "format": "binary",
  "url": "https://example.com/geosite-cn.srs",
  "download_detour": "direct",
  "update_interval": "168h"
}

مجموعه قواعد درون‌خطی

json
{
  "type": "inline",
  "tag": "block",
  "rules": [
    { "domain_keyword": ["ads", "tracker"] }
  ]
}

rules در شکل درون‌خطی همان HeadlessRule هستند — از نظر ساختاری مشابه قواعد مسیریابی اما بدون فیلد action (کنش هرچه قاعدهٔ ارجاع‌دهنده انجام دهد است).

مثال‌ها

CN-مستقیم + بقیه از طریق proxy:

json
{
  "route": {
    "rule_set": [
      { "type": "remote", "tag": "geoip-cn", "format": "binary",
        "url": "https://github.com/SagerNet/sing-geoip/raw/rule-set/geoip-cn.srs" },
      { "type": "remote", "tag": "geosite-cn", "format": "binary",
        "url": "https://github.com/SagerNet/sing-geosite/raw/rule-set/geosite-cn.srs" }
    ],
    "rules": [
      { "ip_is_private": true, "outbound": "direct" },
      { "rule_set": ["geoip-cn", "geosite-cn"], "outbound": "direct" },
      { "action": "sniff" },
      { "protocol": "dns", "action": "hijack-dns" }
    ],
    "final": "proxy",
    "find_process": false,
    "auto_detect_interface": true
  }
}

رد تبلیغات با یک مجموعه قواعد درون‌خطی:

json
{
  "route": {
    "rule_set": [
      {
        "type": "inline",
        "tag": "ads",
        "rules": [
          { "domain_keyword": ["doubleclick", "googlesyndication"] }
        ]
      }
    ],
    "rules": [
      { "rule_set": "ads", "action": "reject" }
    ]
  }
}

قاعدهٔ منطقی OR:

json
{
  "type": "logical",
  "mode": "or",
  "rules": [
    { "domain_suffix": [".onion"] },
    { "geoip": ["tor-exit"] }
  ],
  "outbound": "tor"
}

نکات

  • گزینه‌های سطح بالای geoip و geosite قدیمی هستند. گردش کار مدرن این است که داده‌های معادل را از طریق rule_set (فایل‌های .srs راه دور) بارگذاری کنید و از طریق فیلد تطبیق rule_set قاعده به آن‌ها ارجاع دهید.
  • rule_set_ip_cidr_match_source (snake_case در ساختار) کنترل می‌کند که آیا قواعد IP-CIDR یک مجموعه قواعد روی مبدأ یا مقصد تطبیق یابند. املای قدیمی‌تر rule_set_ipcidr_match_source منسوخ شده است.
  • کنش‌های قاعدهٔ sniff و resolve معمولاً در سر فهرست قواعد استفاده می‌شوند تا قواعد بعدی فراداده‌های مفیدی ببینند. موتور DNS برای ربودن پرس‌وجوهای DNS که موتور مسیریابی می‌خواهد رسیدگی کند، به hijack-dns متکی است.
  • clash_mode فقط در صورتی اثر می‌گذارد که Clash API فعال باشد — حالت از آنجا می‌آید.

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

  • Xray-core از یک شکل قاعدهٔ چندریختی منفرد با نام‌های فیلد camelCase و مجموعه‌کلید تطبیق بسیار کوچک‌تر استفاده می‌کند. هیچ enum actionی وجود ندارد — هر قاعده به یک outboundTag یا balancerTag مسیریابی می‌شود. بنگرید به مسیریابی — Xray-core.
  • mihomo از قواعد رشته‌ای یک‌خطی فشرده (DOMAIN-SUFFIX,example.com,proxy) و یک سازوکار جداگانهٔ rule-providers: برای فهرست‌های قواعد راه دور استفاده می‌کند. بنگرید به مسیریابی — mihomo.

منبع: option/route.go:5-21 · v1.13.11 (553cfa1)

Core Tutorial اثر Argsment