Skip to content

Trojan — Xray-core

Trojan یک تونل به‌شکل TLS با دست‌دهی گذرواژه است. در Xray-core پیاده‌سازی با مشخصات اصلی Trojan تطبیق دارد و پسوند XTLS flow را پشتیبانی نمی‌کند — فیلد flow همچنان برای سازگاری تجزیه می‌شود اما هر مقدار غیرخالی خطای قطعی تولید می‌کند (infra/conf/trojan.go:73, 128).

خروجی

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

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
address*Address(unset)<host>شکل ساده‌شده — نام میزبان یا IP سرور.
portuint16(required with address)<port>پورت سرور.
levelbyte0<byte>سطح کاربر (شکل ساده‌شده).
emailstring(unset)<string>شناسهٔ کاربر که در آمار گزارش می‌شود.
passwordstring(required with address)<string>گذرواژهٔ مشترک برای دست‌دهی Trojan.
flowstring(must be empty)ویژگی حذف‌شده. تعیین هر مقدار غیرخالی موجب رد پیکربندی در زمان راه‌اندازی می‌شود.
servers[]*TrojanServerTarget(use simplified shape)[TrojanServerTarget]شکل کامل. باید دقیقاً یک سرور داشته باشد؛ چندین سرور به چند خروجی به‌علاوهٔ یک متعادل‌کننده نیاز دارد.

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

servers[]

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
address*Address(required)<host>نام میزبان یا IP سرور.
portuint16(required)<port>پورت سرور.
levelbyte0<byte>سطح کاربر.
emailstring(unset)<string>شناسهٔ کاربر.
passwordstring(required)<string>گذرواژهٔ Trojan.
flowstring(must be empty)حذف شده؛ مقدار غیرخالی رد می‌شود.

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

ساده‌شده در برابر servers

خروجی یا شکل ساده‌شدهٔ سطح بالا (address, port, password, ...) را می‌پذیرد یا شکل کامل servers با دقیقاً یک مدخل را. برای پیکربندی چندسرور از چندین خروجی Trojan به‌علاوهٔ یک متعادل‌کنندهٔ بار مسیریابی استفاده کنید.

ورودی

settings برای یک ورودی با "protocol": "trojan":

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
clients[]*TrojanUserConfig(required)[TrojanUserConfig]فهرست کاربران پذیرفته‌شده.
fallbacks[]*TrojanInboundFallback[][TrojanInboundFallback]مقاصد جایگزین که وقتی ترافیک ورودی پیچیده در TLS شبیه Trojan به نظر نرسد به آن‌ها رجوع می‌شود.

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

clients[]

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
passwordstring(required)<string>گذرواژهٔ Trojan.
levelbyte0<byte>سطح policy برای این کاربر.
emailstring(unset)<string>برچسب در خروجی آمار/لاگ.
flowstring(must be empty)حذف شده؛ مقدار غیرخالی رد می‌شود.

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

fallbacks[]

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
namestring(unset)<TLS server name>تطبیق با SNI ورودی TLS؛ مقدار خالی با هر چیزی تطبیق می‌کند.
alpnstring(unset)h2 | http/1.1 | تطبیق با ALPN مذاکره‌شده؛ مقدار خالی با هر چیزی تطبیق می‌کند.
pathstring(unset)/<path>پیشوند مسیر HTTP. اگر غیرخالی باشد باید با `/` آغاز شود.
typestring(auto)tcp | unix | serveپروتکل پشتیبان. در صورت حذف از روی `dest` استنباط می‌شود.
destjson.RawMessage(required)<host:port> | <port> | <unix path>مقصد ارسال. عدد صحیح خالی = پورت روی localhost.
xveruint6400 | 1 | 2نسخهٔ PROXY-protocol. 0 غیرفعال می‌کند.

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

زنجیرهٔ fallback ترایجن مانند VLESS است: به ترتیب روی اولین بایت جریان پیچیده در TLS تطبیق می‌شود و کلیدهای آن (name, alpn, path) هستند.

مثال‌ها

ورودی حداقلی با یک کاربر و TLS:

json
{
  "inbounds": [
    {
      "tag": "trojan-in",
      "listen": "0.0.0.0",
      "port": 443,
      "protocol": "trojan",
      "settings": {
        "clients": [
          { "password": "<password>", "email": "alice" }
        ]
      },
      "streamSettings": { "network": "tcp", "security": "tls" }
    }
  ]
}

خروجی ساده‌شده:

json
{
  "outbounds": [
    {
      "tag": "trojan-out",
      "protocol": "trojan",
      "settings": {
        "address": "example.com",
        "port": 443,
        "password": "<password>",
        "email": "alice"
      },
      "streamSettings": {
        "network": "ws",
        "security": "tls",
        "wsSettings": { "path": "/tj" }
      }
    }
  ]
}

نکات

  • flow در Trojan یک ویژگی حذف‌شده در Xray-core است. فیلد ساختار همچنان برای تجزیهٔ سازگار-با-عقب وجود دارد، اما تامین هر مقدار غیرخالی موجب PrintRemovedFeatureError("Flow for Trojan") در زمان راه‌اندازی می‌شود. زمان اجرا همچنین یک بنر منسوخ‌شدن چاپ می‌کند که «VLESS with Flow & Seed» را توصیه می‌نماید (infra/conf/trojan.go:42, 120).
  • password الزامی است. یک خروجی با گذرواژهٔ خالی ساخته نمی‌شود (infra/conf/trojan.go:69-71).
  • fallbacks دقیقاً مانند fallbackهای VLESS کار می‌کند — همان شکل فیلد و همان استنباط خودکار type از dest.

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

  • sing-box از users[] (با name/password) به‌جای clients[] استفاده می‌کند و زنجیرهٔ fallback Xray را با دو گزینهٔ متمایز جایگزین می‌کند: یک مقصد تک fallback به‌علاوهٔ fallback_for_alpn که با ALPN کلیدبندی می‌شود. به Trojan — sing-box مراجعه کنید.
  • mihomo شکل استاندارد خروجی تک-شیء-پراکسی را دارد و همچنین یک لایهٔ سازگاری Shadowsocks-over-Trojan (ss-opts) برای کلاینت‌های trojan-go ارائه می‌دهد. به Trojan — mihomo مراجعه کنید.

منبع: infra/conf/trojan.go:20-116 · v1.260327.0 (d2758a0)

Core Tutorial اثر Argsment