Skip to content

شنوندهٔ Hysteria2 realm — mihomo

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

این سمت سرورِ قابلیت realm است. پشتیبانی از realm جدیدتر و پیشرفته است — بیشتر استقرارها به‌جای آن یک شنوندهٔ ساده hysteria2 را اجرا می‌کنند.

شنونده

ورودی زیر listeners: با type: hysteria2-realm. این BaseOption را در خود جای می‌دهد (listen، port).

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
tokenstring(unset)<string>توکن احراز هویت مشترکی که هر realm باید برای ثبت‌نام در این شنونده یا سرویس‌دهی توسط آن ارائه کند.
max-realmsint0<int>بیشینهٔ تعداد realmهایی که این شنونده میزبانی می‌کند. مقدار 0 آن را نامحدود می‌گذارد.
max-realms-per-ipint0<int>سقف realmهای میزبانی‌شده به‌ازای هر IP کلاینت. مقدار 0 آن را نامحدود می‌گذارد.
trusted-proxy-headerstring(unset)<header name>هدر HTTP که آدرس IP واقعی کلاینت را حمل می‌کند، وقتی شنونده پشت یک پراکسی جلویی قرار دارد.
realm-name-patternstring(unset)<pattern>الگویی که نام realmهای پذیرفته‌شده را محدود می‌کند.
certificatestring(required)<PEM file path>گواهی سرور TLS (مسیر PEM).
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 دوطرفه (mTLS) (مثلاً `require-and-verify-client-cert`).
client-auth-certstring(unset)<PEM file path>بستهٔ CA که به‌عنوان ریشه‌های کلاینت پذیرفته می‌شود.
ech-keystring(unset)<ECH config>مواد کلید Encrypted Client Hello.
alpn[]string[h3]h3ALPN ارائه‌شده در طول دست‌دهی TLS (معمولاً `h3`).

منبع: listener/inbound/hysteria2_realm.go:12-25 · ثابت‌شده در v1.19.27 (5184081)

مثال

شنوندهٔ realm حداقلی با یک توکن مشترک و سقف realm به‌ازای هر IP:

yaml
listeners:
  - name: hy2-realm-server
    type: hysteria2-realm
    listen: 0.0.0.0
    port: 443
    token: <realm-token>
    max-realms: 16
    max-realms-per-ip: 2
    certificate: /etc/mihomo/server.crt
    private-key: /etc/mihomo/server.key
    alpn: [h3]

یک کلاینت با افزودن realm-opts به خروجی خود به یک realm روی این شنونده می‌پیوندد — به Hysteria2 — mihomo مراجعه کنید.

نکات

  • token راز مشترک است. مقدار realm-opts.token یک کلاینت باید با آن تطبیق کند تا آن کلاینت بتواند در شنونده ثبت‌نام کند یا توسط آن سرویس‌دهی شود.
  • max-realms کل تعداد realmهایی را که شنونده میزبانی می‌کند محدود می‌کند؛ max-realms-per-ip آن‌ها را به‌ازای هر IP کلاینت محدود می‌کند. هر دو را روی مقدار پیش‌فرض بگذارید تا نامحدود بمانند.
  • trusted-proxy-header تنها زمانی اهمیت دارد که شنونده پشت یک پراکسی جلویی قرار داشته باشد که آدرس مبدأ را بازنویسی می‌کند — این هدر، نام هدری را مشخص می‌کند که IP اصلی کلاینت را حمل می‌کند تا سقف‌های به‌ازای IP دقیق بمانند.
  • TLS اجباری است: certificate و private-key را تأمین کنید. برای نیاز به TLS دوطرفه، client-auth-type به‌علاوهٔ client-auth-cert را اضافه کنید و برای فعال‌سازی Encrypted Client Hello، ech-key را بیفزایید.

نکات بین‌هسته‌ای

  • realmها قابلیتی مخصوص mihomo / Hysteria2 هستند. نه Xray-core و نه sing-box شنوندهٔ چند-realm معادلی ارائه نمی‌کنند — هرکدام به‌ازای هر ورودی یک سرویس Hysteria2 واحد را میزبانی می‌کنند. برای شنونده‌های تک‌مستأجری آن‌ها به Hysteria2 — Xray-core و Hysteria2 — sing-box مراجعه کنید.

منبع: listener/inbound/hysteria2_realm.go:12-25 · v1.19.27 (5184081)

Core Tutorial اثر Argsment