Skip to content

REALITY — mihomo

mihomo از REALITY در هر دو سمت پشتیبانی می‌کند. خروجی از reality-opts: تعبیه‌شده در ورودی پراکسی استفاده می‌کند؛ ورودی از reality-config: روی شنونده استفاده می‌کند.

خروجی — reality-opts

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
public-keystring(required)<base64 X25519 public key>کلید عمومی X25519 سرور. توسط مدیر سرور با `generate reality-keypair` در mihomo یا `xray x25519` در Xray تولید می‌شود.
short-idstring(unset)<hex string>شناسهٔ کوتاهی که به سرور اعلام می‌شود. باید با یکی از ورودی‌های `short-id` سرور مطابقت داشته باشد (یا در صورتی که سرور `""` را فهرست کرده باشد، خالی باشد).
support-x25519mlkem768boolfalsetrue | falseتبلیغ تبادل کلید ترکیبی پساکوانتومی X25519MLKEM768. سرور باید از منحنی متناظر پشتیبانی کند.

منبع: adapter/outbound/reality.go:13-18 · ثابت‌شده در v1.19.24 (a847246)

ورودی — reality-config

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
deststring(required)<host:port>هدف استتار — سایت معتبری که دست‌دهی TLS آن برای اتصالات غیرمجاز پراکسی می‌شود. گواهی سایت باید معتبر باشد؛ mihomo آن را در حین ارسال دست‌دهی راستی‌آزمایی می‌کند.
private-keystring(required)<base64 X25519 private key>کلید خصوصی X25519 سرور.
short-id[]string[][<hex string>]لیست shortIDهای مجاز (هگز، طول زوج، ≤ ۱۶ کاراکتر). `""` را قرار دهید تا کلاینت‌هایی که shortID اعلام نمی‌کنند هم اجازه داشته باشند.
server-names[]string(required)[<hostname>]مقادیر SNI قابل قبول. اتصالاتی با SNI متفاوت به `dest` ارسال می‌شوند (جایگزین استتار).
max-time-differenceint0 (no limit)<seconds>حداکثر اختلاف ساعت قابل تحمل بین کلاینت و سرور، بر حسب ثانیه. ۰ این بررسی را غیرفعال می‌کند.
proxystring(direct)<proxy name>ترافیک جایگزین-استتار را به‌جای شماره‌گیری مستقیم به `dest`، از یک خروجی پراکسی نام‌دار مسیریابی می‌کند. وقتی سایت استتار از سرور قابل دسترس نیست مفید است.
limit-fallback-uploadRealityLimitFallback(unset)RealityLimitFallbackمحدود کردن نرخ جهت آپلود جایگزین-استتار. برای آنکه ترافیک REALITY از یک سایت معتبر کند قابل تمایز نباشد استفاده کنید.
limit-fallback-downloadRealityLimitFallback(unset)RealityLimitFallbackمحدود کردن نرخ جهت دانلود جایگزین-استتار.

منبع: listener/inbound/reality.go:5-15 · ثابت‌شده در v1.19.24 (a847246)

limit-fallback-upload / limit-fallback-download

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
after-bytesuint640<bytes>محدودیت نرخ را فقط پس از عبور این تعداد بایت اعمال می‌کند. ۰ از همان بایت اول محدود می‌کند.
bytes-per-secuint640 (no limit)<bytes>سقف پهنای باند پایدار بر حسب بایت بر ثانیه. ۰ این محدودیت را غیرفعال می‌کند.
burst-bytes-per-secuint640 (=bytes-per-sec)<bytes>سقف پهنای باند انفجاری. ۰ همان مقدار `bytes-per-sec` را حفظ می‌کند (بدون انفجار).

منبع: listener/inbound/reality.go:17-21 · ثابت‌شده در v1.19.24 (a847246)

تولید کلید

mihomo یک تولیدکنندهٔ کلید را در خود دارد:

sh
$ mihomo generate reality-keypair
PrivateKey: <base64-private-key>
PublicKey:  <base64-public-key>

xray x25519 در Xray همان قالب را تولید می‌کند (هر دو از X25519 در base64-RawURLEncoding استفاده می‌کنند) — کلیدها بین سه هسته قابل تبادل هستند.

مثال‌ها

خروجی — VLESS با REALITY:

yaml
proxies:
  - name: vless-reality
    type: vless
    server: your.server.example
    port: 443
    uuid: <UUID>
    flow: xtls-rprx-vision
    tls: true
    servername: www.cloudflare.com
    client-fingerprint: chrome
    reality-opts:
      public-key: <base64-public-key>
      short-id: 0123456789abcdef

ورودی — شنوندهٔ VLESS با REALITY سمت سرور:

yaml
listeners:
  - name: vless-reality-in
    type: vless
    listen: 0.0.0.0
    port: 443
    users:
      - username: alice
        uuid: <UUID>
        flow: xtls-rprx-vision
    reality-config:
      dest: www.cloudflare.com:443
      private-key: <base64-private-key>
      short-id:
        - ''
        - 0123456789abcdef
      server-names:
        - www.cloudflare.com
      max-time-difference: 60
      limit-fallback-upload:
        bytes-per-sec: 8388608
        burst-bytes-per-sec: 16777216
      limit-fallback-download:
        bytes-per-sec: 12582912

نکات

  • support-x25519mlkem768 روی خروجی، تبادل کلید پساکوانتومی ترکیبی افزوده‌شده در ۲۰۲۴ را فعال می‌کند. سرورهایی که در برابر لیست منحنی متناظر ساخته شده‌اند آن را می‌پذیرند؛ سرورهای قدیمی‌تر یک دست‌دهی معمولی X25519 می‌بینند.
  • فیلد proxy: در ورودی، جایگزین استتار را از طریق یک خروجی mihomo دیگر مسیریابی می‌کند. این ویژگی منحصر به mihomo است — وقتی سرور نمی‌تواند مستقیماً به سایت استتار دسترسی پیدا کند مفید است (sing-box و Xray همیشه مستقیماً به dest شماره‌گیری می‌کنند).
  • limit-fallback-upload.after-bytes دورهٔ گرم‌شدن است: محدودیت تنها پس از این تعداد بایت اعمال می‌شود. مقدار کوچکی (~۱۰۰ KB) استفاده کنید تا خود دست‌دهی استتار محدود نشود.
  • تنظیم max-time-difference: 60 (یک دقیقه) برای سرورهای بدون NTP به اندازهٔ کافی سخاوتمندانه است. تنظیم آن به ۰ بررسی اختلاف ساعت را به‌طور کامل غیرفعال می‌کند — برای توسعه راحت، برای محصول پرخطر.

نکات بین‌هسته‌ای

  • Xray-core همه چیز را در یک REALITYConfig نگه می‌دارد. هدف استتار dest است؛ اثرانگشت uTLS در همان ساختار به‌صورت fingerprint قرار دارد. به REALITY — Xray-core مراجعه کنید.
  • sing-box REALITY را درون بلوک تعبیه‌شدهٔ tls: در هر دو سمت تو در تو می‌کند. هدف استتار زیربلوکی به نام handshake است (که ServerOptions + DialerOptions را در خود تعبیه می‌کند). به REALITY — sing-box مراجعه کنید.

منبع: adapter/outbound/reality.go:13-18 · v1.19.24 (a847246)

Core Tutorial اثر Argsment