Hysteria2 — sing-box
پیادهسازی Hysteria2 در sing-box تمیزترین از میان سه هسته است: یک بلوک مسطح واحد در هر سمت، تظاهر چندریختی و فیلدهای صریح port-hopping در خروجی.
ورودی
ورودی type: "hysteria2":
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
up_mbps | int | 0 | <Mbps> | پهنای باند تخمینی آپلینک به Mbps. سرور این مقدار را بهعنوان راهنمایی برای کنترل ازدحام استفاده میکند. |
down_mbps | int | 0 | <Mbps> | پهنای باند تخمینی دانلینک به Mbps. |
obfs | *Hysteria2Obfs | (disabled) | Hysteria2Obfs | بلوک مبهمسازی Salamander. وقتی تنظیم شود، هر دو سمت باید تطبیق داشته باشند. |
users | []Hysteria2User | [] | [Hysteria2User] | کاربران پذیرفتهشده. |
ignore_client_bandwidth | bool | false | true | false | اعلان پهنای باند کلاینت را نادیده میگیرد و تنظیمات پهنای باند سرور را یکجانبه استفاده میکند. |
masquerade | *Hysteria2Masquerade | (disabled) | Hysteria2Masquerade | تظاهر به پاسخ HTTP برای ترافیک احراز نشده. یک URL رشتهای یا یک شیء نوعدار میپذیرد. |
brutal_debug | bool | false | true | false | لاگ کردن جزئیات داخلی کنترل ازدحام Brutal. |
منبع: option/hysteria2.go:13-23 · ثابتشده در v1.13.11 (553cfa1)
این ساختار ListenOptions و InboundTLSOptionsContainer را درون خود جای میدهد. یک پیکربندی TLS الزامی است — Hysteria2 روی QUIC اجرا میشود و هیچ حالت متن سادهای ندارد.
obfs
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
type | string | (required) | salamander | نوع مبهمسازی. در حال حاضر فقط `salamander` تعریف شده است. |
password | string | (required) | <string> | گذرواژهٔ مبهمسازی (جدا از گذرواژهٔ کاربر). |
منبع: option/hysteria2.go:25-28 · ثابتشده در v1.13.11 (553cfa1)
users[]
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
name | string | (unset) | <string> | نام نمایشی استفادهشده در آمار و لاگها. |
password | string | (required) | <string> | گذرواژهٔ احراز هویت کاربر. |
منبع: option/hysteria2.go:30-33 · ثابتشده در v1.13.11 (553cfa1)
masquerade
فیلد masquerade چندریختی است (option/hysteria2.go:44-95):
- یک URL رشتهای ساده. طرحها:
file:///var/www— معادل{ "type": "file", "directory": "/var/www" }.https://upstream.example.com— معادل{ "type": "proxy", "url": "..." }.
- یک شیء با فیلد
typeکه یکی از سه شکل را انتخاب میکند:
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
type | string | (unset) | file | proxy | string | انتخاب میکند کدام زیربلوک فعال است. |
منبع: option/hysteria2.go:35-40 · ثابتشده در v1.13.11 (553cfa1)
type: "file"
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
directory | string | (required) | <dir path> | دایرکتوری محلی که در نقطهانتهایی تظاهر سرو میشود. |
منبع: option/hysteria2.go:97-99 · ثابتشده در v1.13.11 (553cfa1)
type: "proxy"
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
url | string | (required) | <URL> | URL بالادست که نقطهانتهایی تظاهر به آن پراکسی معکوس میکند. |
rewrite_host | bool | false | true | false | هدر Host را برای تطبیق با URL بالادست بازنویسی میکند. |
منبع: option/hysteria2.go:101-104 · ثابتشده در v1.13.11 (553cfa1)
type: "string"
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
status_code | int | 200 | <int> | کد وضعیت HTTP بازگرداندهشده. |
headers | badoption.HTTPHeader | {} | {<header>: <value>} | هدرهای پاسخ اضافی. |
content | string | (required) | <text> | بدنهٔ پاسخ. |
منبع: option/hysteria2.go:106-110 · ثابتشده در v1.13.11 (553cfa1)
خروجی
خروجی type: "hysteria2":
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
server_ports | badoption.Listable[string] | [] | <range> | فهرست port-hopping. هر ورودی یک پورت (مثلاً `"20001"`) یا یک محدودهٔ خطفاصلهای (مثلاً `"20001-20100"`) است. |
hop_interval | badoption.Duration | 30s | <duration> | هر چند وقت به یک پورت جدید سوئیچ میکند. مدتزمانهای به سبک Go را میپذیرد. |
up_mbps | int | 0 | <Mbps> | پهنای باند تخمینی آپلینک به Mbps. |
down_mbps | int | 0 | <Mbps> | پهنای باند تخمینی دانلینک به Mbps. |
obfs | *Hysteria2Obfs | (disabled) | Hysteria2Obfs | مبهمسازی Salamander؛ باید با سرور تطبیق داشته باشد. |
password | string | (required) | <string> | گذرواژهٔ احراز هویت کاربر. |
network | NetworkList | (tcp+udp) | tcp | udp | | محدود کردن به فقط TCP یا فقط UDP. |
brutal_debug | bool | false | true | false | لاگ کردن جزئیات داخلی کنترل ازدحام Brutal در سمت کلاینت. |
منبع: option/hysteria2.go:112-124 · ثابتشده در v1.13.11 (553cfa1)
DialerOptions، ServerOptions (server، server_port) و OutboundTLSOptionsContainer (tls — الزامی) را درون خود جای میدهد.
مثالها
ورودی بدون port-hopping آشکار (سمت سرور فقط روی یک پورت شنود میکند)، با obfs Salamander و تظاهر فایل:
{
"inbounds": [
{
"type": "hysteria2",
"tag": "hy2-in",
"listen": "::",
"listen_port": 443,
"users": [
{ "name": "alice", "password": "<password>" }
],
"obfs": { "type": "salamander", "password": "<obfs>" },
"tls": {
"enabled": true,
"alpn": ["h3"],
"certificate_path": "/etc/ssl/cert.pem",
"key_path": "/etc/ssl/key.pem"
},
"masquerade": "file:///var/www"
}
]
}خروجی با port-hopping (۲۰۰۰۰-۲۰۱۰۰، هر ۳۰ ثانیه سوئیچ):
{
"outbounds": [
{
"type": "hysteria2",
"tag": "hy2-out",
"server": "example.com",
"server_port": 443,
"server_ports": ["20000-20100"],
"hop_interval": "30s",
"password": "<password>",
"obfs": { "type": "salamander", "password": "<obfs>" },
"up_mbps": 100,
"down_mbps": 300,
"tls": { "enabled": true, "server_name": "example.com" }
}
]
}نکات
- مقادیر پهنای باند در اینجا عدد صحیح ساده به Mbps هستند — بدون رشتهٔ واحد. Xray و mihomo رشتههای پسونددار (
"100mbps") را میپذیرند، sing-box نمیپذیرد. obfs.typeامروز فقط یک مقدار تعریفشده دارد (salamander). پیکربندیهایی کهobfsرا حذف میکنند از مسیر بدون مبهمسازی استفاده میکنند.masqueradeهم شیء نوعدار چندریختی و هم یک URL رشتهای ساده را میپذیرد — هر دو به همان نمایش داخلی unmarshal میشوند (option/hysteria2.go:59-78).ignore_client_bandwidth: trueتنظیم توصیهشده برای سرورهایی است که مدیر آن از قبل پهنای باند واقعی را میداند — از این جلوگیری میکند که یک کلاینت بدخواه ظرفیت خود را کمتر اعلام کند و بیشتر از سرور بگیرد.
نکات بینهستهای
- Xray-core از Hysteria2 پشتیبانی میکند اما پیکربندی را میان
settingsوstreamSettings.hysteriaSettingsتقسیم میکند. به Hysteria2 — Xray-core مراجعه کنید. - mihomo از یک خروجی تکبلوکی با
up/downبهصورت رشته (با پسوندهای واحد مانند Xray) استفاده میکند. Port-hopping بهصورتports+hop-intervalاست. کاربران در ورودی یکmap[string]string(نامکاربری → گذرواژه) هستند نه فهرستی از اشیاء. به Hysteria2 — mihomo مراجعه کنید.
منبع: option/hysteria2.go:13-124 · v1.13.11 (553cfa1)
