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:29).
upstring(unset)<bandwidth>پهنای باند آپلینک. رشته با واحد، مثلاً "100 Mbps"، "500 kbps"، "1 Gbps".
downstring(unset)<bandwidth>پهنای باند دانلینک، با همان قالب.
passwordstring(unset)<string>گذرواژهٔ احراز هویت کاربر. فقط در صورتی اختیاری است که سرور به همتاهای ناشناس اجازه دهد.
obfsstring(disabled)salamanderنوع مبهم‌سازی. در حال حاضر فقط salamander معنادار است.
obfs-passwordstring(unset)<string>گذرواژهٔ مبهم‌سازی، جدا از گذرواژهٔ کاربر.
obfs-min-packet-sizeint0<bytes>حداقل اندازهٔ پدینگ تصادفی برای مبهم‌سازی Salamander. فقط با obfs: salamander معنادار است.
obfs-max-packet-sizeint0<bytes>حداکثر اندازهٔ پدینگ تصادفی برای مبهم‌سازی Salamander.
snistring(server)<SNI>Server Name Indication در TLS. پیش‌فرض server است.
ech-optsECHOptions(disabled)ECHOptionsپیکربندی Encrypted Client Hello.
skip-cert-verifyboolfalsetrue | falseغیرفعال‌سازی راستی‌آزمایی TLS (فقط آزمایش).
name-cert-verifystring(unset)<hostname>گواهی سرور را به‌جای SNI در برابر این نام میزبان راستی‌آزمایی می‌کند.
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.
handshake-timeoutint0<seconds>مهلت دست‌دهی QUIC بر حسب ثانیه. در صورت تنظیم، دست‌دهی فقط به این مقدار محدود است و تحت تأثیر مهلت شمارهٔ بیرونی قرار نمی‌گیرد. 0 یعنی فقط از مهلت اتصال بیرونی استفاده شود.
realm-optsHysteria2RealmOption(disabled)Hysteria2RealmOptionاتصال از طریق یک *realm* در Hysteria2 — یک سرور چنداجاره‌ای که از طریق یک نقطه‌انتهایی کنترلی به آن می‌رسید. به جدول realm-opts پایین مراجعه کنید.
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:39-73 · ثابت‌شده در v1.19.31 (ab405ba)

ورودی ​

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

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
usersmap[string]string{}{<username>: <password>}جدول کاربران — نگاشت نام کاربری به گذرواژه. خالی به همتاهای ناشناس اجازه می‌دهد.
obfsstring(disabled)salamanderنوع مبهم‌سازی Salamander.
obfs-passwordstring(unset)<string>گذرواژهٔ مبهم‌سازی.
obfs-min-packet-sizeint0<bytes>حداقل اندازهٔ پدینگ تصادفی برای مبهم‌سازی Salamander. فقط با obfs: salamander معنادار است.
obfs-max-packet-sizeint0<bytes>حداکثر اندازهٔ پدینگ تصادفی برای مبهم‌سازی Salamander.
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.
realm-optsHysteria2RealmOption(disabled)Hysteria2RealmOptionاتصال از طریق یک *realm* در Hysteria2 — یک سرور چنداجاره‌ای که از طریق یک نقطه‌انتهایی کنترلی به آن می‌رسید. به جدول realm-opts پایین مراجعه کنید.
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-42 · ثابت‌شده در v1.19.31 (ab405ba)

realm-opts ​

هر دو بلوک realm-opts در خروجی و ورودی، شکل یکسانی دارند. روی یک خروجی، آن‌ها یک پراکسی را به یک realm در Hysteria2 — یک مستأجر میزبانی‌شده روی یک سرور چند-realm — از طریق یک نقطه‌انتهایی کنترلی هدایت می‌کنند که جزئیات واقعی اتصال را بازمی‌گرداند. حالت realm یک قابلیت پیشرفته است؛ آن را غیرفعال نگه دارید مگر اینکه به یک سرور realm متصل می‌شوید.

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
enableboolfalsetrue | falseفعال‌سازی حالت realm برای این پراکسی.
server-urlstring(unset)<URL>URL سرور کنترل realm که برای دریافت جزئیات اتصال realm استفاده می‌شود.
tokenstring(unset)<string>توکن احراز هویت ارائه‌شده به سرور کنترل realm.
realm-idstring(unset)<string>شناسهٔ realm برای پیوستن.
stun-servers[]string(unset)<host:port list>سرورهای STUN استفاده‌شده برای عبور از NAT در realm.
snistring(unset)<SNI>SNI در TLS برای اتصال به سرور کنترل.
skip-cert-verifyboolfalsetrue | falseرد کردن راستی‌آزمایی TLS به‌سمت سرور کنترل (فقط آزمایش).
name-cert-verifystring(unset)<hostname>گواهی سرور را به‌جای SNI در برابر این نام میزبان راستی‌آزمایی می‌کند.
fingerprintstring(unset)<SHA256 hex>تثبیت اثرانگشت گواهی TLS سرور کنترل.
certificatestring(unset)<PEM file path>گواهی کلاینت (mTLS) به‌سمت سرور کنترل.
private-keystring(unset)<key file path>کلید خصوصی برای certificate.
alpn[]string(unset)<string list>ALPN برای اتصال به سرور کنترل.

منبع: adapter/outbound/hysteria2.go:75-90 · ثابت‌شده در v1.19.31 (ab405ba)

مثال‌ها ​

خروجی — پورت تکی، 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]

خروجی که از طریق یک realm و یک سرور کنترل متصل می‌شود:

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

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:29) — مقادیر کمتر از ۵ به بالا کلمپ می‌شوند.
  • مقادیر پهنای باند پسوند واحد می‌پذیرند (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/masquerade) تقسیم می‌کند؛ پهنای باند و کنترل ازدحام در streamSettings.finalmask.quicParams (brutalUp / brutalDown) قرار دارند. به Hysteria2 — Xray-core مراجعه کنید.
  • sing-box پیکربندی را در یک بلوک نگه می‌دارد ولی برای پهنای باند از عدد صحیح ساده Mbps (بدون پسوند واحد) استفاده می‌کند و مقدار چندریختی masquerade (URL رشته یا شیء تایپ‌شده) را ارائه می‌دهد. به Hysteria2 — sing-box مراجعه کنید.
  • mihomo همچنین می‌تواند realmها را میزبانی کند — به شنوندهٔ realm در Hysteria2 مراجعه کنید.

منبع: adapter/outbound/hysteria2.go:39-90 · v1.19.31 (ab405ba)

Core Tutorial اثر Argsment