Skip to content

Hysteria2 — Xray-core

Xray-core از Hysteria v2 پشتیبانی می‌کند اما پیکربندی را در دو بلوک تقسیم می‌کند: settings سطح پروتکل (نسخه، آدرس/پورت، کاربران) و streamSettings.hysteriaSettings سطح ترابرد (احراز هویت، پهنای باند، پرش پورت، استتار). هر دو باید پر شوند تا خروجی قابل استفاده باشد.

خروجی — لایهٔ پروتکل

settings برای یک خروجی با "protocol": "hysteria":

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
versionint32(required)2باید دقیقاً 2 باشد. هر مقدار دیگری در زمان راه‌اندازی رد می‌شود (`infra/conf/hysteria.go:19-21`).
address*Address(required)<host>نام میزبان یا IP سرور.
portuint16(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":

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
versionint32(required)2باید 2 باشد.
clients[]*HysteriaUserConfig[][HysteriaUserConfig]کاربران پذیرفته‌شده.

منبع: infra/conf/hysteria.go:39-42 · ثابت‌شده در v1.260327.0 (d2758a0)

clients[]

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
authstring(required)<string>رشتهٔ احراز هویت.
leveluint320<uint32>سطح policy برای این کاربر.
emailstring(unset)<string>برچسب در آمار/لاگ.

منبع: infra/conf/hysteria.go:33-37 · ثابت‌شده در v1.260327.0 (d2758a0)

لایهٔ ترابرد — hysteriaSettings

زیر streamSettings.hysteriaSettings تنظیم می‌شود. شامل تمام دکمه‌های عملیاتی است که لایهٔ پروتکل از قلم می‌اندازد.

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
versionint32(required)2نسخهٔ پروتکل Hysteria. باید با `version` در `settings` تطبیق داشته باشد.
authstring(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 برای خروجی.
udpIdleTimeoutint6460<2..600 seconds>ثانیه‌های بیکاری جریان UDP پیش از بسته شدن جریان QUIC. باید بین 2 و 600 (شامل) باشد (`infra/conf/transport_internet.go:544-546`).
masqueradeMasquerade(unset)Masqueradeفقط ورودی: استتار پاسخ HTTP برای ترافیک احراز نشده.

منبع: infra/conf/transport_internet.go:522-533 · ثابت‌شده در v1.260327.0 (d2758a0)

udphop

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
portsjson.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

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
typestring(required)file | proxy | stringانتخاب می‌کند کدام زیربلوک اعمال شود.
dirstring(file only)<dir path>دایرکتوری ارائه‌شده وقتی `type: file`.
urlstring(proxy only)<URL>URL بالادست وقتی `type: proxy`.
rewriteHostboolfalsetrue | falseبازنویسی سرآیند Host هنگام پراکسی (`type: proxy`).
insecureboolfalsetrue | falseرد کردن راستی‌آزمایی TLS روی upstream وقتی `type: proxy`.
contentstring(string only)<text>بدنه‌ای که وقتی `type: string` بازگردانده می‌شود.
headersmap[string]string{}{<header>: <value>}سرآیندهای پاسخ اضافی وقتی `type: string`.
statusCodeint32200<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, bps1
k, kb, kbps1024
m, mb, mbps1 048 576
g, gb, gbps1 073 741 824
t, tb, tbps1 099 511 627 776

بخش عددی به‌صورت float64 تجزیه می‌شود و نتیجه بر 8 تقسیم می‌گردد (بایت در ثانیه چیزی است که protobuf حمل می‌کند، اما نام واحد منبع bps است).

مثال‌ها

خروجی:

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

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

Core Tutorial اثر Argsment