Skip to content

Trojan — sing-box

sing-box هر دو سر Trojan را پیاده‌سازی می‌کند. هیچ فیلد flow وجود ندارد — پیاده‌سازی از مشخصات اصلی Trojan پیروی می‌کند نه از فورک XTLS. معنای fallback غنی‌تر از Xray است: یک هدف fallback واحد به‌علاوهٔ یک نگاشت fallback_for_alpn کلید‌شده با ALPN.

ورودی

ورودی type: "trojan":

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
users[]TrojanUser[][TrojanUser]فهرست کاربران پذیرفته‌شده.
fallback*ServerOptions(none)ServerOptionsهدف بازگشت — وقتی یک درخواست به‌عنوان Trojan احراز نشود، جریان خام به اینجا بازارسال می‌شود. حاوی `server` + `server_port` است.
fallback_for_alpnmap[string]*ServerOptions{}{<alpn>: ServerOptions}نگاشت بازگشت برای هر ALPN. وقتی ALPN مذاکره‌شده با یک کلید تطبیق داشته باشد، بر `fallback` تقدم دارد.
multiplex*InboundMultiplexOptions(disabled)InboundMultiplexOptionsچندسوسازی (mux) سمت سرور.
transport*V2RayTransportOptions(plain TCP)V2RayTransportOptionsترابرد اختیاری به سبک V2Ray (ws، http، grpc، quic).

منبع: option/trojan.go:3-11 · ثابت‌شده در v1.13.11 (553cfa1)

این ساختار ListenOptions (آدرس شنود، پورت، sniff، …) و InboundTLSOptionsContainer (مواد TLS) را درون خود جای می‌دهد.

users[]

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

منبع: option/trojan.go:13-16 · ثابت‌شده در v1.13.11 (553cfa1)

خروجی

خروجی type: "trojan":

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
passwordstring(required)<string>گذرواژه‌ای که سرور بالادست انتظار دارد.
networkNetworkList(tcp+udp)tcp | udp | محدود کردن به فقط TCP یا فقط UDP. خالی هر دو را فعال می‌کند.
multiplex*OutboundMultiplexOptions(disabled)OutboundMultiplexOptionsچندسوسازی (mux) سمت کلاینت (باید با سرور تطبیق داشته باشد).
transport*V2RayTransportOptions(plain TCP)V2RayTransportOptionsبسته‌بندی ترابرد به سبک V2Ray.

منبع: option/trojan.go:18-26 · ثابت‌شده در v1.13.11 (553cfa1)

DialerOptions، ServerOptions (server، server_port) و OutboundTLSOptionsContainer (tls) را درون خود جای می‌دهد.

مثال‌ها

ورودی با یک کاربر و بازگشت HTTPS:

json
{
  "inbounds": [
    {
      "type": "trojan",
      "tag": "trojan-in",
      "listen": "::",
      "listen_port": 443,
      "users": [
        { "name": "alice", "password": "<password>" }
      ],
      "tls": {
        "enabled": true,
        "server_name": "example.com",
        "certificate_path": "/etc/ssl/cert.pem",
        "key_path": "/etc/ssl/key.pem"
      },
      "fallback": { "server": "127.0.0.1", "server_port": 8080 },
      "fallback_for_alpn": {
        "h2":       { "server": "127.0.0.1", "server_port": 8443 },
        "http/1.1": { "server": "127.0.0.1", "server_port": 8080 }
      }
    }
  ]
}

خروجی:

json
{
  "outbounds": [
    {
      "type": "trojan",
      "tag": "trojan-out",
      "server": "example.com",
      "server_port": 443,
      "password": "<password>",
      "tls": {
        "enabled": true,
        "server_name": "example.com"
      },
      "transport": { "type": "ws", "path": "/tj" }
    }
  ]
}

نکات

  • طراحی fallback از Xray متفاوت است: Xray فهرستی از fallbackها را که بر اساس چندتایی‌های (sni, alpn, path) تطبیق می‌یابد می‌پذیرد، درحالی‌که sing-box یک fallback پیش‌فرض واحد به‌علاوهٔ یک نگاشت کلید‌شده با ALPN می‌پذیرد. تطبیق در سطح مسیر ارائه نشده است — برای آن، TLS را در جلوی sing-box خاتمه دهید.
  • fallback_for_alpn ابتدا بررسی می‌شود؛ اگر ALPN مذاکره‌شده با یک کلید تطبیق داشته باشد، آن هدف استفاده می‌شود؛ در غیر این صورت fallback پیش‌فرض اعمال می‌شود.
  • هیچ گزینهٔ flow ندارد. کلاینت‌هایی که XTLS Vision را برای Trojan ارائه می‌دهند (Xray-core با flow غیرخالی) نمی‌توانند به یک سرور Trojan sing-box متصل شوند.

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

  • Xray از clients[] و یک fallbacks[] به شکل فهرست استفاده می‌کند. به Trojan — Xray-core مراجعه کنید.
  • mihomo از یک شکل تک‌شیء proxy با password در خروجی و یک password هر کاربر در ورودی استفاده می‌کند؛ همچنین ss-opts از trojan-go را برای رمزنگاری زنجیره‌ای Shadowsocks ارائه می‌دهد. به Trojan — mihomo مراجعه کنید.

منبع: option/trojan.go:3-26 · v1.13.11 (553cfa1)

Core Tutorial اثر Argsment