Skip to content

Hysteria2 — mihomo

mihomo در هر دو سمت از Hysteria2 پشتیبانی می‌کند. خروجی فیلدهای صریح port-hopping و مجموعهٔ گسترده‌ای از کلیدهای کنترل جریان quic-go را در خود دارد. جدول کاربران ورودی یک نگاشت تخت است — یک جفت نام کاربری/ گذرواژه برای هر ورودی.

خروجی

ورودی تحت proxies: با type: hysteria2. BasicOption را جاسازی می‌کند (فیلدهای مشترک خروجی: interface-name، routing-mark، …).

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
namestring(required)<string>نام یکتای پراکسی.
serverstring(required)<host>میزبان یا IP سرور بالادست.
portint(unset)<port>پورت تکی سرور. در صورت تنظیم `ports`، حذف شود.
portsstring(unset)<port-list>فهرست port-hopping. ترکیب جداشده با کاما از پورت‌های تکی و بازه‌ها را می‌پذیرد، مثلاً `"20000,20002-20100"`. در کنار `hop-interval` معنادار است.
hop-intervalstring30<seconds string> | <duration>زمان بین port-hop ها. رشتهٔ عددی ساده (`"30"`) به‌عنوان ثانیه تفسیر می‌شود؛ duration سبک Go (`"30s"`) نیز پذیرفته می‌شود. حداقل ۵ است (`adapter/outbound/hysteria2.go:25`).
upstring(unset)<bandwidth>پهنای باند آپلینک. رشته با واحد، مثلاً `"100 Mbps"`، `"500 kbps"`، `"1 Gbps"`.
downstring(unset)<bandwidth>پهنای باند دانلینک، با همان قالب.
passwordstring(unset)<string>گذرواژهٔ احراز هویت کاربر. فقط در صورتی اختیاری است که سرور به همتاهای ناشناس اجازه دهد.
obfsstring(disabled)salamanderنوع مبهم‌سازی. در حال حاضر فقط `salamander` معنادار است.
obfs-passwordstring(unset)<string>گذرواژهٔ مبهم‌سازی، جدا از گذرواژهٔ کاربر.
snistring(server)<SNI>Server Name Indication در TLS. پیش‌فرض `server` است.
ech-optsECHOptions(disabled)ECHOptionsپیکربندی Encrypted Client Hello.
skip-cert-verifyboolfalsetrue | falseغیرفعال‌سازی راستی‌آزمایی TLS (فقط آزمایش).
fingerprintstring(unset)<SHA256 hex>تثبیت اثرانگشت گواهی TLS سرور.
certificatestring(unset)<PEM file path>گواهی کلاینت (mTLS).
private-keystring(unset)<key file path>کلید خصوصی برای `certificate`.
alpn[]string[h3]h3فهرست ALPN. Hysteria2 معمولاً از `h3` استفاده می‌کند.
cwndint0<int>بازنویسی پنجرهٔ ازدحام اولیهٔ QUIC.
bbr-profilestring(unset)default | aggressiveپروفایل تنظیم برای گونهٔ Brutal/BBR همراه.
udp-mtuint1200<bytes>MTU برای قطعه‌بندی بارهای UDP درون دیتاگرام QUIC.
initial-stream-receive-windowuint640 (quic-go default)<bytes>پنجرهٔ کنترل جریان اولیه به ازای هر جریان.
max-stream-receive-windowuint640 (quic-go default)<bytes>حداکثر پنجرهٔ کنترل جریان به ازای هر جریان.
initial-connection-receive-windowuint640 (quic-go default)<bytes>پنجرهٔ کنترل جریان اولیه برای کل اتصال.
max-connection-receive-windowuint640 (quic-go default)<bytes>حداکثر پنجرهٔ کنترل جریان برای کل اتصال.

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

ورودی

ورودی تحت listeners: با type: hysteria2. BaseOption را جاسازی می‌کند (listen، port).

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
usersmap[string]string{}{<username>: <password>}جدول کاربران — نگاشت نام کاربری به گذرواژه. خالی به همتاهای ناشناس اجازه می‌دهد.
obfsstring(disabled)salamanderنوع مبهم‌سازی Salamander.
obfs-passwordstring(unset)<string>گذرواژهٔ مبهم‌سازی.
certificatestring(required)<PEM file path>گواهی TLS سرور. برای ورودی الزامی است.
private-keystring(required)<key file path>کلید خصوصی TLS.
client-auth-typestring(none)no-client-cert | request-client-cert | require-any-client-cert | verify-client-cert-if-given | require-and-verify-client-certحالت احراز هویت متقابل TLS کلاینت.
client-auth-certstring(unset)<PEM file path>بستهٔ CA پذیرفته‌شده به‌عنوان ریشهٔ کلاینت.
ech-keystring(unset)<ECH config>مواد Encrypted Client Hello.
max-idle-timeint0<seconds>زمان بیکاری در سمت شنونده. مقدار ۰ پیش‌فرض QUIC را حفظ می‌کند.
alpn[]string[h3]h3فهرست ALPN ارائه‌شده در دست‌دهی TLS.
upstring(unset)<bandwidth>پهنای باند آپلینک (رشته با واحد).
downstring(unset)<bandwidth>پهنای باند دانلینک.
ignore-client-bandwidthboolfalsetrue | falseنادیده‌گرفتن اعلام پهنای باند کلاینت و اعمال تنظیمات سرور.
masqueradestring(unset)<URL>هدف ماسکراد — یک رشته URL (`file:///path` یا `https://upstream/`).
cwndint0<int>پنجرهٔ ازدحام اولیهٔ QUIC.
bbr-profilestring(unset)default | aggressiveپروفایل تنظیم Brutal/BBR.
udp-mtuint1200<bytes>MTU قطعه‌بندی دیتاگرام UDP.
mux-optionMuxOption(disabled)MuxOptionتنظیمات چندسوسازی سبک sing.
initial-stream-receive-windowuint640 (quic-go default)<bytes>پنجرهٔ کنترل جریان اولیه به ازای هر جریان.
max-stream-receive-windowuint640 (quic-go default)<bytes>حداکثر پنجرهٔ کنترل جریان به ازای هر جریان.
initial-connection-receive-windowuint640 (quic-go default)<bytes>پنجرهٔ جریان اولیهٔ اتصال.
max-connection-receive-windowuint640 (quic-go default)<bytes>حداکثر پنجرهٔ جریان اتصال.

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

مثال‌ها

خروجی — پورت تکی، obfs salamander، 100/300 Mbps:

yaml
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:

yaml
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]

ورودی با دو کاربر و ماسکراد فایل HTTP:

yaml
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 تجزیه می‌شوند.
  • 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 مراجعه کنید.

منبع: adapter/outbound/hysteria2.go:35-63 · v1.19.24 (a847246)

Core Tutorial اثر Argsment