Skip to content

خروجی‌ها ​

outbounds آرایهٔ مقاصد بالادست است. هر مدخل یک شیء تخت است: پاکت type / tag به‌علاوهٔ فیلدهای خود نوع انتخاب‌شده در همان سطح. قاعدهٔ «اولین خروجی پیش‌فرض است» وجود ندارد — ترافیک تطبیق‌نیافته به route.final می‌رود.

پاکت ​

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
typestring—direct | bridge | block | selector | urltest | socks | http | shadowsocks | snell | vmess | trojan | naive | tor | ssh | shadowtls | vless | anytls | hysteria | tuic | hysteria2نوع خروجی. تعیین می‌کند بقیهٔ شیء به کدام ساختار گزینه‌ها رمزگشایی شود. مقدار ثبت‌نشده در راه‌اندازی با "unknown outbound type" شکست می‌خورد.
tagstring——نام یکتای این خروجی. قواعد مسیر، route.final، خروجی‌های گروهی و detour شماره‌گیر به آن ارجاع می‌دهند.

منبع: option/outbound.go:22-26 · ثابت‌شده در v1.14.2 (af6e64c)

فیلدهای هر نوع در صفحات پروتکل مستند شده‌اند: Direct، HTTP و SOCKS، Shadowsocks، VMess، Trojan، Naive، Tor، SSH، VLESS، AnyTLS، Hysteria2، TUIC. ‏selector و urltest خروجی‌های گروهی‌اند که میان tag های دیگر انتخاب می‌کنند. ‏bridge و snell در Bridge و Snell مستند شده‌اند.

فیلدهای مشترک شماره‌گیری (DialerOptions) ​

هر خروجی شماره‌گیر DialerOptions را درون خود دارد — یعنی detour به‌علاوهٔ فیلدهای AbstractDialerOptions (که ساختاری جداست تا کنش قاعدهٔ مسیر direct بتواند بدون detour از همین فیلدهای شماره‌گیری استفاده کند). همهٔ آن‌ها در همان سطح تختِ پاکت ظاهر می‌شوند.

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
detourstring——از راه خروجی دیگری (با آدرس‌دهی tag آن) شماره‌گیری می‌کند. در صورت تنظیم، سایر فیلدهای شماره‌گیری نادیده گرفته می‌شوند.

منبع: option/outbound.go:80-83 · ثابت‌شده در v1.14.2 (af6e64c)

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
bind_interfacestring——رابط شبکه‌ای که اتصال‌های خروجی به آن متصل می‌شوند.
inet4_bind_address*badoption.Addr——آدرس مبدأ IPv4 برای اتصال.
inet6_bind_address*badoption.Addr——آدرس مبدأ IPv6 برای اتصال.
bind_address_no_portboolfalsetrue | falseهنگام اتصال IP_BIND_ADDRESS_NO_PORT می‌گذارد — تخصیص پورت را تا connect عقب می‌اندازد. فقط Linux.
protect_pathstring——مسیر سوکت Unix شبح protect در Android VpnService؛ هر fd سوکت پیش از شماره‌گیری به آنجا فرستاده می‌شود.
routing_markFwMark——SO_MARK (‏fwmark) که روی سوکت‌های خروجی گذاشته می‌شود. فقط Linux.
reuse_addrboolfalsetrue | falseSO_REUSEADDR را روی سوکت‌های خروجی تنظیم می‌کند.
netnsstring——فضای‌نام شبکه برای شماره‌گیری: نام یا مسیر، یا tag یک مدخل network_namespaces سطح بالا. فقط Linux. از ارجاع به فضای‌نام نوع unshare پرهیز کنید — تنها راه خروج آن TUN خود sing-box است.
connect_timeoutbadoption.Duration——مهلت اتصال TCP. رشتهٔ مدت، مانند "5s".
tcp_fast_openboolfalsetrue | falseTCP Fast Open را برای اتصال‌های خروجی فعال می‌کند.
tcp_multi_pathboolfalsetrue | falseMultipath TCP را برای اتصال‌های خروجی فعال می‌کند.
disable_tcp_keep_aliveboolfalsetrue | falseTCP keep-alive را برای اتصال‌های خروجی خاموش می‌کند.
tcp_keep_alivebadoption.Duration——مدت بی‌کاری پیش از شروع پروب‌های keep-alive. رشتهٔ مدت.
tcp_keep_alive_intervalbadoption.Duration——فاصلهٔ بین پروب‌های keep-alive. رشتهٔ مدت.
udp_fragment*boolfalsetrue | falseقطعه‌قطعه‌کردن بسته‌های UDP بزرگ‌تر از MTU را به‌جای اسقاط اجازه می‌دهد.
domain_resolver*DomainResolveOptions——کدام سرور DNS (با tag) آدرس سرور را حل کند: یک رشتهٔ tag ساده، یا شیئی با بازنویسی‌های هر شماره‌گیری (server، strategy، timeout، disable_cache، disable_optimistic_cache، rewrite_ttl، client_subnet). برای direct به‌جای آن دامنهٔ درخواست را حل می‌کند.
network_strategy*NetworkStrategy——استراتژی گزینش میان شبکه‌های در دسترس (مثل default / hybrid / fallback). فقط ساخت‌های سکویی با آگاهی از شبکه.
network_typebadoption.Listable[InterfaceType]——انواع شبکهٔ ترجیحی (wifi، cellular، ethernet، other) هنگام استفاده از network_strategy.
fallback_network_typebadoption.Listable[InterfaceType]——انواع شبکه‌ای که هنگام در دسترس نبودن موارد ترجیحی به آن‌ها بازگشت می‌شود.
fallback_delaybadoption.Duration——درنگ پیش از شروع شماره‌گیری جایگزین (به سبک Happy-Eyeballs). رشتهٔ مدت، مانند "300ms".
domain_strategyDomainStrategy—prefer_ipv4 | prefer_ipv6 | ipv4_only | ipv6_onlyبه نفع domain_resolver.strategy منسوخ شده است: تنظیم آن راه‌اندازی را متوقف می‌کند، مگر اینکه متغیر محیطی ENABLE_DEPRECATED_LEGACY_DOMAIN_STRATEGY_OPTIONS=true تنظیم شده باشد.

منبع: option/outbound.go:85-112 · ثابت‌شده در v1.14.2 (af6e64c)

فیلدهای مشترک سرور (ServerOptions) ​

خروجی‌های پروتکلی که به سرور ثابتی وصل می‌شوند ServerOptions را درون خود دارند.

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
serverstring——نام میزبان یا IP سرور.
server_portuint16——پورت سرور.

منبع: option/outbound.go:183-186 · ثابت‌شده در v1.14.2 (af6e64c)

مثال حداقلی ​

json
{
  "outbounds": [
    {
      "type": "shadowsocks",
      "tag": "proxy",
      "server": "example.com",
      "server_port": 8388,
      "method": "2022-blake3-aes-128-gcm",
      "password": "<base64-key>"
    },
    { "type": "direct", "tag": "direct" }
  ],
  "route": { "final": "proxy" }
}

نکات ​

  • خروجی dns وجود ندارد — پیکربندی آن خطاست؛ ربودن DNS یک rule action است. خروجی wireguard هم وجود ندارد: به‌جایش از نقطه‌انتهایی WireGuard استفاده کنید.
  • ‏shadowsocksr فقط به‌صورت جانگه‌داری که خطا می‌دهد ثبت است (sing-box پیاده‌سازی ShadowsocksR ندارد). ‏hysteria، tuic و hysteria2 به ساخت with_quic و خروجی naive به ساخت with_naive_outbound نیاز دارند؛ باینری‌های انتشار رسمی هر دو را دارند، جز with_naive_outbound روی چند پلتفرم کم‌رواج.
  • ‏detour خروجی‌ها را با tag زنجیر می‌کند؛ زنجیری که به خودش برسد خطای راه‌اندازی است.
  • وقتی server دامنه است، با domain_resolver حل می‌شود و در نبود آن به route.default_domain_resolver برمی‌گردد. هر دو را فقط وقتی می‌توان حذف کرد که تنها یک سرور DNS پیکربندی شده باشد؛ وگرنه راه‌اندازی شکست می‌خورد.
  • ‏bridge همتای L3 خروجی direct است: اتصال‌های L3 (TCP، UDP، ICMP) را از یک TUN یا دیگر نقطه‌انتهایی‌های L3 مستقیماً از یک رابط شبکه بیرون می‌فرستد و اتصال‌های L4 را رد می‌کند. به دسترسی ممتاز نیاز دارد (Linux، macOS، Windows، Android روت‌شده، iOS جیلبریک‌شده) و با کنش route در pre-match تغذیه می‌شود.
  • ‏snell پروتکل Snell متعلق به Surge را برای ورودی و خروجی پیاده‌سازی می‌کند (بدون حالت پراکسی QUIC نسخهٔ v5).

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

  • Xray-core فیلدهای پروتکل را در settings تو در تو می‌کند، با streamSettings.sockopt.dialerProxy زنجیر می‌سازد (proxySettings هنگام راه‌اندازی رد می‌شود) و اولین مدخل آرایه را مقصد پیش‌فرض مسیر می‌گیرد. خروجی‌های Xray را ببینید.
  • mihomo این‌ها را proxies می‌نامد و انواع گروهی (select، ‏url-test، fallback، load-balance) گروه‌های پراکسی جداگانه‌اند، نه انواع خروجی.

منبع: option/outbound.go:22-26 · v1.14.2 (af6e64c)

Core Tutorial اثر Argsment