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>برچسب در آمار/لاگ.
clients[]*ShadowsocksUserConfig[][ShadowsocksUserConfig]فهرست به ازای کاربر. رمزهای SS-2022 از چند کاربر پشتیبانی می‌کنند؛ رمزهای کلاسیک AEAD این کار را نمی‌کنند.
network*NetworkListtcptcp | udp | tcp,udpفهرست جداشده با کاما (یا مقدار تک) از ترابردهای پشتیبانی‌شده.

منبع: infra/conf/shadowsocks.go:42-49 · ثابت‌شده در v1.260327.0 (d2758a0)

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:33-40 · ثابت‌شده در v1.260327.0 (d2758a0)

چندکاربره فقط 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.
uotboolfalsetrue | falseبسته‌های UDP را داخل جریان TCP می‌پیچد (UDP-over-TCP).
uotVersionint21 | 2نسخهٔ قاب‌بندی UoT. نسخهٔ 2 پیش‌فرض مدرن است؛ نسخهٔ 1 فقط برای سازگاری با نخستین کلاینت‌های sing-box / shadowsocks-2022 وجود دارد.
servers[]*ShadowsocksServerTarget(use simplified shape)[ShadowsocksServerTarget]شکل کامل، دقیقاً یک مدخل.

منبع: infra/conf/shadowsocks.go:172-182 · ثابت‌شده در v1.260327.0 (d2758a0)

servers[]

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

منبع: infra/conf/shadowsocks.go:161-170 · ثابت‌شده در v1.260327.0 (d2758a0)

خروجی یا شکل ساده‌شده (سطح بالا 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"
      }
    }
  ]
}

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

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

نکات

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

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

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

منبع: infra/conf/shadowsocks.go:33-182 · v1.260327.0 (d2758a0)

Core Tutorial اثر Argsment