Hysteria2 — mihomo
mihomo در هر دو سمت از Hysteria2 پشتیبانی میکند. خروجی فیلدهای صریح port-hopping و مجموعهٔ گستردهای از کلیدهای کنترل جریان quic-go را در خود دارد. جدول کاربران ورودی یک نگاشت تخت است — یک جفت نام کاربری/گذرواژه برای هر ورودی.
خروجی
ورودی تحت proxies: با type: hysteria2. BasicOption را جاسازی میکند (فیلدهای مشترک خروجی: interface-name، routing-mark، …).
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
name | string | (required) | <string> | نام یکتای پراکسی. |
server | string | (required) | <host> | میزبان یا IP سرور بالادست. |
port | int | (unset) | <port> | پورت تکی سرور. در صورت تنظیم `ports`، حذف شود. |
ports | string | (unset) | <port-list> | فهرست port-hopping. ترکیب جداشده با کاما از پورتهای تکی و بازهها را میپذیرد، مثلاً `"20000,20002-20100"`. در کنار `hop-interval` معنادار است. |
hop-interval | string | 30 | <seconds string> | <duration> | زمان بین port-hop ها. رشتهٔ عددی ساده (`"30"`) بهعنوان ثانیه تفسیر میشود؛ duration سبک Go (`"30s"`) نیز پذیرفته میشود. حداقل ۵ است (`adapter/outbound/hysteria2.go:25`). |
up | string | (unset) | <bandwidth> | پهنای باند آپلینک. رشته با واحد، مثلاً `"100 Mbps"`، `"500 kbps"`، `"1 Gbps"`. |
down | string | (unset) | <bandwidth> | پهنای باند دانلینک، با همان قالب. |
password | string | (unset) | <string> | گذرواژهٔ احراز هویت کاربر. فقط در صورتی اختیاری است که سرور به همتاهای ناشناس اجازه دهد. |
obfs | string | (disabled) | salamander | نوع مبهمسازی. در حال حاضر فقط `salamander` معنادار است. |
obfs-password | string | (unset) | <string> | گذرواژهٔ مبهمسازی، جدا از گذرواژهٔ کاربر. |
obfs-min-packet-size | int | 0 | <bytes> | حداقل اندازهٔ پدینگ تصادفی برای مبهمسازی Salamander. فقط با `obfs: salamander` معنادار است. |
obfs-max-packet-size | int | 0 | <bytes> | حداکثر اندازهٔ پدینگ تصادفی برای مبهمسازی Salamander. |
sni | string | (server) | <SNI> | Server Name Indication در TLS. پیشفرض `server` است. |
ech-opts | ECHOptions | (disabled) | ECHOptions | پیکربندی Encrypted Client Hello. |
skip-cert-verify | bool | false | true | false | غیرفعالسازی راستیآزمایی TLS (فقط آزمایش). |
name-cert-verify | string | (unset) | <hostname> | گواهی سرور را بهجای SNI در برابر این نام میزبان راستیآزمایی میکند. |
fingerprint | string | (unset) | <SHA256 hex> | تثبیت اثرانگشت گواهی TLS سرور. |
certificate | string | (unset) | <PEM file path> | گواهی کلاینت (mTLS). |
private-key | string | (unset) | <key file path> | کلید خصوصی برای `certificate`. |
alpn | []string | [h3] | h3 | فهرست ALPN. Hysteria2 معمولاً از `h3` استفاده میکند. |
cwnd | int | 0 | <int> | بازنویسی پنجرهٔ ازدحام اولیهٔ QUIC. |
bbr-profile | string | (unset) | default | aggressive | پروفایل تنظیم برای گونهٔ Brutal/BBR همراه. |
udp-mtu | int | 1200 | <bytes> | MTU برای قطعهبندی بارهای UDP درون دیتاگرام QUIC. |
realm-opts | Hysteria2RealmOption | (disabled) | Hysteria2RealmOption | اتصال از طریق یک *realm* در Hysteria2 — یک سرور چنداجارهای که از طریق یک نقطهانتهایی کنترلی به آن میرسید. به جدول realm-opts پایین مراجعه کنید. |
initial-stream-receive-window | uint64 | 0 (quic-go default) | <bytes> | پنجرهٔ کنترل جریان اولیه به ازای هر جریان. |
max-stream-receive-window | uint64 | 0 (quic-go default) | <bytes> | حداکثر پنجرهٔ کنترل جریان به ازای هر جریان. |
initial-connection-receive-window | uint64 | 0 (quic-go default) | <bytes> | پنجرهٔ کنترل جریان اولیه برای کل اتصال. |
max-connection-receive-window | uint64 | 0 (quic-go default) | <bytes> | حداکثر پنجرهٔ کنترل جریان برای کل اتصال. |
منبع: adapter/outbound/hysteria2.go:39-72 · ثابتشده در v1.19.29 (e26714a)
ورودی
ورودی تحت listeners: با type: hysteria2. BaseOption را جاسازی میکند (listen، port).
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
users | map[string]string | {} | {<username>: <password>} | جدول کاربران — نگاشت نام کاربری به گذرواژه. خالی به همتاهای ناشناس اجازه میدهد. |
obfs | string | (disabled) | salamander | نوع مبهمسازی Salamander. |
obfs-password | string | (unset) | <string> | گذرواژهٔ مبهمسازی. |
obfs-min-packet-size | int | 0 | <bytes> | حداقل اندازهٔ پدینگ تصادفی برای مبهمسازی Salamander. فقط با `obfs: salamander` معنادار است. |
obfs-max-packet-size | int | 0 | <bytes> | حداکثر اندازهٔ پدینگ تصادفی برای مبهمسازی Salamander. |
certificate | string | (required) | <PEM file path> | گواهی TLS سرور. برای ورودی الزامی است. |
private-key | string | (required) | <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. |
max-idle-time | int | 0 | <seconds> | زمان بیکاری در سمت شنونده. مقدار ۰ پیشفرض QUIC را حفظ میکند. |
alpn | []string | [h3] | h3 | فهرست ALPN ارائهشده در دستدهی TLS. |
up | string | (unset) | <bandwidth> | پهنای باند آپلینک (رشته با واحد). |
down | string | (unset) | <bandwidth> | پهنای باند دانلینک. |
ignore-client-bandwidth | bool | false | true | false | نادیدهگرفتن اعلام پهنای باند کلاینت و اعمال تنظیمات سرور. |
masquerade | string | (unset) | <URL> | هدف ماسکراد — یک رشته URL (`file:///path` یا `https://upstream/`). |
cwnd | int | 0 | <int> | پنجرهٔ ازدحام اولیهٔ QUIC. |
bbr-profile | string | (unset) | default | aggressive | پروفایل تنظیم Brutal/BBR. |
udp-mtu | int | 1200 | <bytes> | MTU قطعهبندی دیتاگرام UDP. |
mux-option | MuxOption | (disabled) | MuxOption | تنظیمات چندسوسازی سبک sing. |
realm-opts | Hysteria2RealmOption | (disabled) | Hysteria2RealmOption | اتصال از طریق یک *realm* در Hysteria2 — یک سرور چنداجارهای که از طریق یک نقطهانتهایی کنترلی به آن میرسید. به جدول realm-opts پایین مراجعه کنید. |
initial-stream-receive-window | uint64 | 0 (quic-go default) | <bytes> | پنجرهٔ کنترل جریان اولیه به ازای هر جریان. |
max-stream-receive-window | uint64 | 0 (quic-go default) | <bytes> | حداکثر پنجرهٔ کنترل جریان به ازای هر جریان. |
initial-connection-receive-window | uint64 | 0 (quic-go default) | <bytes> | پنجرهٔ جریان اولیهٔ اتصال. |
max-connection-receive-window | uint64 | 0 (quic-go default) | <bytes> | حداکثر پنجرهٔ جریان اتصال. |
منبع: listener/inbound/hysteria2.go:12-42 · ثابتشده در v1.19.29 (e26714a)
realm-opts
هر دو بلوک realm-opts در خروجی و ورودی، شکل یکسانی دارند. روی یک خروجی، آنها یک پراکسی را به یک realm در Hysteria2 — یک مستأجر میزبانیشده روی یک سرور چند-realm — از طریق یک نقطهانتهایی کنترلی هدایت میکنند که جزئیات واقعی اتصال را بازمیگرداند. حالت realm یک قابلیت جدیدتر و پیشرفته است؛ آن را غیرفعال نگه دارید مگر اینکه به یک سرور realm متصل میشوید.
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
enable | bool | false | true | false | فعالسازی حالت realm برای این پراکسی. |
server-url | string | (unset) | <URL> | URL سرور کنترل realm که برای دریافت جزئیات اتصال realm استفاده میشود. |
token | string | (unset) | <string> | توکن احراز هویت ارائهشده به سرور کنترل realm. |
realm-id | string | (unset) | <string> | شناسهٔ realm برای پیوستن. |
stun-servers | []string | (unset) | <host:port list> | سرورهای STUN استفادهشده برای عبور از NAT در realm. |
sni | string | (unset) | <SNI> | SNI در TLS برای اتصال به سرور کنترل. |
skip-cert-verify | bool | false | true | false | رد کردن راستیآزمایی TLS بهسمت سرور کنترل (فقط آزمایش). |
name-cert-verify | string | (unset) | <hostname> | گواهی سرور را بهجای SNI در برابر این نام میزبان راستیآزمایی میکند. |
fingerprint | string | (unset) | <SHA256 hex> | تثبیت اثرانگشت گواهی TLS سرور کنترل. |
certificate | string | (unset) | <PEM file path> | گواهی کلاینت (mTLS) بهسمت سرور کنترل. |
private-key | string | (unset) | <key file path> | کلید خصوصی برای `certificate`. |
alpn | []string | (unset) | <string list> | ALPN برای اتصال به سرور کنترل. |
منبع: adapter/outbound/hysteria2.go:74-89 · ثابتشده در v1.19.29 (e26714a)
مثالها
خروجی — پورت تکی، obfs salamander، 100/300 Mbps:
proxies:
- name: hy2-plain
type: hysteria2
server: example.com
port: 443
password: <password>
obfs: salamander
obfs-password: <obfs>
sni: example.com
up: 100 Mbps
down: 300 Mbps
alpn: [h3]خروجی — port-hopping در بازهٔ 20000-20100:
proxies:
- name: hy2-hop
type: hysteria2
server: example.com
ports: 20000-20100
hop-interval: 30s
password: <password>
obfs: salamander
obfs-password: <obfs>
sni: example.com
up: 200 Mbps
down: 1 Gbps
alpn: [h3]خروجی که از طریق یک realm و یک سرور کنترل متصل میشود:
proxies:
- name: hy2-realm
type: hysteria2
server: example.com
port: 443
password: <password>
sni: example.com
alpn: [h3]
realm-opts:
enable: true
server-url: https://realm.example.com/control
token: <realm-token>
realm-id: team-a
stun-servers:
- stun.example.com:3478ورودی با دو کاربر و ماسکراد فایل HTTP:
listeners:
- name: hy2-in
type: hysteria2
listen: 0.0.0.0
port: 443
users:
alice: <alice-password>
bob: <bob-password>
obfs: salamander
obfs-password: <obfs>
certificate: /etc/mihomo/server.crt
private-key: /etc/mihomo/server.key
up: 500 Mbps
down: 1 Gbps
masquerade: file:///var/www
alpn: [h3]نکات
portsترکیبی از پورتهای تکی و بازههای جداشده با کاما را میپذیرد، مثلاً"20000,20002-20100,30000".portوportsبا هم ناسازگارند — یکی را انتخاب کنید. هنگامی کهportsتنظیم شود، mihomo هرhop-intervalیک عضو تازه بهصورت تصادفی برمیگزیند.- حداقل
hop-interval۵ ثانیه است (adapter/outbound/hysteria2.go:25) — مقادیر کمتر از ۵ به بالا کلمپ میشوند. - مقادیر پهنای باند پسوند واحد میپذیرند (
b،kbps،Mbps،Gbps،Tbps) با فاصله بین عدد و واحد —"100 Mbps". این رشتهها توسط کمکیtools.StringToBpsدر mihomo تجزیه میشوند. obfs-min-packet-sizeوobfs-max-packet-sizeفقط باobfs: salamanderاعمال میشوند. آنها کرانهای پدینگ تصادفی را برای مبهمساز Salamander تنظیم میکنند؛ با هرobfsدیگر (یا بدون آن) نادیده گرفته میشوند.usersدر ورودی mihomo یک نگاشت YAML است، نه فهرست شیء. کلید نام کاربری و مقدار گذرواژه است، مثلاًusers: { alice: pw1, bob: pw2 }. برای اجازه دادن به کلاینتهای ناشناس، نگاشت را خالی بگذارید.- چهار فیلد
*-receive-windowکلیدهای مستقیم برای پشتهٔ quic-go همراه هستند. بیشتر کاربران باید آنها را روی0(پیشفرض) بگذارند. برای بهبود توان عبور روی پیوندهای با BDP بالا، پنجرههای سطح اتصال را افزایش دهید.
نکات بینهستهای
- Xray-core پیکربندی را میان
settings(version/clients) وstreamSettings.hysteriaSettings(auth/bandwidth/masquerade) تقسیم میکند. به Hysteria2 — Xray-core مراجعه کنید. - sing-box پیکربندی را در یک بلوک نگه میدارد ولی برای پهنای باند از عدد صحیح ساده Mbps (بدون پسوند واحد) استفاده میکند و مقدار چندریختی
masquerade(URL رشته یا شیء تایپشده) را ارائه میدهد. به Hysteria2 — sing-box مراجعه کنید. - mihomo همچنین میتواند realmها را میزبانی کند — به شنوندهٔ realm در Hysteria2 مراجعه کنید.
منبع: adapter/outbound/hysteria2.go:39-89 · v1.19.29 (e26714a)
