Skip to content

Shadowsocks — sing-box

sing-box کل خانوادهٔ Shadowsocks را پیاده‌سازی می‌کند: AEAD کلاسیک، Shadowsocks-2022 با چندکاربره EIH، پروتکل‌های افزونه برای v2ray-plugin و obfs، و شکل بازپخش سمت سرور که منحصر به SS-2022 است.

ورودی

ورودی type: "shadowsocks":

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
networkNetworkList(tcp+udp)tcp | udp | محدود کردن به فقط TCP یا فقط UDP. خالی هر دو را فعال می‌کند.
methodstring(required)none | aes-128-gcm | aes-256-gcm | chacha20-ietf-poly1305 | xchacha20-ietf-poly1305 | 2022-blake3-aes-128-gcm | 2022-blake3-aes-256-gcm | 2022-blake3-chacha20-poly1305مجموعه‌رمز استفاده‌شده توسط ورودی. مجموعه‌رمزهای SS-2022 ‏`users[]` و `destinations[]` را فعال می‌کنند.
passwordstring(required for single-user)<string> | <base64 key>گذرواژهٔ تک‌کاربره یا کلید EIH سرور SS-2022.
users[]ShadowsocksUser[][ShadowsocksUser]فهرست هر کاربر — فقط SS-2022. هر کاربر کلید EIH اختصاصی خود را دارد.
destinations[]ShadowsocksDestination[][ShadowsocksDestination]اهداف بازپخش سمت سرور. سرورهای SS-2022 می‌توانند از این برای پخش یک ورودی واحد به آدرس‌های بالادست متعدد استفاده کنند، که بر اساس EIH انتخاب می‌شوند.
multiplex*InboundMultiplexOptions(disabled)InboundMultiplexOptionsچندسوسازی (mux) سمت سرور.
managedboolfalsetrue | falseفعال‌سازی پروتکل حالت مدیریت‌شده که به کلاینت‌های سازگار با ssmgmt اجازه می‌دهد در زمان اجرا کاربران را پیکربندی کنند.

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

این ساختار ListenOptions (آدرس شنود، پورت، sniff، …) را درون خود جای می‌دهد.

users[]

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
namestring(unset)<string>نام نمایشی استفاده‌شده در آمار و لاگ‌ها.
passwordstring(required)<base64 key>کلید EIH کاربر. طول باید با مجموعه‌رمز تطبیق داشته باشد (۱۶ یا ۳۲ بایت).

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

destinations[]

هر مقصد ServerOptions (server، server_port) را به‌علاوهٔ name/password اختصاصی خود درون می‌گیرد.

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
namestring(unset)<string>نام نمایشی برای این مقصد.
passwordstring(required)<base64 key>کلید EIH مقصد.

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

خروجی

خروجی type: "shadowsocks":

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
methodstring(required)<cipher>مجموعه‌رمز سرور.
passwordstring(required)<string> | <base64 key>گذرواژهٔ سرور / کلید SS-2022.
pluginstring(unset)obfs-local | v2ray-plugin | shadow-tls | kcptunافزونهٔ خارجی Shadowsocks برای بسته‌بندی جریان. برای `obfs-local` و `v2ray-plugin` در sing-box کامپایل شده است؛ دیگر افزونه‌ها به یک باینری خارجی روی PATH نیاز دارند.
plugin_optsstring(unset)<plugin-specific string>گزینه‌های جداشده با نقطه‌ویرگول که به افزونه بازارسال می‌شوند (`mode=tls;host=example.com;...`).
networkNetworkList(tcp+udp)tcp | udp | محدود کردن به فقط TCP یا فقط UDP.
udp_over_tcp*UDPOverTCPOptions(disabled)UDPOverTCPOptionsبسته‌های UDP را داخل جریان TCP بسته‌بندی می‌کند. شکل شیء: `{enabled, version}`.
multiplex*OutboundMultiplexOptions(disabled)OutboundMultiplexOptionsچندسوسازی (mux) سمت کلاینت (باید با سرور تطبیق داشته باشد).

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

DialerOptions و ServerOptions را درون خود جای می‌دهد.

مثال‌ها

ورودی کلاسیک AEAD:

json
{
  "inbounds": [
    {
      "type": "shadowsocks",
      "tag": "ss-in",
      "listen": "::",
      "listen_port": 8388,
      "method": "aes-256-gcm",
      "password": "<password>"
    }
  ]
}

ورودی SS-2022 با دو کاربر:

json
{
  "inbounds": [
    {
      "type": "shadowsocks",
      "tag": "ss22-in",
      "listen": "::",
      "listen_port": 8388,
      "method": "2022-blake3-aes-128-gcm",
      "password": "<base64 16-byte server key>",
      "users": [
        { "name": "alice", "password": "<base64 16-byte alice key>" },
        { "name": "bob",   "password": "<base64 16-byte bob key>" }
      ]
    }
  ]
}

خروجی با v2ray-plugin:

json
{
  "outbounds": [
    {
      "type": "shadowsocks",
      "tag": "ss-out",
      "server": "example.com",
      "server_port": 8388,
      "method": "chacha20-ietf-poly1305",
      "password": "<password>",
      "plugin": "v2ray-plugin",
      "plugin_opts": "mode=websocket;tls;host=example.com;path=/ss"
    }
  ]
}

خروجی با UDP-over-TCP v2:

json
{
  "outbounds": [
    {
      "type": "shadowsocks",
      "server": "example.com",
      "server_port": 8388,
      "method": "2022-blake3-aes-256-gcm",
      "password": "<base64 32-byte key>",
      "udp_over_tcp": { "enabled": true, "version": 2 }
    }
  ]
}

نکات

  • sing-box هم نام‌های مجموعه‌رمز IETF (chacha20-ietf-poly1305) و هم نام‌های تاریخی غیر-IETF را می‌پذیرد — اما داخل لایهٔ پروتکل به یک املای واحد در هر مجموعه‌رمز محدود می‌شود.
  • destinations[] ویژهٔ sing-box است. یک سرور SS-2022 با مقاصد به شکل یک بازپخش با تفکیک EIH عمل می‌کند: هر مقصد کلید EIH اختصاصی خود را دارد و یک اتصال ورودی که در برابر یکی از آنها احراز شود به server / server_port آن مقصد بازارسال می‌شود نه اینکه محلی مدیریت شود.
  • plugin: "v2ray-plugin" و plugin: "obfs-local" در sing-box کامپایل شده‌اند (نیازی به باینری خارجی نیست). دیگر نام‌های افزونه یک فایل اجرایی خارجی به همان نام را فراخوانی می‌کنند؛ پروتکل افزونه با مشخصات افزونهٔ shadowsocks-libev تطبیق دارد.
  • udp_over_tcp یک شیء است ({enabled, version}) درحالی‌که Xray دو فیلد (uot، uotVersion) استفاده می‌کند و mihomo نیز دو فیلد با نام‌های متفاوت دیگری استفاده می‌کند.

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

  • Xray از clients[] (نه users[]) استفاده می‌کند و UoT را به‌عنوان دو فیلد جداگانه (uot، uotVersion) در خروجی ارائه می‌دهد. شکل بازپخش destinations[] ندارد. به Shadowsocks — Xray-core مراجعه کنید.
  • mihomo از cipher (نه method) استفاده می‌کند و plugin-opts را به‌عنوان یک نگاشت YAML نوع‌دار کلید‌شده با نام افزونه می‌پذیرد. به Shadowsocks — mihomo مراجعه کنید.

منبع: option/shadowsocks.go:3-35 · v1.13.11 (553cfa1)

Core Tutorial اثر Argsment