Snell — mihomo
Snell پروتکل پراکسی سبکوزنِ Surge است. mihomo هم یک خروجی Snell (برای اتصال به یک سرور Snell) و هم، بهتازگی، یک شنوندهٔ ورودی Snell (برای عملکردن بهعنوان یک سرور) را پیادهسازی میکند. هر دو سمت از لایهٔ مبهمسازی simple-obfs با حالتهای http یا tls پشتیبانی میکنند؛ obfs-opts.mode خروجی علاوه بر آن لایههای پوشش TLS یعنی shadow-tls، restls و jls را میپذیرد که همتاهای ورودی آنها بلوکهای اختصاصی شنوندهٔ shadow-tls / res-tls / jls-config هستند.
خروجی
ورودی زیر proxies: با type: snell. این BasicOption (فیلدهای مشترک خروجی) را در خود جای میدهد.
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
name | string | (required) | <string> | نام یکتای پراکسی. |
server | string | (required) | <host> | نام میزبان یا IP سرور بالادست. |
port | int | (required) | <port> | پورت سرور بالادست. |
psk | string | (required) | <string> | کلید پیشمشترک (گذرواژه). |
udp | bool | false | true | false | فعالسازی بازپخش UDP (در Snell نسخهٔ ۲ به بعد). |
version | int | 1 | 1 | 2 | 3 | 4 | 5 | نسخهٔ پروتکل Snell. سرورهای v5 با کلاینتهای v4 سازگاری عقبرو دارند، پس mihomo آنها را بهصورت v4 شمارهگیری میکند. |
reuse | bool | false | true | false | استفادهٔ مجدد از اتصالات زیرین. |
obfs-opts | map[string]any | (disabled) | { mode, ... } | گزینههای مبهمسازی. `mode` گزینهٔ `http` / `tls` (simple-obfs، با `host`) یا `shadow-tls` / `restls` / `jls` را انتخاب میکند؛ کلیدهای باقیمانده از طرح افزونهٔ متناظر Shadowsocks پیروی میکنند. |
client-fingerprint | string | (global) | chrome | firefox | safari | ios | edge | random | randomized | اثرانگشت client-hello مبتنی بر uTLS که حالتهای obfs `shadow-tls` / `restls` / `jls` استفاده میکنند. |
منبع: adapter/outbound/snell.go:32-43 · ثابتشده در v1.19.29 (e26714a)
ورودی
ورودی زیر listeners: با type: snell. این BaseOption را در خود جای میدهد (listen، port).
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
psk | string | (required) | <string> | کلید پیشمشترک (گذرواژه). |
version | int | 4 | 1 | 2 | 3 | 4 | 5 | نسخهٔ پروتکل Snell. |
udp | bool | false | true | false | فعالسازی بازپخش UDP (در Snell نسخهٔ ۲ به بعد). |
obfs-opts | SnellObfsOption | (disabled) | SnellObfsOption | گزینههای simple-obfs (`{ mode, host }`). |
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` بازپخش میشوند. |
منبع: listener/inbound/snell.go:13-22 · ثابتشده در v1.19.29 (e26714a)
obfs-opts
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
mode | string | (unset) | http | tls | حالت مبهمسازی. |
host | string | (unset) | <host> | هدر host مبهمسازی. |
منبع: listener/inbound/snell.go:28-31 · ثابتشده در v1.19.29 (e26714a)
مثالها
خروجی — Snell ساده:
proxies:
- name: snell-srv
type: snell
server: example.com
port: 44046
psk: <pre-shared-key>
version: 3
udp: trueخروجی — Snell با مبهمسازی HTTP:
proxies:
- name: snell-obfs
type: snell
server: example.com
port: 44046
psk: <pre-shared-key>
version: 3
obfs-opts:
mode: http
host: bing.comورودی زیر listeners:
listeners:
- name: snell-in
type: snell
listen: 0.0.0.0
port: 44046
psk: <pre-shared-key>
version: 3
udp: true
obfs-opts:
mode: tls
host: bing.comنکات
pskراز مشترک است؛ خروجی و ورودی باید از همان مقدار استفاده کنند.- بازپخش UDP به Snell نسخهٔ ۲ یا جدیدتر نیاز دارد — فعالکردن
udpروی یک همتای نسخهٔ ۱ رد میشود. reuse(فقط خروجی) از اتصال زیرین مجدداً استفاده میکند. این برای Snell نسخهٔ ۲ بهطور ضمنی اعمال میشود؛ برای نسخهٔ ۴ از طریق این فیلد انتخابی است.obfs-opts.modeلایهٔ مبهمسازی را انتخاب میکند:httpجریان را در یک درخواست HTTP جعلی میپیچد،tlsآن را در یک رکورد TLS جعلی میپیچد (hostهدر host مبهمسازی را تنظیم میکند)، وshadow-tls/restls/jlsدستدهی پوشش TLS متناظر را اجرا میکنند — کلیدهای باقیماندهٔobfs-optsسپس از همان طرح بلوکplugin-optsمتناظر Shadowsocks پیروی میکنند (به Shadowsocks مراجعه کنید). برای نبودِ مبهمسازی،obfs-optsرا تنظیمنشده بگذارید. هر دو سمت باید بر سر حالت و تنظیمات آن توافق کنند.client-fingerprintخروجی فقط برای حالتهای obfsshadow-tls/restls/jlsاهمیت دارد، جایی که client-hello مبتنی بر uTLS تقلیدشده در طول دستدهی پوشش را انتخاب میکند.- ورودی در
obfs-optsفقطhttp/tlsرا میپذیرد؛ لایههای پوشش TLS آن بهجای این از طریق بلوکهای اختصاصیshadow-tls/res-tls/jls-configپیکربندی میشوند که دوبهدو ناسازگارند.
نکات بینهستهای
- Snell مخصوص Surge است. نه Xray-core و نه sing-box از آن پشتیبانی میکنند — در هیچیک از این دو هسته خروجی یا ورودی معادلی وجود ندارد.
منبع: adapter/outbound/snell.go:32-43 · v1.19.29 (e26714a)
