Skip to content

Shadowsocks — Xray-core

Xray-core هم AEAD-Shadowsocks کلاسیک (AES-GCM, ChaCha20-Poly1305) و هم Shadowsocks-2022 (رمزهای 2022-blake3-...) با پشتیبانی چندکاربره مبتنی بر EIH را پشتیبانی می‌کند. در زمان بارگذاری یک بنر منسوخ‌شدن چاپ می‌شود — توسعه‌دهندگان Xray رمزنگاری VLESS را به‌عنوان جایگزین مدرن توصیه می‌کنند.

ورودی

settings برای یک ورودی با "protocol": "shadowsocks":

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
methodstring(required)none | plain | aes-128-gcm | aes-256-gcm | chacha20-poly1305 | xchacha20-poly1305 | 2022-blake3-aes-128-gcm | 2022-blake3-aes-256-gcm | 2022-blake3-chacha20-poly1305طرح رمز / استخراج کلید. مقادیر ناشناخته در زمان تجزیه به UNKNOWN نگاشته می‌شوند. نام‌های مستعار AEAD (`aead_aes_128_gcm` و ...) و نام‌های مستعار IETF (`chacha20-ietf-poly1305`) پذیرفته می‌شوند.
passwordstring(required for single-user, ignored for SS-2022 multi-user)<string> | <base64 key>گذرواژهٔ تک‌کاربره (AEAD) یا **کلید EIH سرور** (SS-2022). برای SS-2022، مقدار به‌صورت base64 از بایت‌های کلید خام است که طول آن باید با رمز (16 / 32 بایت) تطبیق داشته باشد.
levelbyte0<byte>سطح policy پیش‌فرض وقتی به ازای کاربر تعیین نشود.
emailstring(unset)<string>برچسب در آمار/لاگ.
users[]*ShadowsocksUserConfig[ShadowsocksUserConfig] | …فهرست حساب‌های ورودی؛ همان شکل شیء `clients`. `users` نام جدیدتری است که در Xrayهای اخیر معرفی شده و در کنار `clients` پذیرفته می‌شود.
clients[]*ShadowsocksUserConfig[][ShadowsocksUserConfig]فهرست به ازای کاربر. رمزهای SS-2022 از چند کاربر پشتیبانی می‌کنند؛ رمزهای کلاسیک AEAD این کار را نمی‌کنند.
network*NetworkListtcptcp | udp | tcp,udpفهرست جداشده با کاما (یا مقدار تک) از ترابردهای پشتیبانی‌شده.

منبع: infra/conf/shadowsocks.go:41-49 · ثابت‌شده در v26.7.28 (5ca6f4b)

clients[]

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
methodstring(inherits server)<see server methods>رمز به ازای کاربر (فقط SS-2022). باید با خانوادهٔ رمز سرور تطبیق داشته باشد.
passwordstring(required)<base64 key>کلید EIH کاربر. طول باید با رمز تطبیق داشته باشد (16 یا 32 بایت).
levelbyte0<byte>سطح policy برای این کاربر.
emailstring(unset)<string>شناسهٔ کاربر.
address*Address(unset)<host>آدرس مقصد بازپخش اختیاری. فقط بازپخش سمت سرور SS-2022.
portuint16(unset)<port>پورت مقصد بازپخش (جفت‌شده با address).

منبع: infra/conf/shadowsocks.go:32-39 · ثابت‌شده در v26.7.28 (5ca6f4b)

چندکاربره فقط SS-2022 است

فهرست clients[] تنها با یکی از رمزهای 2022-blake3-... اثر می‌گذارد. با رمز کلاسیک AEAD، فقط password سطح بالا اعمال می‌شود — کاربران اضافی در فهرست بی‌صدا نادیده گرفته می‌شوند.

خروجی

settings برای یک خروجی با "protocol": "shadowsocks":

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
address*Address(unset)<host>شکل ساده‌شده — نام میزبان یا IP سرور.
portuint16(required with address)<port>پورت سرور.
levelbyte0<byte>سطح کاربر.
emailstring(unset)<string>شناسهٔ کاربر.
methodstring(required)<see inbound methods>رمزی که برای صحبت با سرور استفاده می‌شود.
passwordstring(required)<string> | <base64 key>گذرواژهٔ سرور / کلید SS-2022.
servers[]*ShadowsocksServerTarget(use simplified shape)[ShadowsocksServerTarget]شکل کامل، دقیقاً یک مدخل.

منبع: infra/conf/shadowsocks.go:188-196 · ثابت‌شده در v26.7.28 (5ca6f4b)

servers[]

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
address*Address(required)<host>نام میزبان یا IP سرور.
portuint16(required)<port>پورت سرور.
levelbyte0<byte>سطح کاربر.
emailstring(unset)<string>شناسهٔ کاربر.
methodstring(required)<cipher>رمز.
passwordstring(required)<string> | <base64 key>گذرواژه / کلید SS-2022.

منبع: infra/conf/shadowsocks.go:179-186 · ثابت‌شده در v26.7.28 (5ca6f4b)

خروجی یا شکل ساده‌شده (سطح بالا address, port, method, password) را می‌پذیرد یا شکل کامل servers را با دقیقاً یک مدخل.

مثال‌ها

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

json
{
  "inbounds": [
    {
      "tag": "ss-in",
      "listen": "0.0.0.0",
      "port": 8388,
      "protocol": "shadowsocks",
      "settings": {
        "method": "aes-256-gcm",
        "password": "<password>",
        "network": "tcp,udp"
      }
    }
  ]
}

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

json
{
  "inbounds": [
    {
      "tag": "ss22-in",
      "listen": "0.0.0.0",
      "port": 8388,
      "protocol": "shadowsocks",
      "settings": {
        "method": "2022-blake3-aes-128-gcm",
        "password": "<base64 16-byte server key>",
        "clients": [
          { "password": "<base64 16-byte alice key>", "email": "alice" },
          { "password": "<base64 16-byte bob key>",   "email": "bob"   }
        ],
        "network": "tcp,udp"
      }
    }
  ]
}

خروجی SS-2022:

json
{
  "outbounds": [
    {
      "tag": "ss-out",
      "protocol": "shadowsocks",
      "settings": {
        "address": "example.com",
        "port": 8388,
        "method": "2022-blake3-aes-256-gcm",
        "password": "<base64 32-byte key>"
      }
    }
  ]
}

نکات

  • مجموعهٔ رمز برای خانوادهٔ AEAD کلاسیک از cipherFromString (infra/conf/shadowsocks.go:16-29) و برای خانوادهٔ SS-2022 از shadowaead_2022.List (ثابت upstream همراه با کد) می‌آید. رمزهای ناشناخته UNKNOWN را برمی‌گردانند و ساخته نمی‌شوند.
  • method: "none" (یا "plain") رمزنگاری را کاملاً غیرفعال می‌کند — قاب‌بندی Shadowsocks حفظ می‌شود اما بار به‌صورت متن آشکار ارسال می‌شود. فقط پشت لایهٔ رمزنگاری دیگر استفاده شود.
  • گذرواژه‌های SS-2022 مادهٔ کلید خام و base64-شده هستند. رمزهای AEAD-128 از کلیدهای 16 بایتی استفاده می‌کنند؛ رمزهای AEAD-256 از کلیدهای 32 بایتی؛ ChaCha20 از کلیدهای 32 بایتی. ورودی با طول نادرست در زمان دیکدینگ دست‌دهی سطح پروتکل ناموفق می‌شود (نه در زمان تجزیهٔ پیکربندی).
  • زمان اجرا یک بنر منسوخ‌شدن ("Shadowsocks (with no Forward Secrecy, etc.)") در زمان بارگذاری چاپ می‌کند — infra/conf/shadowsocks.go:52, 199.

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

  • sing-box از users[] برای چندکاربره SS-2022 استفاده می‌کند و یک آرایهٔ destinations[] برای شکل بازپخش سمت سرور (یک سرور SS-2022 که به چند آدرس بالادست توزیع می‌کند) اضافه می‌کند. همچنین از افزونه‌های بیرونی (plugin, plugin_opts) پشتیبانی می‌نماید و هنوز UDP-over-TCP (udp_over_tcp) را روی خروجی ارائه می‌دهد — Xray فیلدهای uot / uotVersion خود را حذف کرده است. به Shadowsocks — sing-box مراجعه کنید.
  • mihomo نام فیلد cipher (نه method) را استفاده می‌کند، گزینه‌های افزونه را به‌صورت یک نگاشت عمومی plugin-opts که با نام افزونه کلیدبندی می‌شود می‌گیرد و از مجموعه‌ای غنی از افزونه‌های مبهم‌سازی (obfs, v2ray-plugin, shadow-tls, restls, jls, kcptun) پشتیبانی می‌کند. به Shadowsocks — mihomo مراجعه کنید.

منبع: infra/conf/shadowsocks.go:32-196 · v26.7.28 (5ca6f4b)

Core Tutorial اثر Argsment