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.31 (ab405ba)

ورودی — 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.31 (ab405ba)

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.31 (ab405ba)

تولید کلید ​

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 روی خروجی، تبادل کلید پساکوانتومی ترکیبی (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.31 (ab405ba)

Core Tutorial اثر Argsment