VLESS — Xray-core
VLESS پروتکل پرچمدار و بدون وضعیت Xray است. خود پروتکل هیچ رمز متقارن داخلی ندارد؛ محرمانگی و یکپارچگی از لایهٔ بیرونی TLS / REALITY میآید. دستدهی شامل یک UUID برای کاربر و یک بلوک کوچک «addons» (بهویژه الگوریتم flow) است.
ورودی
settings برای یک ورودی با "protocol": "vless":
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
clients | []json.RawMessage | (required) | <user object array> | فهرست کاربران پذیرفتهشده. هر مدخل دستکم شامل `id` (UUID) و بهاختیار `email`, `level`, `flow`, `testseed`, `reverse` است. تعیین `encryption` روی کلاینت ورودی رد میشود. |
decryption | string | (required) | none | mlkem768x25519plus.<mode>.<seconds>.<keys> | باید بهصراحت تنظیم شود. `none` همان حالت کلاسیک VLESS بدون رمزنگاری است. رشتهٔ مبتنی بر mlkem رمزنگاری پساکوانتومی جدید را فعال میکند — قالب آن را در بخش نکات زیر ببینید. |
fallbacks | []*VLessInboundFallback | [] | <VLessInboundFallback array> | مقاصد جایگزین که وقتی دستدهی ورودی TLS-with-VLESS شبیه VLESS به نظر نمیرسد (مثلاً یک درخواست HTTPS سرگردان) به آنها رجوع میشود. با `decryption` غیر `none` ناسازگار است. |
flow | string | (empty) | | xtls-rprx-vision | flow پیشفرض برای کلاینتهایی که خودشان flow تعیین نمیکنند. `xtls-rprx-vision` حالت XTLS Vision را فعال میکند؛ مقدار خالی flow را غیرفعال میکند. |
testseed | []uint32 | [] | <uint32 array> | مقادیر seed که در حالت آزمایش قطعی مجموعهٔ رمزنگاری استفاده میشوند. تقریباً همیشه حذف میگردد. |
منبع: infra/conf/vless.go:32-38 · ثابتشده در v1.260327.0 (d2758a0)
clients[] — شیء کاربر
شیء کاربر با JSON به ساختار vless.Account که پشتیبانی protobuf دارد دیکد میشود. فیلدهایی که برایتان مهم هستند:
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
id | string (UUID) | الزامی | <UUID> | UUID کلاینت. شکل کنونی 8-4-4-4-12 یا hex بدون خطتیره. |
email | string | "" | <string> | برچسبی که در خروجی آمار/لاگ استفاده میشود. |
level | uint32 | 0 | <level> | در policy.levels جستوجو میشود. |
flow | string | از flow ارثبری میکند | "", xtls-rprx-vision | بازنویسی flow به ازای هر کاربر. |
testseed | []uint32 | ارثبری میکند | — | بازنویسی testseed به ازای هر کاربر. |
encryption | string | ممنوع | — | مجاز نیست روی کلاینتهای ورودی. |
reverse | {tag,sniffing?} | (تعییننشده) | VLessReverseConfig | این کاربر را به یک برچسب پراکسی معکوس وصل میکند. sniffing داخل بلوک reverse یک ورودی مجاز نیست. |
fallbacks[]
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
name | string | (unset) | <TLS server name> | تطبیق با SNI ورودی TLS؛ مقدار خالی با هر چیزی تطبیق میکند. |
alpn | string | (unset) | h2 | http/1.1 | | تطبیق با ALPN مذاکرهشده؛ مقدار خالی با هر چیزی تطبیق میکند. |
path | string | (unset) | /<path> | پیشوند مسیر HTTP که هنگام پراکسی استفاده میشود. اگر غیرخالی باشد باید با `/` آغاز شود. |
type | string | (auto) | tcp | unix | serve | پروتکل پشتیبان. در صورت حذف از روی `dest` استنباط میشود: پورت عددی یا host:port → tcp؛ مسیر مطلق / با پیشوند @ → unix؛ `serve-ws-none` → serve. |
dest | json.RawMessage | (required) | <host:port> | <port> | <unix path> | مقصد ارسال دستدهی. یک عدد صحیح خالی بهعنوان پورت روی localhost در نظر گرفته میشود. |
xver | uint64 | 0 | 0 | 1 | 2 | نسخهٔ PROXY-protocol که پیش از اتصال ارسالی افزوده میشود. 0 غیرفعال میکند. |
منبع: infra/conf/vless.go:23-30 · ثابتشده در v1.260327.0 (d2758a0)
زنجیرهٔ fallback به ترتیب اعلان روی اولین بایت اتصال ورودی اجرا میشود، در حالتی که شبیه VLESS به نظر نرسد. ترتیب فیلدها مهم است: تطبیقها با سهتاییهای (name, alpn, path) آزموده میشوند و اولین تطبیق برنده است. برای تجزیهٔ dest به infra/conf/vless.go:149-200 مراجعه کنید.
خروجی
settings برای یک خروجی با "protocol": "vless":
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
address | *Address | (unset) | <host> | شکل سادهشده — نام میزبان یا IP سرور. وقتی تنظیم شود، `vnext` بهصورت داخلی ساخته میشود و `id`, `flow` و … در سطح بالا مستقیماً خوانده میشوند. |
port | uint16 | (required with address) | <port> | پورت سرور (شکل سادهشده). |
level | uint32 | 0 | <uint32> | سطح کاربر (شکل سادهشده) — برای جستوجو در جدول policy. |
email | string | (unset) | <string> | شناسهٔ کاربر که در آمار گزارش میشود. |
id | string | (required with address) | <UUID> | UUID کاربر (شکل سادهشده). هم شکل کنونی و هم hex بدون خطتیره را میپذیرد. |
flow | string | (empty) | | xtls-rprx-vision | xtls-rprx-vision-udp443 | الگوریتم flow. |
seed | string | (unset) | <string> | seed رمزنگاری (رزرو شده). فعلاً تجزیه میشود اما اعمال نمیگردد — برای سازگاری آتی نگه داشته شده. |
encryption | string | (required) | none | mlkem768x25519plus.<mode>.<rtt>.<keys> | باید روی `none` یا رشتهٔ رمزنگاری mlkem تنظیم شود. هر مقدار دیگری رد میشود. |
reverse | *VLessReverseConfig | (unset) | VLessReverseConfig | اتصال اختیاری برچسب پراکسی معکوس برای تونلهای معکوس سمت خروجی. |
testpre | uint32 | 0 | <uint32> | شمارندهٔ پیشآزمون برای حالت آزمایش قطعی. |
testseed | []uint32 | [] | <uint32 array> | مقادیر seed برای حالت آزمایش قطعی. |
vnext | []*VLessOutboundVnext | (use simplified shape) | [{address,port,users:[user]}] | شکل کامل — باید دقیقاً یک سرور با دقیقاً یک کاربر را نگه دارد. برای چند نقطهانتهایی، از یک خروجی به ازای هر سرور و یک متعادلکنندهٔ بار استفاده کنید. |
منبع: infra/conf/vless.go:233-246 · ثابتشده در v1.260327.0 (d2758a0)
سادهشده در برابر vnext
خروجی یا شکل سادهشدهٔ سطح بالا (address, port, id, flow, ...) را میپذیرد یا شکل کامل vnext — هرگز هر دو را با هم. شکل سادهشده بهصورت داخلی به یک آرایهٔ vnext تکعضوی بازنویسی میشود (infra/conf/vless.go:251-259). شکل کامل باید دقیقاً یک سرور با دقیقاً یک کاربر داشته باشد؛ برای پیکربندی چندسرور از چندین خروجی VLESS و یک متعادلکنندهٔ بار مسیریابی استفاده کنید.
مثالها
ورودی حداقلی با یک کاربر و XTLS Vision:
{
"inbounds": [
{
"tag": "vless-in",
"listen": "0.0.0.0",
"port": 443,
"protocol": "vless",
"settings": {
"clients": [
{ "id": "a3482e88-686a-4a58-8126-99c9df64b7bf", "flow": "xtls-rprx-vision" }
],
"decryption": "none"
},
"streamSettings": { "network": "tcp", "security": "tls" }
}
]
}خروجی سادهشده:
{
"outbounds": [
{
"tag": "proxy",
"protocol": "vless",
"settings": {
"address": "example.com",
"port": 443,
"id": "a3482e88-686a-4a58-8126-99c9df64b7bf",
"flow": "xtls-rprx-vision",
"encryption": "none"
},
"streamSettings": { "network": "tcp", "security": "reality", "realitySettings": { /* ... */ } }
}
]
}نکات
decryptionوencryptionالزامی هستند. حذف آنها خطایplease add/set "decryption":"none" to every settingsرا تولید میکند (infra/conf/vless.go:140) یا خطای متناظر خروجی.- رشتهٔ رمزنگاری مبتنی بر mlkem را بستار درونخطی در
Build(infra/conf/vless.go:95-137ورودی،321-357خروجی) تجزیه میکند. قالب:mlkem768x25519plus.<mode>.<seconds-or-rtt>.<keys-and-padding>که در آن mode یکی ازnative,xorpubیاrandomاست؛ seconds بهشکل<from>یا<from>-<to>(ورودی) یا1rtt/0rtt(خروجی)؛ keys مقادیر base64-url-safe با اندازهٔ 32 بایت یا 1184 بایت هستند که رشتههای کوتاهتر بهعنوان padding استفاده میشوند. - تنها مقدار flow پذیرفتهشده در منبع فعلی
xtls-rprx-visionاست که خروجی پسوند-udp443را نیز اضافی میپذیرد. fallbacksنمیتواند باdecryptionغیرnoneترکیب شود (infra/conf/vless.go:145-147).fallbacks[].xver > 2رد میشود. فقط نسخههای PROXY protocol v0/v1/v2 پذیرفته میشوند.
نکات بینهستهای
- sing-box از
users[].uuidبهجایclients[].idXray وusers[].nameبهجایemailاستفاده میکند. به VLESS — sing-box مراجعه کنید. - mihomo یک شکل خروجی یکتا دارد (در YAML تقارن ورودی/خروجی نیست)؛ UUIDهای کاربر روی خود شیء proxy ذخیره میشوند نه در یک آرایهٔ clients. به VLESS — mihomo مراجعه کنید.
منبع: infra/conf/vless.go:23-246 · v1.260327.0 (d2758a0)
