Sudoku — mihomo
Sudoku یک پروتکل پراکسی مبهمساز بومی mihomo است. این پروتکل یک جریان رکورد رمزنگاریشده با AEAD را حمل میکند که بایتهای آن روی جدولهای جستجوی بهسبک شبکهٔ سودوکو نگاشت میشوند، بهطوریکه نمای رویسیم میتواند بهسمت ASCII قابلچاپ یا نویز پرآنتروپی متمایل شود. علاوه بر این، استتار اختیاری HTTP(S)، لایهگذاری تصادفی رکورد، چندسوسازی جریان و UDP-over-TCP را ارائه میدهد. mihomo آن را هم بهعنوان خروجی (کلاینت) و هم ورودی (شنونده) عرضه میکند.
خروجی
مدخلی زیر proxies: با type: sudoku. BasicOption (فیلدهای مشترک خروجی مانند tfo، mptcp، interface-name، routing-mark، ip-version، dialer-proxy) را درون خود جای میدهد.
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
name | string | (required) | <string> | نام یکتای پراکسی. |
server | string | (required) | <host> | نام میزبان یا IP سرور. |
port | int | (required) | 1-65535 | پورت سرور. |
key | string | (required) | <string> | کلید از پیشبهاشتراکگذاشتهشده. باید با سرور یکسان باشد؛ بذر AEAD و جدولهای مبهمسازی از آن مشتق میشوند. |
aead-method | string | chacha20-poly1305 | <aead cipher> | رمز AEAD که لایهٔ رکورد را محافظت میکند. |
padding-min | *int | 10 | <int> | کران پایین (بایت) لایهگذاری تصادفی افزودهشده به رکوردها. |
padding-max | *int | 30 | <int> | کران بالا (بایت) لایهگذاری تصادفی افزودهشده به رکوردها. |
table-type | string | prefer_entropy | prefer_ascii | prefer_entropy | up_ascii_down_entropy | up_entropy_down_ascii | جهتگیری جدول بایت مبهمسازی. شکلهای جهتدار اجازه میدهند آپلینک و دانلینک از جدولهای متفاوت استفاده کنند. |
enable-pure-downlink | *bool | true | true | false | استفاده از قاببندی سبکتر «دانلینک خالص» در جهت سرور به کلاینت. |
http-mask | *bool | true | true | false | پیچیدن اتصال در یک تونل HTTP(S) تا مانند ترافیک عادی وب به نظر برسد. بهطور پیشفرض فعال است. |
http-mask-mode | string | legacy | legacy | stream | poll | auto | ws | ترابرد استتار HTTP. مقدار legacy ارتقای کلاسیک است؛ stream / poll / auto از تونلهای واقعی درخواست/پاسخ HTTP استفاده میکنند؛ ws یک تونل WebSocket است. |
http-mask-tls | bool | false | true | false | پیچیدن تونل HTTP در TLS. فقط برای حالتهای stream / poll / auto اعمال میشود. |
http-mask-host | string | (unset) | <domain[:port]> | بازنویسی Host / SNI که روی تونل استتار ارسال میشود. |
path-root | string | (unset) | <path> | پیشوند مسیر سطحاول برای نقاطانتهایی تونل HTTP. |
http-mask-multiplex | string | off | off | auto | on | استفادهٔ مجدد از تونل. مقدار auto یک تونل h1/h2 را بازاستفاده میکند؛ on یک تونل چندسوسازیشدهٔ واحد باز میکند که چند مقصد را حمل میکند. |
httpmask | *SudokuHTTPMaskOptions | (unset) | <object> | بلوک ساختاریافتهٔ استتار HTTP؛ کلیدهای آن، فیلدهای مسطح http-mask-* بالا را بازنویسی میکنند. |
custom-table | string | (unset) | <layout> | الگوی چیدمان بایت سفارشی (مثل xpxvvpvv) بهجای جدول داخلی. |
custom-tables | []string | (unset) | [<layout>] | چرخش الگوهای چیدمان بایت سفارشی. وقتی ناخالی باشد، custom-table را بازنویسی میکند. |
منبع: adapter/outbound/sudoku.go:30-50 · ثابتشده در v1.19.27 (5184081)
httpmask
جایگزینی ساختاریافته برای فیلدهای مسطح http-mask-*. در صورت حضور، کلیدهای آن اولویت دارند.
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
disable | bool | false | true | false | غیرفعالکردن استتار HTTP برای این پراکسی. |
mode | string | legacy | legacy | stream | poll | auto | ws | ترابرد استتار HTTP (همان مقادیر http-mask-mode). |
tls | bool | false | true | false | پیچیدن تونل در TLS (فقط stream / poll / auto). |
host | string | (unset) | <domain[:port]> | بازنویسی Host / SNI. |
path-root | string | (unset) | <path> | پیشوند مسیر سطحاول برای نقاطانتهایی تونل. |
multiplex | string | off | off | auto | on | استفادهٔ مجدد از تونل (همان مقادیر http-mask-multiplex). |
منبع: adapter/outbound/sudoku.go:52-59 · ثابتشده در v1.19.27 (5184081)
ورودی
مدخلی زیر listeners: با type: sudoku. BaseOption (فیلدهای مشترک شنونده: name، listen، port، …) را درون خود جای میدهد.
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
key | string | (required) | <string> | کلید از پیشبهاشتراکگذاشتهشده. کلاینتها باید همان مقدار را ارائه دهند. |
aead-method | string | chacha20-poly1305 | <aead cipher> | رمز AEAD که لایهٔ رکورد را محافظت میکند. |
padding-min | *int | 10 | <int> | کران پایین (بایت) لایهگذاری تصادفی رکورد. |
padding-max | *int | 30 | <int> | کران بالا (بایت) لایهگذاری تصادفی رکورد. |
table-type | string | prefer_entropy | prefer_ascii | prefer_entropy | up_ascii_down_entropy | up_entropy_down_ascii | جهتگیری جدول بایت مبهمسازی؛ باید با کلاینت سازگار باشد. |
handshake-timeout | *int | 5 | <seconds> | بیشینه زمان مجاز برای تکمیل دستدهی پیش از آنکه اتصال قطع شود. |
enable-pure-downlink | *bool | true | true | false | استفاده از قاببندی سبکتر «دانلینک خالص» در جهت سرور به کلاینت. |
custom-table | string | (unset) | <layout> | الگوی چیدمان بایت سفارشی (مثل xpxvvpvv). |
custom-tables | []string | (unset) | [<layout>] | چرخش الگوهای چیدمان بایت سفارشی. وقتی ناخالی باشد، custom-table را بازنویسی میکند. |
disable-http-mask | bool | false | true | false | خاموشکردن لایهٔ استتار HTTP روی شنونده. |
http-mask-mode | string | legacy | legacy | stream | poll | auto | ترابرد استتار HTTP که از کلاینتها پذیرفته میشود. |
path-root | string | (unset) | <path> | پیشوند مسیر سطحاول برای نقاطانتهایی تونل HTTP. |
fallback | string | (unset) | <host:port> | اینکه اتصالهایی که در دستدهی Sudoku ناموفقاند به کجا هدایت شوند — آن را به یک سایت فریب اشاره دهید تا استتار شود. |
httpmask | *SudokuHTTPMaskOptions | (unset) | <object> | بلوک ساختاریافتهٔ استتار HTTP؛ کلیدهای آن، disable-http-mask / http-mask-mode / path-root را بازنویسی میکنند. |
mux-option | MuxOption | (unset) | <object> | تنظیمات چندسوسازی (افزونهٔ mihomo، نه بخشی از پروتکل استاندارد Sudoku). |
منبع: listener/inbound/sudoku.go:14-33 · ثابتشده در v1.19.27 (5184081)
httpmask
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
disable | bool | false | true | false | خاموشکردن استتار HTTP روی شنونده. |
mode | string | legacy | legacy | stream | poll | auto | ترابرد استتار HTTP (همان مقادیر http-mask-mode). |
path-root | string | (unset) | <path> | پیشوند مسیر سطحاول برای نقاطانتهایی تونل. |
منبع: listener/inbound/sudoku.go:35-39 · ثابتشده در v1.19.27 (5184081)
مثالها
کمینه خروجی کلاینت:
proxies:
- name: sudoku-out
type: sudoku
server: example.com
port: 443
key: "your-pre-shared-key"استتار HTTP روی TLS، با بازاستفاده از چندسوسازی:
proxies:
- name: sudoku-tls
type: sudoku
server: example.com
port: 443
key: "your-pre-shared-key"
http-mask-mode: stream
http-mask-tls: true
http-mask-host: www.example.com
path-root: /assets
http-mask-multiplex: autoجدول جهتدار با لایهگذاری پهنتر:
proxies:
- name: sudoku-tuned
type: sudoku
server: 192.0.2.10
port: 8443
key: "your-pre-shared-key"
table-type: up_ascii_down_entropy
padding-min: 16
padding-max: 64شنوندهٔ سمت سرور با یک fallback استتار:
listeners:
- name: sudoku-in
type: sudoku
listen: 0.0.0.0
port: 443
key: "your-pre-shared-key"
http-mask-mode: stream
fallback: 127.0.0.1:8080نکات
keyالزامی است و باید در دو سو یکسان باشد — هم بذر AEAD و هم جدولهای مبهمسازی از آن مشتق میشوند.table-typeنحوهٔ شکلدهی بایتهای رکورد را انتخاب میکند:prefer_asciiبهسمت متن قابلچاپ،prefer_entropy(پیشفرض) بهسمت نویز تصادفی، و شکلهایup_*_down_*برای هر جهت جدول متفاوتی اعمال میکنند.http-mask(بهطور پیشفرض روشن) جریان را میپیچد تا شبیه ترافیک HTTP(S) شود. http-mask-tlsفقط برای حالتهایstream/poll/autoاهمیت دارد؛wsیک تونل WebSocket اجرا میکند (فقط سمت کلاینت).http-mask-multiplex: onچند مقصد را روی یک تونل چندسوسازیشدهٔ واحد حمل میکند؛autoدر صورت امکان یک تونل h1/h2 موجود را بازاستفاده میکند.custom-table/custom-tablesپیچهای پیشرفتهٔ چیدمان بایتاند؛custom-tablesمیان چند الگو میچرخد و در صورت تنظیم،custom-tableرا بازنویسی میکند.- Sudoku از طریق UDP-over-TCP ترافیک UDP را بازپخش میکند، بنابراین بدون نیاز به ترابرد جداگانه برای ترافیک مبتنی بر UDP کار میکند.
- روی شنونده،
fallbackاتصالهایی را که در دستدهی Sudoku ناموفقاند به نشانی دیگری هدایت میکند — معمولاً یک سرور وب فریب، تا کاوشگرها یک سایت بیخطر ببینند.
نکات بینهستهای
- Sudoku تنها در mihomo است. نه sing-box و نه Xray-core آن را پیادهسازی نمیکنند؛ اگر در آنجا به استتاری مشابه نیاز دارید، از ترابردهای مبهمسازی خودشان (مثلاً افزونههای Shadowsocks) استفاده کنید.
منبع: adapter/outbound/sudoku.go:30-50 · v1.19.27 (5184081)
منبع: listener/inbound/sudoku.go:14-33 · v1.19.27 (5184081)
