Hysteria2 — Xray-core
Xray-core از Hysteria v2 پشتیبانی میکند اما پیکربندی را در دو بلوک تقسیم میکند: settings سطح پروتکل (نسخه، آدرس/پورت، کاربران) و streamSettings.hysteriaSettings سطح ترابرد (احراز هویت، پهنای باند، پرش پورت، استتار). هر دو باید پر شوند تا خروجی قابل استفاده باشد.
خروجی — لایهٔ پروتکل
settings برای یک خروجی با "protocol": "hysteria":
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
version | int32 | (required) | 2 | باید دقیقاً 2 باشد. هر مقدار دیگری در زمان راهاندازی رد میشود (`infra/conf/hysteria.go:19-21`). |
address | *Address | (required) | <host> | نام میزبان یا IP سرور. |
port | uint16 | (required) | <port> | پورت UDP سرور. |
منبع: infra/conf/hysteria.go:12-16 · ثابتشده در v1.260327.0 (d2758a0)
Hysteria v1 پشتیبانی نمیشود
فیلد version باید برابر 2 باشد. HysteriaClientConfig.Build (infra/conf/hysteria.go:19-21) برای هر چیز دیگری errors.New("version != 2") را برمیگرداند.
ورودی — لایهٔ پروتکل
settings برای یک ورودی با "protocol": "hysteria":
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
version | int32 | (required) | 2 | باید 2 باشد. |
clients | []*HysteriaUserConfig | [] | [HysteriaUserConfig] | کاربران پذیرفتهشده. |
منبع: infra/conf/hysteria.go:39-42 · ثابتشده در v1.260327.0 (d2758a0)
clients[]
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
auth | string | (required) | <string> | رشتهٔ احراز هویت. |
level | uint32 | 0 | <uint32> | سطح policy برای این کاربر. |
email | string | (unset) | <string> | برچسب در آمار/لاگ. |
منبع: infra/conf/hysteria.go:33-37 · ثابتشده در v1.260327.0 (d2758a0)
لایهٔ ترابرد — hysteriaSettings
زیر streamSettings.hysteriaSettings تنظیم میشود. شامل تمام دکمههای عملیاتی است که لایهٔ پروتکل از قلم میاندازد.
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
version | int32 | (required) | 2 | نسخهٔ پروتکل Hysteria. باید با `version` در `settings` تطبیق داشته باشد. |
auth | string | (required on outbound) | <string> | رشتهٔ auth خروجی. در ورودی این فیلد به اعتبارسنج ارسال میشود اما auth به ازای کاربر در `settings.clients[].auth` قرار دارد. |
congestion | *string | (unset) | bbr | cubic | reno | راهنمای سمت سرور برای الگوریتم کنترل ازدحام. ساختهای جدیدتر این را به پارامهای QUIC منتقل میکنند — اگر اینجا تنظیم کنید هشدار چاپ میشود. |
up | *Bandwidth | (unset) | <bandwidth> | پهنای باند upstream تخمینی (رشته با واحد: `1Mbps`, `100kbps`, `50mbps`). |
down | *Bandwidth | (unset) | <bandwidth> | پهنای باند downstream تخمینی. |
udphop | *UdpHop | (unset) | UdpHop | پیکربندی پرش پورت UDP برای خروجی. |
udpIdleTimeout | int64 | 60 | <2..600 seconds> | ثانیههای بیکاری جریان UDP پیش از بسته شدن جریان QUIC. باید بین 2 و 600 (شامل) باشد (`infra/conf/transport_internet.go:544-546`). |
masquerade | Masquerade | (unset) | Masquerade | فقط ورودی: استتار پاسخ HTTP برای ترافیک احراز نشده. |
منبع: infra/conf/transport_internet.go:522-533 · ثابتشده در v1.260327.0 (d2758a0)
udphop
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
ports | json.RawMessage | (required) | <JSON array or string> | فهرست پورتها برای پرش. آرایهٔ JSON از پورتها/بازهها یا رشتهای مانند `"100,200-210,400"` را میپذیرد. |
interval | *Int32Range | (unset) | Int32Range | بازه (`{From, To}`) که کنترل میکند هر چند وقت یکبار پورتها سوییچ شوند، بر حسب ثانیه. |
منبع: infra/conf/transport_internet.go:503-506 · ثابتشده در v1.260327.0 (d2758a0)
masquerade
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
type | string | (required) | file | proxy | string | انتخاب میکند کدام زیربلوک اعمال شود. |
dir | string | (file only) | <dir path> | دایرکتوری ارائهشده وقتی `type: file`. |
url | string | (proxy only) | <URL> | URL بالادست وقتی `type: proxy`. |
rewriteHost | bool | false | true | false | بازنویسی سرآیند Host هنگام پراکسی (`type: proxy`). |
insecure | bool | false | true | false | رد کردن راستیآزمایی TLS روی upstream وقتی `type: proxy`. |
content | string | (string only) | <text> | بدنهای که وقتی `type: string` بازگردانده میشود. |
headers | map[string]string | {} | {<header>: <value>} | سرآیندهای پاسخ اضافی وقتی `type: string`. |
statusCode | int32 | 200 | <int> | کد وضعیت بازگرداندهشده وقتی `type: string`. |
منبع: infra/conf/transport_internet.go:508-520 · ثابتشده در v1.260327.0 (d2758a0)
فیلد type زیربلوک فعال را سوییچ میکند: file از dir استفاده میکند، proxy از url/rewriteHost/insecure، و string از content/headers/statusCode.
نحو پهنای باند
up و down توسط کمککار در infra/conf/transport_internet.go:478-501 تجزیه میشوند. پسوندهای پذیرفتهشده:
| پسوند | ضریب |
|---|---|
(خالی), b, bps | 1 |
k, kb, kbps | 1024 |
m, mb, mbps | 1 048 576 |
g, gb, gbps | 1 073 741 824 |
t, tb, tbps | 1 099 511 627 776 |
بخش عددی بهصورت float64 تجزیه میشود و نتیجه بر 8 تقسیم میگردد (بایت در ثانیه چیزی است که protobuf حمل میکند، اما نام واحد منبع bps است).
مثالها
خروجی:
{
"outbounds": [
{
"tag": "hy2-out",
"protocol": "hysteria",
"settings": {
"version": 2,
"address": "example.com",
"port": 443
},
"streamSettings": {
"network": "hysteria",
"security": "tls",
"tlsSettings": { "serverName": "example.com" },
"hysteriaSettings": {
"version": 2,
"auth": "<password>",
"up": "100mbps",
"down": "300mbps",
"udpIdleTimeout": 120
}
}
}
]
}ورودی با دو کاربر و یک استتار از نوع HTTP-file:
{
"inbounds": [
{
"tag": "hy2-in",
"listen": "0.0.0.0",
"port": 443,
"protocol": "hysteria",
"settings": {
"version": 2,
"clients": [
{ "auth": "<alice>", "email": "alice" },
{ "auth": "<bob>", "email": "bob" }
]
},
"streamSettings": {
"network": "hysteria",
"security": "tls",
"tlsSettings": { "certificates": [{ "certificateFile": "/etc/ssl/cert.pem", "keyFile": "/etc/ssl/key.pem" }] },
"hysteriaSettings": {
"version": 2,
"masquerade": {
"type": "file",
"dir": "/var/www"
}
}
}
}
]
}نکات
- یک اشتباه رایج: تنظیم
authفقط داخلsettings(انگار که فیلد نامکاربری/گذرواژه است). Xray auth خروجی را ازstreamSettings.hysteriaSettings.authمیخواند. کاربران ورودی ازsettings.clients[].auth(به ازای کاربر) استفاده میکنند وauthسطح ترابرد را برای تطبیق نادیده میگیرند. congestion,up,downوudphopدر یک نسخهٔ آینده به بلوکهای جدیدfinalmask/quicParamsمنتقل خواهند شد. اگر اینها در مکان قدیمی تنظیم شوند هشدار چاپ میشود (infra/conf/transport_internet.go:540-542).- Hysteria v1 بهطور کامل از Xray-core حذف شده است. نام "v1" در منبع اکنون فقط یک برچسب تاریخی است —
version != 2خرابی قطعی است. udpIdleTimeout < 2یا> 600خطای راهاندازی را تحریک میکند (infra/conf/transport_internet.go:544-546).
نکات بینهستهای
- sing-box از یک بلوک واحد و بسیار مسطحتر استفاده میکند — بدون تقسیم ترابرد. پهنای باند بهصورت
intساده Mbps است (بدون رشتهٔ واحد) و استتار از یک شکل چندریختی (URL رشتهای یا شیء نوعدار) پشتیبانی میکند. به Hysteria2 — sing-box مراجعه کنید. - mihomo نیز تکبلوکی است، با پرش پورت که توسط
ports(نحو بازه) بهعلاوهٔhop-intervalکنترل میشود. mihomo مانند Xray رشتههای با پسوند واحد را برایup/downمیپذیرد. به Hysteria2 — mihomo مراجعه کنید.
منبع: infra/conf/hysteria.go:12-42 · v1.260327.0 (d2758a0)
