مسیریابی — 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`. |
final | string | (unset) | <outbound tag> | خروجی پیشفرض وقتی هیچ قاعدهای تطبیق نمییابد. وقتی تنظیم نشود، اولین خروجی در `outbounds` استفاده میشود. |
find_process | bool | false | true | false | جستجوی فرایند مبدأ برای هر اتصال. توسط قواعد `process_name` / `process_path` لازم است. |
auto_detect_interface | bool | false | true | false | کشف خودکار رابط خروجی پیشفرض سیستم — توسط خروجیهای Direct بدون `bind_interface` استفاده میشود. |
override_android_vpn | bool | false | true | false | فقط Android — دور زدن سرویس VPN سیستم برای شمارهگیریهای خروجی. |
default_interface | string | (auto) | <interface> | بازنویسی رابط خروجی پیشفرض. `auto_detect_interface` را بازنویسی میکند. |
default_mark | FwMark | 0 | <uint32> | SO_MARK لینوکس که روی سوکتهای خروجی اعمال میشود. |
default_domain_resolver | *DomainResolveOptions | (none) | DomainResolveOptions | حلکنندهٔ پیشفرض برای دامنههای مقصد وقتی هیچ قاعدهای یکی را مشخص نمیکند. |
default_network_strategy | *NetworkStrategy | (unset) | NetworkStrategy | استراتژی شبکهٔ پیشفرض که توسط مسابقههای شمارهگیری Happy-Eyeballs / cellular-vs-wifi استفاده میشود. |
default_network_type | badoption.Listable[InterfaceType] | [] | <InterfaceType> | انواع شبکهٔ ترجیحی برای خروجی پیشفرض. |
default_fallback_network_type | badoption.Listable[InterfaceType] | [] | <InterfaceType> | انواع شبکهٔ پشتیبان وقتی نوع ترجیحی شکست میخورد. |
default_fallback_delay | badoption.Duration | 0 | <duration> | تأخیر پیش از تعویض به یک شبکهٔ پشتیبان. |
منبع: option/route.go:5-21 · ثابتشده در v1.13.11 (553cfa1)
قواعد
هر ورودی در rules[] یک شیء چندریختی Rule است. فیلد type شکل را تعیین میکند:
type: "default"(یا حذفشده) —RawDefaultRuleتخت با فیلدهای تطبیق + یکRuleAction.type: "logical"— ترکیبکنندهٔ بولی روی قواعد تودرتو.
قاعدهٔ پیشفرض — فیلدهای تطبیق
RawDefaultRule دارای ۴۱ فیلد است، همگی اختیاری و وقتی چندتایی تنظیم شوند با AND ترکیب میشوند. پراستفادهترینها:
| فیلد | نوع | توضیح |
|---|---|---|
inbound | []string | تطبیق بر اساس برچسب ورودی. |
network | []string | tcp، 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_private | bool | تطبیق 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_mode | string | فقط زمانی تطبیق کند که حالت زمان اجرا (کنترلشده از طریق Clash API) با این رشته تطبیق یابد. |
wifi_ssid / wifi_bssid | []string | مسیریابی Wifi-آگاه (فقط موبایل). |
network_is_expensive / network_is_constrained | bool | پرچمهای نوع شبکهٔ iOS/macOS. |
rule_set | []string | تطبیق اگر هر یک از مجموعه قواعد نامگذاریشده تطبیق یابد. |
invert | bool | معکوسکردن کل نتیجهٔ تطبیق قاعده. |
قاعدهٔ منطقی
{
"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 نامگذاریشده پیش از اجرای قواعد بعدی. |
مجموعه قواعد
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
type | string | inline | inline | local | remote | محل قرارگیری مجموعه قواعد. `inline` قواعد را درست در همین پیکربندی نگه میدارد؛ `local` از یک مسیر فایل میخواند؛ `remote` از یک URL دانلود میکند. |
tag | string | (required) | <string> | نام مرجع که توسط کلید تطبیق `rule_set` قواعد استفاده میشود. |
format | string | (inferred) | source | binary | قالب فایل. `source` همان JSON است؛ `binary` قالب کامپایلشدهٔ `.srs` است. وقتی تنظیم نشود، از پسوند فایل استنباط میشود. |
منبع: option/rule_set.go:20-27 · ثابتشده در v1.13.11 (553cfa1)
مجموعه قواعد محلی
{ "type": "local", "tag": "cn", "format": "binary", "path": "geosite-cn.srs" }مجموعه قواعد راه دور
{
"type": "remote",
"tag": "cn",
"format": "binary",
"url": "https://example.com/geosite-cn.srs",
"download_detour": "direct",
"update_interval": "168h"
}مجموعه قواعد درونخطی
{
"type": "inline",
"tag": "block",
"rules": [
{ "domain_keyword": ["ads", "tracker"] }
]
}rules در شکل درونخطی همان HeadlessRule هستند — از نظر ساختاری مشابه قواعد مسیریابی اما بدون فیلد action (کنش هرچه قاعدهٔ ارجاعدهنده انجام دهد است).
مثالها
CN-مستقیم + بقیه از طریق proxy:
{
"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
}
}رد تبلیغات با یک مجموعه قواعد درونخطی:
{
"route": {
"rule_set": [
{
"type": "inline",
"tag": "ads",
"rules": [
{ "domain_keyword": ["doubleclick", "googlesyndication"] }
]
}
],
"rules": [
{ "rule_set": "ads", "action": "reject" }
]
}
}قاعدهٔ منطقی OR:
{
"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)
