Skip to content

Trojan — mihomo

mihomo در هر دو سمت Trojan را پشتیبانی می‌کند. خروجی از ترابردهای tcp، ws و grpc با پوشش‌های TLS، REALITY و ECH پشتیبانی می‌کند، به‌علاوهٔ لایهٔ سازگار با trojan-go به نام ss-opts که یک مجموعه‌رمز داخلی Shadowsocks را روی دست‌دهی گذرواژهٔ Trojan اضافه می‌کند.

خروجی

ورودی تحت proxies: با type: trojan. BasicOption را جاسازی می‌کند (فیلدهای مشترک خروجی).

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
namestring(required)<string>نام یکتای پراکسی.
serverstring(required)<host>میزبان یا IP سرور بالادست.
portint(required)<port>پورت سرور بالادست.
passwordstring(required)<string>گذرواژهٔ Trojan.
alpn[]string[]h2 | http/1.1فهرست ALPN ارائه‌شده در دست‌دهی TLS.
snistring(server name)<SNI>Server Name Indication در TLS. مقدار پیش‌فرض `server` است.
skip-cert-verifyboolfalsetrue | falseغیرفعال‌سازی راستی‌آزمایی TLS (فقط آزمایش).
fingerprintstring(unset)<SHA256 hex>تثبیت گواهی TLS سرور به این اثرانگشت.
certificatestring(unset)<PEM file path>گواهی کلاینت (mTLS).
private-keystring(unset)<key file path>کلید خصوصی مطابق با `certificate`.
udpboolfalsetrue | falseاجازه به بازپخش بسته‌های UDP از این خروجی.
networkstringtcptcp | ws | grpcترابرد زیرین.
ech-optsECHOptions(disabled)ECHOptionsپیکربندی Encrypted Client Hello.
reality-optsRealityOptions(disabled)RealityOptionsپیکربندی کلاینت REALITY.
grpc-optsGrpcOptions(unset)GrpcOptionsتنظیمات `network: grpc`.
ws-optsWSOptions(unset)WSOptionsتنظیمات `network: ws`.
ss-optsTrojanSSOption(disabled)TrojanSSOptionلایهٔ اختیاری Shadowsocks-over-Trojan (سبک trojan-go).
client-fingerprintstring(global)chrome | firefox | safari | ios | edge | random | randomizedاثرانگشت client-hello مبتنی بر uTLS.

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

ss-opts

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
enabledboolfalsetrue | falseپوشاندن جریان Trojan در یک لایهٔ Shadowsocks اضافی.
methodstring(unset)aes-128-gcm | aes-256-gcm | chacha20-ietf-poly1305مجموعه‌رمز AEAD Shadowsocks که در لایهٔ داخلی استفاده می‌شود.
passwordstring(unset)<string>گذرواژه برای لایهٔ داخلی Shadowsocks (جدا از گذرواژهٔ بیرونی Trojan).

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

ورودی

ورودی تحت listeners: با type: trojan. BaseOption را جاسازی می‌کند (listen، port).

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
users[]TrojanUser(required)[TrojanUser]کلاینت‌های پذیرفته‌شده.
ws-pathstring(unset)/<path>مسیر WebSocket ارائه‌شده در این شنونده.
grpc-service-namestring(unset)<name>نام سرویس gRPC پذیرفته‌شده در این شنونده.
certificatestring(unset)<PEM file path>گواهی TLS سرور.
private-keystring(unset)<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.
reality-configRealityConfig(disabled)RealityConfigپیکربندی سرور REALITY.
mux-optionMuxOption(disabled)MuxOptionتنظیمات چندسوسازی (سبک sing mux).
ss-optionTrojanSSOption(disabled)TrojanSSOptionلایهٔ سازگاری Shadowsocks-over-Trojan (باید با `ss-opts` خروجی مطابقت داشته باشد).

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

users[]

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
usernamestring(unset)<string>نام نمایشی.
passwordstring(required)<string>گذرواژهٔ Trojan.

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

مثال‌ها

خروجی — Trojan ساده با TLS:

yaml
proxies:
  - name: trojan-srv
    type: trojan
    server: example.com
    port: 443
    password: <password>
    sni: example.com
    udp: true
    alpn: [h2, http/1.1]

خروجی — Trojan روی WebSocket با ss-opts سبک trojan-go:

yaml
proxies:
  - name: trojan-go
    type: trojan
    server: example.com
    port: 443
    password: <outer-password>
    udp: true
    network: ws
    sni: example.com
    ws-opts:
      path: /tj
    ss-opts:
      enabled: true
      method: aes-128-gcm
      password: <inner-password>

ورودی تحت listeners:

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

نکات

  • ss-opts الگوی trojan-go برای پشته‌کردن Shadowsocks AEAD درون جریان Trojan را پیاده‌سازی می‌کند. گذرواژهٔ بیرونی Trojan دست‌دهی را احراز می‌کند؛ کلید داخلی Shadowsocks بار را رمزنگاری می‌کند. بلوک ss-option ورودی باید دقیقاً با ss-opts خروجی مطابق باشد (enabled، method، password) وگرنه ورودی کلاینت را رد می‌کند.
  • mihomo معادلی برای fallbacks[] در Xray یا fallback_for_alpn در sing-box ندارد. برای رفتار fallback HTTP، TLS را با یک پراکسی معکوس جداگانه جلوی mihomo خاتمه دهید.
  • client-fingerprint در خروجی، بازنویسی uTLS برای هر پراکسی است. پیش‌فرض سراسری global-client-fingerprint است.

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

  • Xray برای کاربران ورودی از clients[] استفاده می‌کند، زنجیرهٔ fallbacks[] به‌صورت فهرست را پشتیبانی می‌کند و هر مقدار غیرخالی flow را رد می‌کند. به Trojan — Xray-core مراجعه کنید.
  • sing-box از users[] (name/password) استفاده می‌کند و فهرست fallback را با یک fallback پیش‌فرض به‌علاوهٔ نگاشت fallback_for_alpn به ازای هر ALPN جایگزین کرده است. به Trojan — sing-box مراجعه کنید.

منبع: adapter/outbound/trojan.go:38-58 · v1.19.24 (a847246)

Core Tutorial اثر Argsment