Skip to content

Shadowsocks — mihomo

mihomo در هر دو سمت از Shadowsocks پشتیبانی می‌کند، با اکوسیستم غنی افزونه‌ها که قالب سیمی را در obfs، WebSocket (v2ray-plugin / gost-plugin)، Shadow-TLS، REALTLS یا KCP می‌پوشاند. پیکربندی افزونه زیر نگاشت تایپ‌شدهٔ YAML به نام plugin-opts قرار می‌گیرد.

خروجی

ورودی تحت proxies: با type: ss. BasicOption را جاسازی می‌کند.

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
namestring(required)<string>نام یکتای پراکسی.
serverstring(required)<host>میزبان یا IP سرور بالادست.
portint(required)<port>پورت سرور بالادست.
passwordstring(required)<string> | <base64 key>گذرواژهٔ سرور (AEAD) یا کلید EIH (SS-2022).
cipherstring(required)aes-128-gcm | aes-256-gcm | chacha20-ietf-poly1305 | xchacha20-ietf-poly1305 | 2022-blake3-aes-128-gcm | 2022-blake3-aes-256-gcm | 2022-blake3-chacha20-poly1305 | noneنام mihomo برای مجموعه‌رمز / طرح اشتقاق کلید Shadowsocks.
udpboolfalsetrue | falseاجازه به بازپخش بسته‌های UDP از این خروجی.
pluginstring(unset)obfs | v2ray-plugin | gost-plugin | shadow-tls | restls | kcptunافزونهٔ مبهم‌سازی / ترابرد برای پوشاندن جریان. هر افزونه طرح `plugin-opts` مختص خود را دارد (در ادامه مستند شده است).
plugin-optsmap[string]any{}<plugin-specific YAML map>پیکربندی مختص افزونه. طرح به `plugin` وابسته است — به زیربخش‌های پایین مراجعه کنید.
udp-over-tcpboolfalsetrue | falseپوشاندن UDP درون جریان TCP.
udp-over-tcp-versionint21 | 2نسخهٔ قاب‌بندی UoT.
client-fingerprintstring(global)chrome | firefox | safari | ios | edge | random | randomizedاثرانگشت client-hello مبتنی بر uTLS که در صورت استفادهٔ افزونه از TLS اعمال می‌شود.

منبع: adapter/outbound/shadowsocks.go:41-54 · ثابت‌شده در v1.19.24 (a847246)

plugin-opts — هنگامی که plugin: obfs

جریان را در simple-obfs می‌پوشاند (شکل TLS یا HTTP).

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
modestringtlstls | httpحالت obfs. `tls` Client Hello TLS را تقلید می‌کند؛ `http` یک درخواست HTTP ساده را تقلید می‌کند.
hoststring(unset)<host>نام میزبان پوششی که در بار obfs استفاده می‌شود.

منبع: adapter/outbound/shadowsocks.go:56-59 · ثابت‌شده در v1.19.24 (a847246)

plugin-opts — هنگامی که plugin: v2ray-plugin

جریان را در دست‌دهی WebSocket می‌پوشاند. TLS اختیاری است.

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
modestring(required)websocketدر حال حاضر فقط `websocket` پشتیبانی می‌شود.
hoststring(unset)<host>سرآیند Host ارسالی در دست‌دهی WS.
pathstring//<path>مسیر WebSocket.
tlsboolfalsetrue | falseپوشاندن دست‌دهی WS در TLS.
ech-optsECHOptions
fingerprintstring(unset)<SHA256 hex>تثبیت اثرانگشت گواهی TLS سرور.
certificatestring(unset)<PEM file path>گواهی کلاینت (mTLS).
private-keystring(unset)<key file path>کلید خصوصی مطابق با `certificate`.
headersmap[string]string{}{<header>: <value>}سرآیندهای HTTP اضافی در درخواست upgrade.
skip-cert-verifyboolfalsetrue | falseغیرفعال‌سازی راستی‌آزمایی TLS.
muxboolfalsetrue | falseفعال‌سازی smux روی جریان WS.
v2ray-http-upgradeboolfalsetrue | falseاستفاده از HTTP-upgrade سبک V2Ray به جای WebSocket استاندارد.
v2ray-http-upgrade-fast-openboolfalsetrue | falseپیوست‌کردن بار به درخواست HTTP-upgrade.

منبع: adapter/outbound/shadowsocks.go:61-75 · ثابت‌شده در v1.19.24 (a847246)

plugin-opts — هنگامی که plugin: shadow-tls

دست‌دهی Shadow-TLS را جلوی جریان Shadowsocks اضافه می‌کند.

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
passwordstring(unset)<string>گذرواژهٔ Shadow-TLS v2/v3.
hoststring(required)<host>نام میزبان پوششی برای دست‌دهی TLS.
fingerprintstring(unset)<SHA256 hex>تثبیت گواهی TLS سرور پوششی.
certificatestring(unset)<PEM file path>گواهی کلاینت.
private-keystring(unset)<key file path>کلید خصوصی.
skip-cert-verifyboolfalsetrue | falseغیرفعال‌سازی راستی‌آزمایی گواهی (فقط آزمایش).
versionint31 | 2 | 3نسخهٔ پروتکل Shadow-TLS. v3 نسخهٔ تولیدی فعلی است.
alpn[]string[]h2 | http/1.1فهرست ALPN ارائه‌شده در دست‌دهی TLS پوششی.

منبع: adapter/outbound/shadowsocks.go:91-100 · ثابت‌شده در v1.19.24 (a847246)

سایر گونه‌های افزونه (gost-plugin، restls، kcptun) طرح خود را زیر plugin-opts دارند. ساختارهای آن‌ها (gostObfsOption، restlsOption، kcpTunOption) در همان فایل منبع قرار دارند؛ برای فهرست کامل فیلدها به دادهٔ استخراج‌شده مراجعه کنید.

ورودی

ورودی تحت listeners: با type: ss. BaseOption را جاسازی می‌کند.

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
passwordstring(required)<string> | <base64 key>گذرواژهٔ سرور یا کلید SS-2022.
cipherstring(required)<cipher>همان مجموعه‌رمز خروجی.
udpboolfalsetrue | falseپذیرش بسته‌های UDP.
mux-optionMuxOption(disabled)MuxOptionچندسوسازی سبک sing.
shadow-tlsShadowTLS(disabled)ShadowTLSپوشش Shadow-TLS اختیاری ورودی.
kcp-tunKcpTun(disabled)KcpTunترابرد KCP اختیاری ورودی.

منبع: listener/inbound/shadowsocks.go:12-20 · ثابت‌شده در v1.19.24 (a847246)

مثال‌ها

خروجی ساده SS:

yaml
proxies:
  - name: ss-aead
    type: ss
    server: example.com
    port: 8388
    password: <password>
    cipher: aes-256-gcm
    udp: true

خروجی SS-2022 با UDP-over-TCP:

yaml
proxies:
  - name: ss22
    type: ss
    server: example.com
    port: 8388
    password: <base64 16-byte key>
    cipher: 2022-blake3-aes-128-gcm
    udp-over-tcp: true
    udp-over-tcp-version: 2

SS روی v2ray-plugin (WebSocket + TLS):

yaml
proxies:
  - name: ss-v2ray
    type: ss
    server: example.com
    port: 443
    password: <password>
    cipher: aes-256-gcm
    udp: true
    plugin: v2ray-plugin
    plugin-opts:
      mode: websocket
      tls: true
      host: example.com
      path: /ss

SS پشت Shadow-TLS v3:

yaml
proxies:
  - name: ss-stls
    type: ss
    server: example.com
    port: 443
    password: <ss password>
    cipher: aes-256-gcm
    plugin: shadow-tls
    plugin-opts:
      password: <stls password>
      host: www.cloudflare.com
      version: 3

ورودی تحت listeners:

yaml
listeners:
  - name: ss-in
    type: ss
    listen: 0.0.0.0
    port: 8388
    password: <password>
    cipher: aes-256-gcm
    udp: true

نکات

  • خروجی mihomo plugin-opts را به‌عنوان یک نگاشت تایپ‌شدهٔ YAML می‌گیرد که در یکی از ساختارهای مختص افزونه رمزگشایی می‌شود. مقادیر تگ روی این ساختارها از obfs: به جای proxy: استفاده می‌کنند — این یک قرارداد داخلی mihomo است، نه برای کاربر — برای نمونه به simpleObfsOption در adapter/outbound/shadowsocks.go:56-59 مراجعه کنید.
  • گزینهٔ plugin: obfs نام mihomo برای simple-obfs است؛ mode: tls را برای شکل TLS و mode: http را برای شکل HTTP بدهید.
  • ورودی شنوندهٔ mihomo در حال حاضر از users[] چندکاربره پشتیبانی نمی‌کند — برای چندین کاربر SS-2022 روی همان پورت، یک شنونده برای هر کاربر تعریف کنید.

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

  • Xray از method (نه cipher) و uot/uotVersion استفاده می‌کند. سیستم افزونه ندارد — به جای آن بار Shadowsocks را در ترابرد دیگری از streamSettings بپوشانید. به Shadowsocks — Xray-core مراجعه کنید.
  • sing-box از method استفاده می‌کند، شکل بازپخش destinations[] برای SS-2022 را پشتیبانی می‌کند و UoT را به‌صورت شیء udp_over_tcp: {enabled, version} نمایش می‌دهد. همچنین فایل‌های باینری افزونهٔ خارجی را از طریق plugin / plugin_opts می‌پذیرد. به Shadowsocks — sing-box مراجعه کنید.

منبع: adapter/outbound/shadowsocks.go:41-100 · v1.19.24 (a847246)

Core Tutorial اثر Argsment