Skip to content

VMess — sing-box

sing-box هر دو سمت VMess را پیاده‌سازی می‌کند. همچنان حالت قدیمی MD5-AEAD مبتنی بر alter_id را می‌پذیرد (برای سازگاری با کلاینت‌های قدیمی مفید است) و دو ضامن جدیدتر — global_padding و authenticated_length — را اضافه می‌کند که باید بین کلاینت و سرور تطبیق داشته باشند.

ورودی

ورودی type: "vmess":

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
users[]VMessUser[]<VMessUser array>فهرست کاربران پذیرفته‌شده.
multiplex*InboundMultiplexOptions(disabled)InboundMultiplexOptionsچندسوسازی (mux) سمت سرور (smux/yamux/h2mux).
transport*V2RayTransportOptions(plain TCP)V2RayTransportOptionsبسته‌بندی ترابرد اختیاری به سبک V2Ray (ws، http، grpc، quic، hysteria).

منبع: option/vmess.go:3-9 · ثابت‌شده در v1.13.11 (553cfa1)

این ساختار ListenOptions (آدرس شنود، پورت، sniff، …) و InboundTLSOptionsContainer (مواد TLS) را درون خود جای می‌دهد. هر دو میان همهٔ ورودی‌ها مشترک‌اند و با صفحات Inbounds و TLS در فاز ۴ ارائه می‌شوند.

users[]

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
namestring(unset)<string>نام نمایشی استفاده‌شده در آمار و لاگ‌ها.
uuidstring(required)<UUID>UUID کاربر.
alterIdint00 | <int>سازگاری با MD5-AEAD قدیمی. برای حالت مدرن فقط-AEAD آن را روی 0 نگه دارید؛ مقدار غیرصفر حالت منسوخ‌شدهٔ رمز جریانی MD5 را فعال می‌کند و توسط برخی همتایان رد می‌شود.

منبع: option/vmess.go:11-15 · ثابت‌شده در v1.13.11 (553cfa1)

خروجی

خروجی type: "vmess":

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
uuidstring(required)<UUID>UUID کاربری که سرور بالادست می‌پذیرد.
securitystringautoauto | none | zero | aes-128-gcm | chacha20-poly1305 | aes-128-ctrمجموعه‌رمز متقارن. `auto` روی x86 با AES-NI گزینهٔ AES-GCM و در جای دیگر ChaCha20 را انتخاب می‌کند.
alter_idint00 | <int>حالت MD5-AEAD قدیمی. در اینجا با snake_case (در Xray از `alterId` استفاده می‌شود).
global_paddingboolfalsetrue | falseهمهٔ نوشتن‌ها را به طول یکنواخت لایه‌گذاری می‌کند تا از انگشت‌نگاری مبتنی بر طول جلوگیری شود. باید با سمت سرور تطبیق داشته باشد.
authenticated_lengthboolfalsetrue | falseاستفاده از قاب‌بندی تجربی authenticated-length. باید با سمت سرور تطبیق داشته باشد.
networkNetworkList(tcp+udp)tcp | udp | محدود کردن به فقط TCP یا فقط UDP. خالی هر دو را فعال می‌کند.
packet_encodingstring(unset)packetaddr | xudpرمزگذاری برای بسته‌های UDP که از طریق جریان VMess حمل می‌شوند.
multiplex*OutboundMultiplexOptions(disabled)OutboundMultiplexOptionsچندسوسازی (mux) سمت کلاینت (باید با سرور تطبیق داشته باشد).
transport*V2RayTransportOptions(plain TCP)V2RayTransportOptionsبسته‌بندی ترابرد به سبک V2Ray.

منبع: option/vmess.go:17-30 · ثابت‌شده در v1.13.11 (553cfa1)

همچنین DialerOptions، ServerOptions (server، server_port) و OutboundTLSOptionsContainer (tls) را درون خود جای می‌دهد.

مثال‌ها

ورودی:

json
{
  "inbounds": [
    {
      "type": "vmess",
      "tag": "vmess-in",
      "listen": "::",
      "listen_port": 443,
      "users": [
        { "name": "alice", "uuid": "a3482e88-686a-4a58-8126-99c9df64b7bf", "alterId": 0 }
      ],
      "tls": {
        "enabled": true,
        "server_name": "example.com",
        "certificate_path": "/etc/ssl/cert.pem",
        "key_path": "/etc/ssl/key.pem"
      }
    }
  ]
}

خروجی روی WebSocket با TLS:

json
{
  "outbounds": [
    {
      "type": "vmess",
      "tag": "proxy",
      "server": "example.com",
      "server_port": 443,
      "uuid": "a3482e88-686a-4a58-8126-99c9df64b7bf",
      "security": "auto",
      "alter_id": 0,
      "global_padding": true,
      "authenticated_length": true,
      "packet_encoding": "xudp",
      "tls": { "enabled": true, "server_name": "example.com" },
      "transport": { "type": "ws", "path": "/vm" }
    }
  ]
}

نکات

  • کلید کاربر در ورودی alterId (camelCase) است اما گزینهٔ خروجی alter_id (snake_case) است — یک ویژگی خاص ناشی از تاریخچهٔ پیکربندی بالادست. هر دو پیش‌فرض 0 دارند و هر دو هنگام تنظیم به مقدار غیرصفر حالت MD5 قدیمی را فعال می‌کنند.
  • global_padding و authenticated_length افزوده‌های sing-box نسبت به مشخصات اصلی V2Ray هستند. هر دو سمت باید آنها را فعال کنند؛ ترکیب آنها به شکست بی‌صدای اتصال منجر می‌شود.
  • برخلاف Xray، sing-box هنگام بارگذاری VMess هشدار منسوخ‌شدن چاپ نمی‌کند — آن را به‌عنوان پروتکلی پایدار در نظر می‌گیرد.

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

  • Xray حالت قدیمی بدون AEAD را به‌طور کامل حذف می‌کند؛ هیچ فیلد alterId وجود ندارد و زمان اجرا یک پرچم منسوخ‌شدن چاپ می‌کند که کاربران را به سمت VLESS هدایت می‌کند. به VMess — Xray-core مراجعه کنید.
  • mihomo از نام فیلد cipher استفاده می‌کند (جایی که Xray و sing-box از security استفاده می‌کنند)، alterId را (camelCase) حفظ می‌کند و همان ضامن‌های global-padding / authenticated-length را با kebab-case ارائه می‌دهد. به VMess — mihomo مراجعه کنید.

منبع: option/vmess.go:3-30 · v1.13.11 (553cfa1)

Core Tutorial اثر Argsment