Skip to content

Hysteria2 — sing-box

پیاده‌سازی Hysteria2 در sing-box تمیزترین از میان سه هسته است: یک بلوک مسطح واحد در هر سمت، تظاهر چندریختی و فیلدهای صریح port-hopping در خروجی.

ورودی

ورودی type: "hysteria2":

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
up_mbpsint0<Mbps>پهنای باند تخمینی آپ‌لینک به Mbps. سرور این مقدار را به‌عنوان راهنمایی برای کنترل ازدحام استفاده می‌کند.
down_mbpsint0<Mbps>پهنای باند تخمینی دانلینک به Mbps.
obfs*Hysteria2Obfs(disabled)Hysteria2Obfsبلوک مبهم‌سازی Salamander. وقتی تنظیم شود، هر دو سمت باید تطبیق داشته باشند.
users[]Hysteria2User[][Hysteria2User]کاربران پذیرفته‌شده.
ignore_client_bandwidthboolfalsetrue | falseاعلان پهنای باند کلاینت را نادیده می‌گیرد و تنظیمات پهنای باند سرور را یک‌جانبه استفاده می‌کند.
masquerade*Hysteria2Masquerade(disabled)Hysteria2Masqueradeتظاهر به پاسخ HTTP برای ترافیک احراز نشده. یک URL رشته‌ای یا یک شیء نوع‌دار می‌پذیرد.
brutal_debugboolfalsetrue | falseلاگ کردن جزئیات داخلی کنترل ازدحام Brutal.

منبع: option/hysteria2.go:13-23 · ثابت‌شده در v1.13.11 (553cfa1)

این ساختار ListenOptions و InboundTLSOptionsContainer را درون خود جای می‌دهد. یک پیکربندی TLS الزامی است — Hysteria2 روی QUIC اجرا می‌شود و هیچ حالت متن ساده‌ای ندارد.

obfs

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
typestring(required)salamanderنوع مبهم‌سازی. در حال حاضر فقط `salamander` تعریف شده است.
passwordstring(required)<string>گذرواژهٔ مبهم‌سازی (جدا از گذرواژهٔ کاربر).

منبع: option/hysteria2.go:25-28 · ثابت‌شده در v1.13.11 (553cfa1)

users[]

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
namestring(unset)<string>نام نمایشی استفاده‌شده در آمار و لاگ‌ها.
passwordstring(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 که یکی از سه شکل را انتخاب می‌کند:
فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
typestring(unset)file | proxy | stringانتخاب می‌کند کدام زیربلوک فعال است.

منبع: option/hysteria2.go:35-40 · ثابت‌شده در v1.13.11 (553cfa1)

type: "file"

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
directorystring(required)<dir path>دایرکتوری محلی که در نقطه‌انتهایی تظاهر سرو می‌شود.

منبع: option/hysteria2.go:97-99 · ثابت‌شده در v1.13.11 (553cfa1)

type: "proxy"

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
urlstring(required)<URL>URL بالادست که نقطه‌انتهایی تظاهر به آن پراکسی معکوس می‌کند.
rewrite_hostboolfalsetrue | falseهدر Host را برای تطبیق با URL بالادست بازنویسی می‌کند.

منبع: option/hysteria2.go:101-104 · ثابت‌شده در v1.13.11 (553cfa1)

type: "string"

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
status_codeint200<int>کد وضعیت HTTP بازگردانده‌شده.
headersbadoption.HTTPHeader{}{<header>: <value>}هدرهای پاسخ اضافی.
contentstring(required)<text>بدنهٔ پاسخ.

منبع: option/hysteria2.go:106-110 · ثابت‌شده در v1.13.11 (553cfa1)

خروجی

خروجی type: "hysteria2":

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
server_portsbadoption.Listable[string][]<range>فهرست port-hopping. هر ورودی یک پورت (مثلاً `"20001"`) یا یک محدودهٔ خط‌فاصله‌ای (مثلاً `"20001-20100"`) است.
hop_intervalbadoption.Duration30s<duration>هر چند وقت به یک پورت جدید سوئیچ می‌کند. مدت‌زمان‌های به سبک Go را می‌پذیرد.
up_mbpsint0<Mbps>پهنای باند تخمینی آپ‌لینک به Mbps.
down_mbpsint0<Mbps>پهنای باند تخمینی دانلینک به Mbps.
obfs*Hysteria2Obfs(disabled)Hysteria2Obfsمبهم‌سازی Salamander؛ باید با سرور تطبیق داشته باشد.
passwordstring(required)<string>گذرواژهٔ احراز هویت کاربر.
networkNetworkList(tcp+udp)tcp | udp | محدود کردن به فقط TCP یا فقط UDP.
brutal_debugboolfalsetrue | falseلاگ کردن جزئیات داخلی کنترل ازدحام Brutal در سمت کلاینت.

منبع: option/hysteria2.go:112-124 · ثابت‌شده در v1.13.11 (553cfa1)

DialerOptions، ServerOptions (server، server_port) و OutboundTLSOptionsContainer (tlsالزامی) را درون خود جای می‌دهد.

مثال‌ها

ورودی بدون port-hopping آشکار (سمت سرور فقط روی یک پورت شنود می‌کند)، با obfs Salamander و تظاهر فایل:

json
{
  "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 (۲۰۰۰۰-۲۰۱۰۰، هر ۳۰ ثانیه سوئیچ):

json
{
  "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)

Core Tutorial اثر Argsment