Hysteria realm — sing-box
hysteria-realm یک سرویس میعادگاه برای عبور از NAT در Hysteria2 است. یک سرور Hysteria2 پشت NAT آدرسهای عمومی خود را با STUN کشف میکند و آنها را با یک شناسهٔ realm در این سرویس ثبت میکند؛ کلاینتها این آدرسها را از realm میپرسند، دو طرف سوراخ UDP میزنند و سپس اتصال QUIC مستقیماً برقرار میشود. realm فقط سیگنالدهی صفحهٔ کنترل را حمل میکند — ترافیک پراکسی هرگز از آن عبور نمیکند.
گزینهها
type: "hysteria-realm" زیر services[]:
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
users | []HysteriaRealmUser | (required) | [HysteriaRealmUser] | حسابهایی که اجازهٔ استفاده از realm را دارند. دستکم یکی لازم است؛ وگرنه راهاندازی شکست میخورد. |
منبع: option/hysteria2.go:235-240 · ثابتشده در v1.14.2 (af6e64c)
این سرویس همچنین ListenOptions (ورودیها را ببینید)، یک بلوک tls ورودی (TLS را ببینید) و فیلدهای HTTP/2 زیر را جاسازی میکند. با tls، HTTP/2 روی TLS ارائه میشود (h2 خودکار به فهرست ALPN افزوده میشود)؛ بدون آن، HTTP متنآشکار — HTTP/1.1، و HTTP/2 متنآشکار هم پذیرفته میشود.
users[]
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
name | string | (required) | <string> | نام حساب، برای گزارشها و بهعنوان کلید سهمیهٔ realm به ازای کاربر. |
token | string | (required) | <string> | توکن Bearer که ورودیها و خروجیهای Hysteria2 بهصورت Authorization: Bearer <token> ارائه میکنند (همان realm.token آنها). |
max_realms | int | 0 | <int> | تعداد اسلاتهای realm که این حساب میتواند همزمان در اختیار داشته باشد. 0 یعنی نامحدود؛ فراتر از حد، ثبتنام با HTTP 429 رد میشود. |
منبع: option/hysteria2.go:229-233 · ثابتشده در v1.14.2 (af6e64c)
فیلدهای HTTP/2
این فیلدها سرور HTTP/2 سرویس را تنظیم میکنند و فقط وقتی کلاینتها HTTP/2 صحبت میکنند اهمیت دارند.
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
idle_timeout | badoption.Duration | (Go default) | <duration> | بستن اتصالهای HTTP/2 که این مدت بیکار بمانند. |
keep_alive_period | badoption.Duration | (disabled) | <duration> | ارسال PING در HTTP/2 وقتی این مدت چیزی خوانده نشده، برای تشخیص اتصالهای مرده. |
stream_receive_window | *byteformats.MemoryBytes | (Go default) | <size> | بافر بارگذاری هر جریان (پنجرهٔ کنترل جریان)، بهصورت اندازهٔ حافظه. |
connection_receive_window | *byteformats.MemoryBytes | (Go default) | <size> | بافر بارگذاری هر اتصال، بهصورت اندازهٔ حافظه. |
max_concurrent_streams | int | (Go default) | <int> | بیشینهٔ جریانهای همزمان HTTP/2 در هر اتصال. |
منبع: option/http.go:14-20 · ثابتشده در v1.14.2 (af6e64c)
Hysteria2 چگونه از realm استفاده میکند
- سمت سرور: روی ورودی Hysteria2
realmرا تنظیم کنید، باserver_urlکه به این سرویس اشاره میکند، یکtokenازusers[]، یکrealm_idوstun_servers. ورودی آدرسهایی را که با STUN کشف کرده زیر آن شناسه ثبت میکند و ثبتنام را با ضربانهای heartbeat زنده نگه میدارد. - سمت کلاینت: روی خروجی Hysteria2
realmرا (بهجایserver) تنظیم کنید، با همانserver_url، یکtokenمعتبر و همانrealm_id. خروجی آدرسها را جستوجو میکند، سوراخزنی میکند و سپس دستدهی عادی QUIC را انجام میدهد. - جزئیات فیلدها (
ip_version،port_mapping،http_client،stun_domain_resolver) در صفحهٔ Hysteria2 آمده است.
مثال حداقلی
سرویس realm، روی میزبانی با آدرس عمومی پایدار:
{
"services": [
{
"type": "hysteria-realm",
"tag": "realm",
"listen": "::",
"listen_port": 8443,
"tls": {
"enabled": true,
"certificate_path": "/etc/ssl/realm.pem",
"key_path": "/etc/ssl/realm.key"
},
"users": [
{ "name": "home", "token": "<token>", "max_realms": 2 }
]
}
]
}بلوک realm متناظر روی ورودی Hysteria2 پشت NAT (خروجی از همان server_url، token و realm_id استفاده میکند):
"realm": {
"server_url": "https://realm.example.com:8443",
"token": "<token>",
"realm_id": "home-server",
"stun_servers": ["stun.l.google.com:19302"]
}نکات
- به برچسب ساخت
with_quicنیاز دارد؛ بدون آن، این نوع وجود دارد اما هنگام راهاندازی شکست میخورد. usersنباید خالی باشد و هر مدخل باید همnameو همtokenداشته باشد.- یک شناسهٔ realm در هر لحظه فقط در اختیار یک ثبتنام است: سرور دومی که همان شناسه را ثبت کند HTTP 409 (
realm_taken) دریافت میکند. - API زیر
/v1/<realm_id>قرار دارد — اگر یک پراکسی معکوس جلوی آن میگذارید، این مسیر را دستنخورده نگه دارید. - فقط realm باید از اینترنت در دسترس باشد؛ سرور Hysteria2 پشت NAT به هدایت پورت نیازی ندارد.
نکات بینهستهای
- mihomo یک شنوندهٔ میعادگاه معادل دارد، Hysteria2 realm، با یک
tokenمشترک بههمراه سقفهایmax-realms/max-realms-per-ipبهجای توکنهای به ازای کاربر. - Xray-core سرور realm ندارد؛ ماسک UDP از نوع
realmدر finalmask آن همتای سمت نقطهانتهایی است. Hysteria2 — Xray-core را ببینید.
منبع: option/hysteria2.go:229-240 · v1.14.2 (af6e64c)
