Skip to content

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` روی کلاینت ورودی رد می‌شود.
decryptionstring(required)none | mlkem768x25519plus.<mode>.<seconds>.<keys>باید به‌صراحت تنظیم شود. `none` همان حالت کلاسیک VLESS بدون رمزنگاری است. رشتهٔ مبتنی بر mlkem رمزنگاری پساکوانتومی جدید را فعال می‌کند — قالب آن را در بخش نکات زیر ببینید.
fallbacks[]*VLessInboundFallback[]<VLessInboundFallback array>مقاصد جایگزین که وقتی دست‌دهی ورودی TLS-with-VLESS شبیه VLESS به نظر نمی‌رسد (مثلاً یک درخواست HTTPS سرگردان) به آن‌ها رجوع می‌شود. با `decryption` غیر `none` ناسازگار است.
flowstring(empty) | xtls-rprx-visionflow پیش‌فرض برای کلاینت‌هایی که خودشان 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 دارد دیکد می‌شود. فیلدهایی که برایتان مهم هستند:

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
idstring (UUID)الزامی<UUID>UUID کلاینت. شکل کنونی 8-4-4-4-12 یا hex بدون خط‌تیره.
emailstring""<string>برچسبی که در خروجی آمار/لاگ استفاده می‌شود.
leveluint320<level>در policy.levels جست‌وجو می‌شود.
flowstringاز flow ارث‌بری می‌کند"", xtls-rprx-visionبازنویسی flow به ازای هر کاربر.
testseed[]uint32ارث‌بری می‌کندبازنویسی testseed به ازای هر کاربر.
encryptionstringممنوعمجاز نیست روی کلاینت‌های ورودی.
reverse{tag,sniffing?}(تعیین‌نشده)VLessReverseConfigاین کاربر را به یک برچسب پراکسی معکوس وصل می‌کند. sniffing داخل بلوک reverse یک ورودی مجاز نیست.

fallbacks[]

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
namestring(unset)<TLS server name>تطبیق با SNI ورودی TLS؛ مقدار خالی با هر چیزی تطبیق می‌کند.
alpnstring(unset)h2 | http/1.1 | تطبیق با ALPN مذاکره‌شده؛ مقدار خالی با هر چیزی تطبیق می‌کند.
pathstring(unset)/<path>پیشوند مسیر HTTP که هنگام پراکسی استفاده می‌شود. اگر غیرخالی باشد باید با `/` آغاز شود.
typestring(auto)tcp | unix | serveپروتکل پشتیبان. در صورت حذف از روی `dest` استنباط می‌شود: پورت عددی یا host:port → tcp؛ مسیر مطلق / با پیشوند @ → unix؛ `serve-ws-none` → serve.
destjson.RawMessage(required)<host:port> | <port> | <unix path>مقصد ارسال دست‌دهی. یک عدد صحیح خالی به‌عنوان پورت روی localhost در نظر گرفته می‌شود.
xveruint6400 | 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` و … در سطح بالا مستقیماً خوانده می‌شوند.
portuint16(required with address)<port>پورت سرور (شکل ساده‌شده).
leveluint320<uint32>سطح کاربر (شکل ساده‌شده) — برای جست‌وجو در جدول policy.
emailstring(unset)<string>شناسهٔ کاربر که در آمار گزارش می‌شود.
idstring(required with address)<UUID>UUID کاربر (شکل ساده‌شده). هم شکل کنونی و هم hex بدون خط‌تیره را می‌پذیرد.
flowstring(empty) | xtls-rprx-vision | xtls-rprx-vision-udp443الگوریتم flow.
seedstring(unset)<string>seed رمزنگاری (رزرو شده). فعلاً تجزیه می‌شود اما اعمال نمی‌گردد — برای سازگاری آتی نگه داشته شده.
encryptionstring(required)none | mlkem768x25519plus.<mode>.<rtt>.<keys>باید روی `none` یا رشتهٔ رمزنگاری mlkem تنظیم شود. هر مقدار دیگری رد می‌شود.
reverse*VLessReverseConfig(unset)VLessReverseConfigاتصال اختیاری برچسب پراکسی معکوس برای تونل‌های معکوس سمت خروجی.
testpreuint320<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:

json
{
  "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" }
    }
  ]
}

خروجی ساده‌شده:

json
{
  "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[].id Xray و users[].name به‌جای email استفاده می‌کند. به VLESS — sing-box مراجعه کنید.
  • mihomo یک شکل خروجی یکتا دارد (در YAML تقارن ورودی/خروجی نیست)؛ UUIDهای کاربر روی خود شیء proxy ذخیره می‌شوند نه در یک آرایهٔ clients. به VLESS — mihomo مراجعه کنید.

منبع: infra/conf/vless.go:23-246 · v1.260327.0 (d2758a0)

Core Tutorial اثر Argsment