Skip to content

VMess — mihomo

mihomo در هر دو سمت VMess را پشتیبانی می‌کند. شکل خروجی همهٔ ترابردها (ws، http، h2، grpc)، TLS، REALITY، ECH و دو کلید توسعهٔ احراز هویت را در خود دارد. ورودی عمداً سبک‌تر است — فهرست کاربران مستقیماً روی شنونده قرار می‌گیرد.

خروجی

ورودی تحت proxies: با type: vmess. این ساختار BasicOption را جاسازی می‌کند (فیلدهای مشترک خروجی: interface-name، routing-mark، ip-version، dialer-proxy، …).

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
namestring(required)<string>نام یکتای پراکسی.
serverstring(required)<host>میزبان یا IP سرور بالادست.
portint(required)<port>پورت سرور بالادست.
uuidstring(required)<UUID>UUID کاربری که سرور می‌پذیرد.
alterIdint00 | <int>سازگاری قدیمی MD5-AEAD. برای حالت مدرن صرفاً AEAD آن را ۰ نگه دارید.
cipherstringautoauto | aes-128-gcm | chacha20-poly1305 | none | zeroمجموعه‌رمز متقارن. نام `security` در mihomo.
udpboolfalsetrue | falseاجازه به بازپخش بسته‌های UDP از این خروجی.
networkstringtcptcp | ws | http | h2 | grpc | mekya | mkcpترابرد زیرین. `mekya` و `mkcp` (نام مستعار `kcp`) تنظیمات خود را از `mekya-opts` / `mkcp-opts` می‌گیرند.
tlsboolfalsetrue | falseپوشاندن جریان با TLS.
alpn[]string[]h2 | http/1.1فهرست ALPN ارائه‌شده در دست‌دهی TLS.
skip-cert-verifyboolfalsetrue | falseغیرفعال‌سازی راستی‌آزمایی گواهی TLS (فقط آزمایش).
name-cert-verifystring(unset)<hostname>گواهی سرور را به‌جای SNI در برابر این نام میزبان راستی‌آزمایی می‌کند.
fingerprintstring(unset)<SHA256 hex>تثبیت گواهی TLS سرور به این اثرانگشت SHA-256.
certificatestring(unset)<PEM file path>گواهی کلاینت (mTLS).
private-keystring(unset)<key file path>کلید خصوصی مطابق با `certificate`.
servernamestring(unset)<SNI>بازنویسی SNI در TLS.
ech-optsECHOptions(disabled)ECHOptionsپیکربندی Encrypted Client Hello.
shadow-tls-optsShadowTLSOptions(disabled)ShadowTLSOptionsبلوک پوشش Shadow-TLS (`{ password, version }`). برای هر پراکسی فقط یک بلوک پوشش TLS می‌تواند فعال باشد.
restls-optsRestlsOptions(disabled)RestlsOptionsبلوک پوشش Restls (`{ password, version-hint, restls-script }`). برای هر پراکسی فقط یک بلوک پوشش TLS می‌تواند فعال باشد.
jls-optsJLSOptions(disabled)JLSOptionsبلوک پوشش JLS (`{ username, password }`). برای هر پراکسی فقط یک بلوک پوشش TLS می‌تواند فعال باشد.
reality-optsRealityOptions(disabled)RealityOptionsپیکربندی کلاینت REALITY.
tlsmirror-optsTLSMirrorOptions(disabled)TLSMirrorOptionsبلوک پوشش TLSMirror که با تنظیم `primary-key` آن فعال می‌شود؛ بلوک زیرگزینهٔ مخصوص به خود را دارد. برای هر پراکسی فقط یک بلوک پوشش TLS می‌تواند فعال باشد.
mekya-optsMekyaOptions(unset)MekyaOptionsتنظیمات `network: mekya` (Mekya سازگار با V2Ray، حمل KCP روی درخواست‌های HTTP)؛ بلوک زیرگزینهٔ مخصوص به خود را دارد (`url`، `h2-pool-size`، `kcp`، ...).
mkcp-optsMKCPOptions(unset)MKCPOptionsتنظیمات `network: mkcp` (mKCP سازگار با V2Ray روی UDP)؛ بلوک زیرگزینهٔ مخصوص به خود را دارد (`mtu`، `tti`، `seed`، `header`، ...).
http-optsHTTPOptions(unset)HTTPOptionsتنظیمات `network: http`.
h2-optsHTTP2Options(unset)HTTP2Optionsتنظیمات `network: h2`.
grpc-optsGrpcOptions(unset)GrpcOptionsتنظیمات `network: grpc`.
ws-optsWSOptions(unset)WSOptionsتنظیمات `network: ws`.
packet-addrboolfalsetrue | falseاستفاده از کدگذاری قدیمی packet-addr برای UDP.
xudpboolfalsetrue | falseاستفاده از کدگذاری xudp برای بسته‌های UDP (پیش‌فرض مدرن). با packet-addr ناسازگار.
packet-encodingstring(use udp/xudp flags)packetaddr | xudpانتخاب‌گر صریح packet-encoding؛ هنگام تنظیم بر پرچم‌های بولی اولویت دارد.
global-paddingboolfalsetrue | falseتمام نوشتن‌ها را به طول یکنواخت پدینگ کنید. سرور باید مطابق باشد.
authenticated-lengthboolfalsetrue | falseاستفاده از قاب‌بندی authenticated-length. سرور باید مطابق باشد.
client-fingerprintstring(global)chrome | firefox | safari | ios | edge | random | randomizedاثرانگشت client-hello مبتنی بر uTLS.

منبع: adapter/outbound/vmess.go:53-89 · ثابت‌شده در v1.19.29 (e26714a)

ws-opts

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
pathstring//<path>مسیر WebSocket.
headersmap[string]string{}{<header>: <value>}سرآیندهای HTTP اضافی در درخواست upgrade.
max-early-dataint0<bytes>حداکثر بایت‌های early-data بافر شده پیش از اتمام دست‌دهی WS.
early-data-header-namestring(unset)<header name>نام سرآیندی که برای حمل early-data به‌صورت base64 استفاده می‌شود وقتی سرور انتظار آن را دارد.
v2ray-http-upgradeboolfalsetrue | falseاستفاده از ترابرد HTTP-upgrade سبک V2Ray به جای WebSocket واقعی.
v2ray-http-upgrade-fast-openboolfalsetrue | falseارسال بار کلاینت همراه با درخواست HTTP-upgrade برای صرفه‌جویی یک RTT.

منبع: adapter/outbound/vmess.go:165-172 · ثابت‌شده در v1.19.29 (e26714a)

grpc-opts

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
grpc-service-namestring(required)<name>مسیر نام سرویس gRPC.
grpc-user-agentstring(unset)<UA string>بازنویسی User-Agent کلاینت gRPC.
ping-intervalint0<seconds>بازهٔ فریم PING در HTTP/2. مقدار ۰ غیرفعال می‌کند.
max-connectionsint0<int>حداکثر کانال‌های همزمان gRPC (پراکنش mux).
min-streamsint0<int>حداقل جریان‌ها در هر کانال پیش از تخصیص کانال جدید.
max-streamsint0<int>حداکثر جریان‌ها در هر کانال.

منبع: adapter/outbound/vmess.go:156-163 · ثابت‌شده در v1.19.29 (e26714a)

ورودی

ورودی تحت listeners: با type: vmess. BaseOption را جاسازی می‌کند (listen، port).

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
users[]VmessUser(required)<VmessUser array>کلاینت‌های پذیرفته‌شده.
ws-pathstring(unset)/<path>مسیر WebSocket ارائه‌شده در این شنونده.
grpc-service-namestring(unset)<name>نام سرویس gRPC پذیرفته‌شده در این شنونده.
certificatestring(unset)<PEM file path>گواهی TLS سرور.
private-keystring(unset)<key file path>کلید خصوصی TLS.
client-auth-typestring(none)no-client-cert | request-client-cert | require-any-client-cert | verify-client-cert-if-given | require-and-verify-client-certحالت احراز هویت متقابل TLS کلاینت.
client-auth-certstring(unset)<PEM file path>بستهٔ CA پذیرفته‌شده به‌عنوان ریشهٔ کلاینت.
ech-keystring(unset)<ECH config>مواد Encrypted Client Hello.
shadow-tlsShadowTLS(disabled)ShadowTLSبلوک پوشش Shadow-TLS سمت سرور (`{ enable, version, password, users, handshake, ... }`).
res-tlsResTLS(disabled)ResTLSبلوک پوشش Restls سمت سرور (`{ enable, dest, password, ... }`)؛ کلاینت‌های احراز هویت‌نشده به `dest` بازپخش می‌شوند.
jls-configJLSConfig(disabled)JLSConfigبلوک پوشش JLS سمت سرور (`{ enable, users, sni, dest, ... }`)؛ کلاینت‌های احراز هویت‌نشده به `dest` بازپخش می‌شوند.
reality-configRealityConfig(disabled)RealityConfigپیکربندی سرور REALITY.
tlsmirror-configTLSMirrorConfig(disabled)TLSMirrorConfigبلوک پوشش TLSMirror سمت سرور که با تنظیم `primary-key` آن فعال می‌شود؛ بلوک زیرگزینهٔ مخصوص به خود را دارد (`dest`، `proxy`، ...).
mekya-configMekyaConfig(disabled)MekyaConfigبلوک سمت سرور (`enable` به‌علاوهٔ زیرگزینه‌ها) که ترابرد Mekya سازگار با V2Ray را می‌پذیرد. با `mkcp-config`، `ws-path` یا `grpc-service-name` قابل ترکیب نیست.
mkcp-configMKCPConfig(disabled)MKCPConfigبلوک سمت سرور (`enable` به‌علاوهٔ زیرگزینه‌ها) که ترابرد mKCP سازگار با V2Ray روی UDP را می‌پذیرد.
mux-optionMuxOption(disabled)MuxOptionتنظیمات چندسوسازی (سبک sing mux).

منبع: listener/inbound/vmess.go:12-30 · ثابت‌شده در v1.19.29 (e26714a)

users[]

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
usernamestring(unset)<string>نام نمایشی.
uuidstring(required)<UUID>UUID کاربر.
alterIdint00 | <int>سازگاری قدیمی MD5-AEAD.

منبع: listener/inbound/vmess.go:32-36 · ثابت‌شده در v1.19.29 (e26714a)

مثال‌ها

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

yaml
proxies:
  - name: vmess-ws
    type: vmess
    server: example.com
    port: 443
    uuid: a3482e88-686a-4a58-8126-99c9df64b7bf
    alterId: 0
    cipher: auto
    udp: true
    network: ws
    tls: true
    servername: example.com
    ws-opts:
      path: /vm
      headers:
        Host: example.com

خروجی — VMess روی gRPC با REALITY:

yaml
proxies:
  - name: vmess-grpc
    type: vmess
    server: example.com
    port: 443
    uuid: a3482e88-686a-4a58-8126-99c9df64b7bf
    alterId: 0
    cipher: auto
    network: grpc
    tls: true
    servername: www.cloudflare.com
    client-fingerprint: chrome
    reality-opts:
      public-key: <reality public key>
      short-id: <short id>
    grpc-opts:
      grpc-service-name: GunService

ورودی تحت listeners:

yaml
listeners:
  - name: vmess-in
    type: vmess
    listen: 0.0.0.0
    port: 443
    users:
      - username: alice
        uuid: a3482e88-686a-4a58-8126-99c9df64b7bf
        alterId: 0
    certificate: /etc/mihomo/server.crt
    private-key: /etc/mihomo/server.key

نکات

  • خروجی mihomo برای الگوریتم متقارن از cipher استفاده می‌کند. هم Xray (security) و هم sing-box (security) این فیلد را با نامی متفاوت می‌خوانند. mihomo و sing-box مقادیر auto، aes-128-gcm، chacha20-poly1305، none و zero را می‌پذیرند؛ Xray-core در v26.7.x مقادیر none / zero را حذف کرد و اکنون فقط سه مورد نخست را می‌پذیرد (مقادیر ناشناخته به auto بازمی‌گردند).
  • سه کلید مختلف برای کدگذاری UDP در خروجی نمایش داده می‌شود: udp (بولی — فعال‌سازی کلی بازپخش UDP)، xudp / packet-addr (انتخاب‌گرهای بولی قدیمی) و packet-encoding (انتخاب‌گر صریح مدرن). هنگامی که packet-encoding تنظیم شود، انتخاب‌گرهای بولی نادیده گرفته می‌شوند.
  • global-padding و authenticated-length معادل global_padding / authenticated_length در sing-box هستند — هر دو طرف باید توافق داشته باشند.
  • ws-opts.v2ray-http-upgrade دست‌دهی WebSocket را با ترابرد HTTP-upgrade سبک V2Ray عوض می‌کند؛ v2ray-http-upgrade-fast-open با پیوست‌کردن بار کلاینت یک RTT دیگر را نیز ذخیره می‌کند.
  • shadow-tls-opts، restls-opts، jls-opts، reality-opts و tlsmirror-opts حالت‌های پوشش TLS دوبه‌دو ناسازگارند — حداکثر یکی را فعال کنید و همهٔ آن‌ها به tls: true نیاز دارند. Shadow-TLS، Restls و JLS فقط TCP هستند و با network: mkcp رد می‌شوند. همتاهای ورودی shadow-tls، res-tls و jls-config نیز به همین ترتیب دوبه‌دو ناسازگارند.
  • ترابردهای سازگار با V2Ray یعنی mekya و mkcp تنظیمات خود را در بلوک‌های اختصاصی حمل می‌کنند: mekya-opts / mkcp-opts روی خروجی، mekya-config / mkcp-config روی شنونده. Mekya قاب‌های KCP را در تبادل‌های درخواست/پاسخ HTTP استخری بسته‌بندی می‌کند؛ mKCP خود KCP را مستقیماً روی UDP اجرا می‌کند.

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

  • Xray فقط AEAD است و alterId را کاملاً حذف کرده است؛ نام فیلد security است (نه cipher). به VMess — Xray-core مراجعه کنید.
  • sing-box alterId را حفظ می‌کند (در خروجی alter_id و در کاربران ورودی alterId)، از security به جای cipher استفاده می‌کند و چندسوسازی را از طریق بلوک اختصاصی multiplex ارائه می‌دهد. به VMess — sing-box مراجعه کنید.

منبع: adapter/outbound/vmess.go:53-172 · v1.19.29 (e26714a)

Core Tutorial اثر Argsment