Skip to content

AnyTLS — mihomo

mihomo در هر دو سمت از AnyTLS با قراردادهای استاندارد mihomo پشتیبانی می‌کند (بدون cipher؛ خروجی کلیدهای TLS / ECH / uTLS را در سطح بالا دارد).

خروجی

ورودی تحت proxies: با type: anytls. BasicOption را جاسازی می‌کند.

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
namestring(required)<string>نام یکتای پراکسی.
serverstring(required)<host>میزبان یا IP سرور بالادست.
portint(required)<port>پورت سرور بالادست.
passwordstring(required)<string>گذرواژهٔ سرور.
alpn[]string[]h2 | http/1.1فهرست ALPN ارائه‌شده در دست‌دهی TLS.
snistring(server)<SNI>Server Name Indication در TLS.
ech-optsECHOptions(disabled)ECHOptionsپیکربندی Encrypted Client Hello.
shadow-tls-optsShadowTLSOptions(disabled)ShadowTLSOptionsبلوک پوشش Shadow-TLS (`{ password, version }`). برای هر پراکسی فقط یک بلوک پوشش TLS می‌تواند فعال باشد.
restls-optsRestlsOptions(disabled)RestlsOptionsبلوک پوشش Restls (`{ password, version-hint, restls-script }`). برای هر پراکسی فقط یک بلوک پوشش TLS می‌تواند فعال باشد.
jls-optsJLSOptions(disabled)JLSOptionsبلوک پوشش JLS (`{ username, password }`). برای هر پراکسی فقط یک بلوک پوشش TLS می‌تواند فعال باشد.
client-fingerprintstring(global)chrome | firefox | safari | ios | edge | random | randomizedاثرانگشت client-hello مبتنی بر uTLS.
skip-cert-verifyboolfalsetrue | falseغیرفعال‌سازی راستی‌آزمایی TLS (فقط آزمایش).
name-cert-verifystring(unset)<hostname>گواهی سرور را به‌جای SNI در برابر این نام میزبان راستی‌آزمایی می‌کند.
fingerprintstring(unset)<SHA256 hex>تثبیت اثرانگشت گواهی TLS سرور.
certificatestring(unset)<PEM file path>گواهی کلاینت (mTLS).
private-keystring(unset)<key file path>کلید خصوصی برای `certificate`.
udpboolfalsetrue | falseاجازه به بازپخش بسته‌های UDP از این خروجی.
idle-session-check-intervalint0<seconds>بازهٔ پویش استخر نشست. ۰ پیش‌فرض زمان اجرا را حفظ می‌کند.
idle-session-timeoutint0<seconds>نشست‌هایی که بیش از این تعداد ثانیه بیکار باشند بازیابی می‌شوند. ۰ پیش‌فرض زمان اجرا را حفظ می‌کند.
min-idle-sessionint0<int>حداقل نشست‌های گرم برای نگه داشتن در استخر.
disable-reuseboolfalsetrue | falseنشست‌های بیکار را در استخر نگه نمی‌دارد — برای هر جریان یک نشست AnyTLS تازه باز می‌کند و پس از آن می‌بندد.

منبع: adapter/outbound/anytls.go:27-50 · ثابت‌شده در v1.19.29 (e26714a)

ورودی

ورودی تحت listeners: با type: anytls. BaseOption را جاسازی می‌کند.

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
usersmap[string]string{}{<username>: <password>}جدول کاربر — نام کاربری ← گذرواژه.
certificatestring(required)<PEM file path>گواهی TLS سرور.
private-keystring(required)<key file path>کلید خصوصی TLS.
client-auth-typestring(none)no-client-cert | request-client-cert | require-any-client-cert | verify-client-cert-if-given | require-and-verify-client-certحالت احراز هویت متقابل TLS کلاینت.
client-auth-certstring(unset)<PEM file path>بستهٔ CA پذیرفته‌شده به‌عنوان ریشهٔ کلاینت.
ech-keystring(unset)<ECH config>مواد Encrypted Client Hello.
shadow-tlsShadowTLS(disabled)ShadowTLSبلوک پوشش Shadow-TLS سمت سرور (`{ enable, version, password, users, handshake, ... }`).
res-tlsResTLS(disabled)ResTLSبلوک پوشش Restls سمت سرور (`{ enable, dest, password, ... }`)؛ کلاینت‌های احراز هویت‌نشده به `dest` بازپخش می‌شوند.
jls-configJLSConfig(disabled)JLSConfigبلوک پوشش JLS سمت سرور (`{ enable, users, sni, dest, ... }`)؛ کلاینت‌های احراز هویت‌نشده به `dest` بازپخش می‌شوند.
allow-insecureboolfalsetrue | falseرد کردن راستی‌آزمایی گواهی کلاینت TLS روی شنونده (فقط آزمایش).
padding-schemestring(server default)<scheme>طرح پدینگ سفارشی. یک رشته؛ قالب مشخصهٔ پروتکل بالادست.

منبع: listener/inbound/anytls.go:12-25 · ثابت‌شده در v1.19.29 (e26714a)

مثال‌ها

خروجی:

yaml
proxies:
  - name: anytls
    type: anytls
    server: example.com
    port: 443
    password: <password>
    sni: example.com
    alpn: [h2, http/1.1]
    udp: true
    client-fingerprint: chrome
    idle-session-check-interval: 30
    idle-session-timeout: 60
    min-idle-session: 4

ورودی:

yaml
listeners:
  - name: anytls-in
    type: anytls
    listen: 0.0.0.0
    port: 443
    users:
      alice: <alice-password>
      bob: <bob-password>
    certificate: /etc/mihomo/server.crt
    private-key: /etc/mihomo/server.key

نکات

  • mihomo برای سه زمان بیکاری استخر نشست از ثانیه استفاده می‌کند؛ sing-box برای همین فیلدها از رشته‌های duration ("30s") استفاده می‌کند. املای نام فیلد نیز متفاوت است — اینجا kebab-case، آنجا snake_case.
  • users: یک نگاشت YAML از نام کاربری به گذرواژه است، مشابه ورودی‌های TUIC و Hysteria2 در mihomo.
  • خروجی mihomo کلیدهای TLS، ECH و اثرانگشت uTLS را به‌صورت درون‌خط دارد. sing-box این‌ها را در بلوک جاسازی‌شدهٔ tls: قرار می‌دهد.
  • shadow-tls-opts، restls-opts و jls-opts حالت‌های پوشش TLS دوبه‌دو ناسازگارند — حداکثر یکی را فعال کنید. همتاهای ورودی shadow-tls، res-tls و jls-config نیز به همین ترتیب دوبه‌دو ناسازگارند.
  • disable-reuse استخر نشست بیکار را به‌کلی خاموش می‌کند؛ در آن صورت سه کلید idle-session-* / min-idle-session هیچ اثری ندارند.

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

  • Xray-core از AnyTLS پشتیبانی نمی‌کند. به AnyTLS — Xray-core مراجعه کنید.
  • sing-box از نام‌های فیلد snake_case استفاده می‌کند، رشته‌های duration سبک Go را برای زمان‌های بیکاری استخر نشست می‌گیرد و کاربران را به‌صورت آرایهٔ [{name, password}] فهرست می‌کند. به AnyTLS — sing-box مراجعه کنید.

منبع: adapter/outbound/anytls.go:27-50 · v1.19.29 (e26714a)

Core Tutorial اثر Argsment