مسیریابی — sing-box
بلوک route در sing-box قواعد، مجموعه قواعد، و چند کلید تغییر وضعیت رابط پیشفرض / جستجوی فرایند را نگه میدارد. قواعد چندریختی هستند (default + logical) و یک action صریح حمل میکنند که یکی از هشت رفتار را انتخاب میکند.
گزینههای سطح بالا
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
geoip | *GeoIPOptions | (ignored) | GeoIPOptions | پایگاهدادهٔ GeoIP پشتیبانی نمیشود: این بلوک تجزیه میشود اما نادیده گرفته میشود؛ از rule-set استفاده کنید. |
geosite | *GeositeOptions | (ignored) | 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 لازم است. |
find_neighbor | bool | false | true | false | فقط Linux / macOS. حل همسایه (آدرس MAC / نام میزبان کلاینتهای LAN) را حتی بدون قاعدهٔ source_mac_address / source_hostname برای ثبت لاگ بهاجبار فعال میکند. |
dhcp_lease_files | badoption.Listable[string] | (auto-detected) | [<file path>] | فقط Linux / macOS. فایلهای اجارهٔ DHCP برای نگاشت کلاینتهای LAN به نام میزبان و آدرس MAC. اگر خالی باشد برای dnsmasq، odhcpd، ISC dhcpd و Kea بهطور خودکار یافته میشوند. |
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> | تأخیر پیش از تعویض به یک شبکهٔ پشتیبان. |
default_http_client | string | (first http_clients entry) | <http client tag> | برچسب ورودی سطح بالای http_clients که مجموعه قواعد راه دورِ بدون http_client از آن استفاده میکنند. وقتی اصلاً http_clients وجود نداشته باشد، یک کلاینت ضمنی منسوخ که از خروجی پیشفرض شمارهگیری میکند به کار میرود. |
منبع: option/route.go:5-24 · ثابتشده در v1.14.2 (af6e64c)
قواعد
هر ورودی در 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 / geoip / source_geoip | []string | پشتیبانی نمیشوند — قاعدهای که از آنها استفاده کند در راهاندازی شکست میخورد. بهجای آن از rule_set استفاده کنید. |
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 سیستم حل میشود). package_name_regex با عبارت باقاعده تطبیق میدهد. |
source_mac_address / source_hostname | []string | آدرس MAC / نام میزبان DHCP دستگاه مبدأ، از طریق حل همسایه (Linux، macOS، یا کلاینتهای گرافیکی Android / macOS). |
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*، tls_spoof / tls_spoof_method. |
route-options | اعمال گزینههای مسیر روی تطبیقهای بعدی بدون خروج از زنجیرهٔ قاعده. |
direct | شمارهگیری مستقیم — دور زدن کامل خروجیها (از default_interface و غیره استفاده میکند). |
bypass | شکل یکسان با route، عمداً جدا برای گزارشگیری. |
reject | حذف اتصال. با method: "drop" یا method: "default". |
hijack-dns | ربودن اتصال انگار که DNS باشد، مسیریابی به موتور DNS. |
sniff | اجرای اسنیف پروتکل روی اتصال. برای اتصالهای UDP از ورودیهای L3 (TUN، WireGuard، Tailscale) در پیشتطبیق نیز روی نخستین بسته اجرا میشود. |
resolve | حلوفصل دامنهٔ مقصد از طریق سرور DNS نامگذاریشده پیش از اجرای قواعد بعدی. timeout و disable_optimistic_cache اختیاری. |
مجموعه قواعد
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
type | string | inline | inline | local | remote | محل قرارگیری مجموعه قواعد. inline قواعد را درست در همین پیکربندی نگه میدارد؛ local از یک مسیر فایل میخواند؛ remote از یک URL دانلود میکند. |
tag | badoption.Listable[string] | (required) | <string> | [<string>] | نام مرجع که توسط کلید تطبیق rule_set قواعد استفاده میشود. یک فهرست، چند مجموعه قواعد با گزینههای مشترک تعریف میکند؛ {tag} در path، url یا initial_path با هر برچسب جایگزین میشود (با چند برچسب الزامی است؛ با type: inline مجاز نیست). |
format | string | (inferred) | source | binary | قالب فایل. source همان JSON است؛ binary قالب کامپایلشدهٔ .srs است. وقتی تنظیم نشود، از پسوند فایل استنباط میشود. |
منبع: option/rule_set.go:22-29 · ثابتشده در v1.14.2 (af6e64c)
مجموعه قواعد محلی
{ "type": "local", "tag": "cn", "format": "binary", "path": "geosite-cn.srs" }مجموعه قواعد راه دور
{
"type": "remote",
"tag": "cn",
"format": "binary",
"url": "https://example.com/geosite-cn.srs",
"http_client": { "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"] },
{ "rule_set": ["tor-exit"] }
],
"outbound": "tor"
}نکات
geoip/geositeپشتیبانی نمیشوند: بلوکهای سطح بالا تجزیه ولی نادیده گرفته میشوند و اقلام قاعدهٔgeoip/geosite/source_geoipباعث شکست قاعده در راهاندازی میشوند. دادههای معادل را از طریقrule_set(فایلهای.srsراه دور) بارگذاری کنید و از طریق فیلد تطبیقrule_setقاعده به آنها ارجاع دهید.- مجموعه قواعد راه دور از طریق یک کلاینت HTTP دانلود میشوند:
http_clientیک شیء درونخطی (موتور، TLS و فیلدهای شمارهگیری مانندdetour) یا برچسب یک ورودی سطح بالایhttp_clientsمیپذیرد؛ در نبود آن،route.default_http_clientیا نخستین ورودیhttp_clientsبه کار میرود.download_detourبه نفعhttp_clientمنسوخ شده است.initial_pathمجموعه قواعد را از یک فایل محلی مقداردهی اولیه میکند تا راهاندازی منتظر نخستین دانلود نماند. - تطبیق مجموعه قواعد: فیلدهای یک مجموعه قواعد ارجاعشده فقط وقتی در قاعدهٔ ارجاعدهنده ادغام میشوند که دقیقاً یک قاعدهٔ
defaultبدونinvertداشته باشد؛ هر مجموعه قواعد دیگری بهصورت یک شرط مستقل ارزیابی میشود که با تطبیق هر یک از قواعدش برقرار است. source_mac_address/source_hostnameبه حل همسایه متکیاند که با وجود چنین قواعدی (یاneighbor_domainدر یک سرور DNS محلی) خودکار فعال میشود؛find_neighborآن را برای لاگ بهاجبار فعال میکند وdhcp_lease_filesدر Linux / macOS نامهای میزبان را فراهم میکند.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-24 · v1.14.2 (af6e64c)
