VMess — mihomo
mihomo در هر دو سمت VMess را پشتیبانی میکند. شکل خروجی همهٔ ترابردها (ws، http، h2، grpc)، TLS، REALITY، ECH و دو کلید توسعهٔ احراز هویت را در خود دارد. ورودی عمداً سبکتر است — فهرست کاربران مستقیماً روی شنونده قرار میگیرد.
خروجی
ورودی تحت proxies: با type: vmess. این ساختار BasicOption را جاسازی میکند (فیلدهای مشترک خروجی: interface-name، routing-mark، ip-version، dialer-proxy، …).
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
name | string | (required) | <string> | نام یکتای پراکسی. |
server | string | (required) | <host> | میزبان یا IP سرور بالادست. |
port | int | (required) | <port> | پورت سرور بالادست. |
uuid | string | (required) | <UUID> | UUID کاربری که سرور میپذیرد. |
alterId | int | 0 | 0 | <int> | سازگاری قدیمی MD5-AEAD. برای حالت مدرن صرفاً AEAD آن را ۰ نگه دارید. |
cipher | string | auto | auto | aes-128-gcm | chacha20-poly1305 | none | zero | مجموعهرمز متقارن. نام `security` در mihomo. |
udp | bool | false | true | false | اجازه به بازپخش بستههای UDP از این خروجی. |
network | string | tcp | tcp | ws | http | h2 | grpc | mekya | mkcp | ترابرد زیرین. `mekya` و `mkcp` (نام مستعار `kcp`) تنظیمات خود را از `mekya-opts` / `mkcp-opts` میگیرند. |
tls | bool | false | true | false | پوشاندن جریان با TLS. |
alpn | []string | [] | h2 | http/1.1 | فهرست ALPN ارائهشده در دستدهی TLS. |
skip-cert-verify | bool | false | true | false | غیرفعالسازی راستیآزمایی گواهی TLS (فقط آزمایش). |
name-cert-verify | string | (unset) | <hostname> | گواهی سرور را بهجای SNI در برابر این نام میزبان راستیآزمایی میکند. |
fingerprint | string | (unset) | <SHA256 hex> | تثبیت گواهی TLS سرور به این اثرانگشت SHA-256. |
certificate | string | (unset) | <PEM file path> | گواهی کلاینت (mTLS). |
private-key | string | (unset) | <key file path> | کلید خصوصی مطابق با `certificate`. |
servername | string | (unset) | <SNI> | بازنویسی SNI در TLS. |
ech-opts | ECHOptions | (disabled) | ECHOptions | پیکربندی Encrypted Client Hello. |
shadow-tls-opts | ShadowTLSOptions | (disabled) | ShadowTLSOptions | بلوک پوشش Shadow-TLS (`{ password, version }`). برای هر پراکسی فقط یک بلوک پوشش TLS میتواند فعال باشد. |
restls-opts | RestlsOptions | (disabled) | RestlsOptions | بلوک پوشش Restls (`{ password, version-hint, restls-script }`). برای هر پراکسی فقط یک بلوک پوشش TLS میتواند فعال باشد. |
jls-opts | JLSOptions | (disabled) | JLSOptions | بلوک پوشش JLS (`{ username, password }`). برای هر پراکسی فقط یک بلوک پوشش TLS میتواند فعال باشد. |
reality-opts | RealityOptions | (disabled) | RealityOptions | پیکربندی کلاینت REALITY. |
tlsmirror-opts | TLSMirrorOptions | (disabled) | TLSMirrorOptions | بلوک پوشش TLSMirror که با تنظیم `primary-key` آن فعال میشود؛ بلوک زیرگزینهٔ مخصوص به خود را دارد. برای هر پراکسی فقط یک بلوک پوشش TLS میتواند فعال باشد. |
mekya-opts | MekyaOptions | (unset) | MekyaOptions | تنظیمات `network: mekya` (Mekya سازگار با V2Ray، حمل KCP روی درخواستهای HTTP)؛ بلوک زیرگزینهٔ مخصوص به خود را دارد (`url`، `h2-pool-size`، `kcp`، ...). |
mkcp-opts | MKCPOptions | (unset) | MKCPOptions | تنظیمات `network: mkcp` (mKCP سازگار با V2Ray روی UDP)؛ بلوک زیرگزینهٔ مخصوص به خود را دارد (`mtu`، `tti`، `seed`، `header`، ...). |
http-opts | HTTPOptions | (unset) | HTTPOptions | تنظیمات `network: http`. |
h2-opts | HTTP2Options | (unset) | HTTP2Options | تنظیمات `network: h2`. |
grpc-opts | GrpcOptions | (unset) | GrpcOptions | تنظیمات `network: grpc`. |
ws-opts | WSOptions | (unset) | WSOptions | تنظیمات `network: ws`. |
packet-addr | bool | false | true | false | استفاده از کدگذاری قدیمی packet-addr برای UDP. |
xudp | bool | false | true | false | استفاده از کدگذاری xudp برای بستههای UDP (پیشفرض مدرن). با packet-addr ناسازگار. |
packet-encoding | string | (use udp/xudp flags) | packetaddr | xudp | انتخابگر صریح packet-encoding؛ هنگام تنظیم بر پرچمهای بولی اولویت دارد. |
global-padding | bool | false | true | false | تمام نوشتنها را به طول یکنواخت پدینگ کنید. سرور باید مطابق باشد. |
authenticated-length | bool | false | true | false | استفاده از قاببندی authenticated-length. سرور باید مطابق باشد. |
client-fingerprint | string | (global) | chrome | firefox | safari | ios | edge | random | randomized | اثرانگشت client-hello مبتنی بر uTLS. |
منبع: adapter/outbound/vmess.go:53-89 · ثابتشده در v1.19.29 (e26714a)
ws-opts
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
path | string | / | /<path> | مسیر WebSocket. |
headers | map[string]string | {} | {<header>: <value>} | سرآیندهای HTTP اضافی در درخواست upgrade. |
max-early-data | int | 0 | <bytes> | حداکثر بایتهای early-data بافر شده پیش از اتمام دستدهی WS. |
early-data-header-name | string | (unset) | <header name> | نام سرآیندی که برای حمل early-data بهصورت base64 استفاده میشود وقتی سرور انتظار آن را دارد. |
v2ray-http-upgrade | bool | false | true | false | استفاده از ترابرد HTTP-upgrade سبک V2Ray به جای WebSocket واقعی. |
v2ray-http-upgrade-fast-open | bool | false | true | false | ارسال بار کلاینت همراه با درخواست HTTP-upgrade برای صرفهجویی یک RTT. |
منبع: adapter/outbound/vmess.go:165-172 · ثابتشده در v1.19.29 (e26714a)
grpc-opts
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
grpc-service-name | string | (required) | <name> | مسیر نام سرویس gRPC. |
grpc-user-agent | string | (unset) | <UA string> | بازنویسی User-Agent کلاینت gRPC. |
ping-interval | int | 0 | <seconds> | بازهٔ فریم PING در HTTP/2. مقدار ۰ غیرفعال میکند. |
max-connections | int | 0 | <int> | حداکثر کانالهای همزمان gRPC (پراکنش mux). |
min-streams | int | 0 | <int> | حداقل جریانها در هر کانال پیش از تخصیص کانال جدید. |
max-streams | int | 0 | <int> | حداکثر جریانها در هر کانال. |
منبع: adapter/outbound/vmess.go:156-163 · ثابتشده در v1.19.29 (e26714a)
ورودی
ورودی تحت listeners: با type: vmess. BaseOption را جاسازی میکند (listen، port).
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
users | []VmessUser | (required) | <VmessUser array> | کلاینتهای پذیرفتهشده. |
ws-path | string | (unset) | /<path> | مسیر WebSocket ارائهشده در این شنونده. |
grpc-service-name | string | (unset) | <name> | نام سرویس gRPC پذیرفتهشده در این شنونده. |
certificate | string | (unset) | <PEM file path> | گواهی TLS سرور. |
private-key | string | (unset) | <key file path> | کلید خصوصی TLS. |
client-auth-type | string | (none) | no-client-cert | request-client-cert | require-any-client-cert | verify-client-cert-if-given | require-and-verify-client-cert | حالت احراز هویت متقابل TLS کلاینت. |
client-auth-cert | string | (unset) | <PEM file path> | بستهٔ CA پذیرفتهشده بهعنوان ریشهٔ کلاینت. |
ech-key | string | (unset) | <ECH config> | مواد Encrypted Client Hello. |
shadow-tls | ShadowTLS | (disabled) | ShadowTLS | بلوک پوشش Shadow-TLS سمت سرور (`{ enable, version, password, users, handshake, ... }`). |
res-tls | ResTLS | (disabled) | ResTLS | بلوک پوشش Restls سمت سرور (`{ enable, dest, password, ... }`)؛ کلاینتهای احراز هویتنشده به `dest` بازپخش میشوند. |
jls-config | JLSConfig | (disabled) | JLSConfig | بلوک پوشش JLS سمت سرور (`{ enable, users, sni, dest, ... }`)؛ کلاینتهای احراز هویتنشده به `dest` بازپخش میشوند. |
reality-config | RealityConfig | (disabled) | RealityConfig | پیکربندی سرور REALITY. |
tlsmirror-config | TLSMirrorConfig | (disabled) | TLSMirrorConfig | بلوک پوشش TLSMirror سمت سرور که با تنظیم `primary-key` آن فعال میشود؛ بلوک زیرگزینهٔ مخصوص به خود را دارد (`dest`، `proxy`، ...). |
mekya-config | MekyaConfig | (disabled) | MekyaConfig | بلوک سمت سرور (`enable` بهعلاوهٔ زیرگزینهها) که ترابرد Mekya سازگار با V2Ray را میپذیرد. با `mkcp-config`، `ws-path` یا `grpc-service-name` قابل ترکیب نیست. |
mkcp-config | MKCPConfig | (disabled) | MKCPConfig | بلوک سمت سرور (`enable` بهعلاوهٔ زیرگزینهها) که ترابرد mKCP سازگار با V2Ray روی UDP را میپذیرد. |
mux-option | MuxOption | (disabled) | MuxOption | تنظیمات چندسوسازی (سبک sing mux). |
منبع: listener/inbound/vmess.go:12-30 · ثابتشده در v1.19.29 (e26714a)
users[]
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
username | string | (unset) | <string> | نام نمایشی. |
uuid | string | (required) | <UUID> | UUID کاربر. |
alterId | int | 0 | 0 | <int> | سازگاری قدیمی MD5-AEAD. |
منبع: listener/inbound/vmess.go:32-36 · ثابتشده در v1.19.29 (e26714a)
مثالها
خروجی — VMess روی WebSocket با TLS:
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:
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:
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)
