Shadowsocks — Xray-core
Xray-core هم AEAD-Shadowsocks کلاسیک (AES-GCM, ChaCha20-Poly1305) و هم Shadowsocks-2022 (رمزهای 2022-blake3-...) با پشتیبانی چندکاربره مبتنی بر EIH را پشتیبانی میکند. در زمان بارگذاری یک بنر منسوخشدن چاپ میشود — توسعهدهندگان Xray رمزنگاری VLESS را بهعنوان جایگزین مدرن توصیه میکنند.
ورودی
settings برای یک ورودی با "protocol": "shadowsocks":
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
method | string | (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`) پذیرفته میشوند. |
password | string | (required for single-user, ignored for SS-2022 multi-user) | <string> | <base64 key> | گذرواژهٔ تککاربره (AEAD) یا **کلید EIH سرور** (SS-2022). برای SS-2022، مقدار بهصورت base64 از بایتهای کلید خام است که طول آن باید با رمز (16 / 32 بایت) تطبیق داشته باشد. |
level | byte | 0 | <byte> | سطح policy پیشفرض وقتی به ازای کاربر تعیین نشود. |
email | string | (unset) | <string> | برچسب در آمار/لاگ. |
clients | []*ShadowsocksUserConfig | [] | [ShadowsocksUserConfig] | فهرست به ازای کاربر. رمزهای SS-2022 از چند کاربر پشتیبانی میکنند؛ رمزهای کلاسیک AEAD این کار را نمیکنند. |
network | *NetworkList | tcp | tcp | udp | tcp,udp | فهرست جداشده با کاما (یا مقدار تک) از ترابردهای پشتیبانیشده. |
منبع: infra/conf/shadowsocks.go:42-49 · ثابتشده در v1.260327.0 (d2758a0)
clients[]
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
method | string | (inherits server) | <see server methods> | رمز به ازای کاربر (فقط SS-2022). باید با خانوادهٔ رمز سرور تطبیق داشته باشد. |
password | string | (required) | <base64 key> | کلید EIH کاربر. طول باید با رمز تطبیق داشته باشد (16 یا 32 بایت). |
level | byte | 0 | <byte> | سطح policy برای این کاربر. |
email | string | (unset) | <string> | شناسهٔ کاربر. |
address | *Address | (unset) | <host> | آدرس مقصد بازپخش اختیاری. فقط بازپخش سمت سرور SS-2022. |
port | uint16 | (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 سرور. |
port | uint16 | (required with address) | <port> | پورت سرور. |
level | byte | 0 | <byte> | سطح کاربر. |
email | string | (unset) | <string> | شناسهٔ کاربر. |
method | string | (required) | <see inbound methods> | رمزی که برای صحبت با سرور استفاده میشود. |
password | string | (required) | <string> | <base64 key> | گذرواژهٔ سرور / کلید SS-2022. |
uot | bool | false | true | false | بستههای UDP را داخل جریان TCP میپیچد (UDP-over-TCP). |
uotVersion | int | 2 | 1 | 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 سرور. |
port | uint16 | (required) | <port> | پورت سرور. |
level | byte | 0 | <byte> | سطح کاربر. |
email | string | (unset) | <string> | شناسهٔ کاربر. |
method | string | (required) | <cipher> | رمز. |
password | string | (required) | <string> | <base64 key> | گذرواژه / کلید SS-2022. |
uot | bool | false | true | false | سوییچ UDP-over-TCP. |
uotVersion | int | 2 | 1 | 2 | نسخهٔ UoT. |
منبع: infra/conf/shadowsocks.go:161-170 · ثابتشده در v1.260327.0 (d2758a0)
خروجی یا شکل سادهشده (سطح بالا address, port, method, password) را میپذیرد یا شکل کامل servers را با دقیقاً یک مدخل.
مثالها
ورودی AEAD کلاسیک:
{
"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 با دو کاربر:
{
"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:
{
"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)
