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Цель fallback — если запрос не проходит аутентификацию Trojan, исходный поток перенаправляется сюда. Содержит `server` + `server_port`.
fallback_for_alpnmap[string]*ServerOptions{}{<alpn>: ServerOptions}Карта fallback по ALPN. Имеет приоритет над `fallback`, когда согласованный ALPN совпадает с одним из ключей.
multiplex*InboundMultiplexOptions(disabled)InboundMultiplexOptionsМультиплексирование на стороне сервера.
transport*V2RayTransportOptions(plain TCP)V2RayTransportOptionsНеобязательный транспорт в стиле V2Ray (ws, http, grpc, quic).

Исходный код: option/trojan.go:3-11 · зафиксировано на v1.13.15 (3708fa1)

Структура встраивает ListenOptions (адрес прослушивания, порт, сниффинг, …) и InboundTLSOptionsContainer (материал TLS).

users[]

ПолеТипПо умолчаниюДопустимые значенияОписание
namestring(unset)<string>Отображаемое имя, используемое в статистике и журналах.
passwordstring(required)<string>Пароль Trojan.

Исходный код: option/trojan.go:13-16 · зафиксировано на v1.13.15 (3708fa1)

Исходящий

Исходящий type: "trojan":

ПолеТипПо умолчаниюДопустимые значенияОписание
passwordstring(required)<string>Пароль, который ожидает вышестоящий сервер.
networkNetworkList(tcp+udp)tcp | udp | Ограничение только TCP или только UDP. Пустое значение включает оба.
multiplex*OutboundMultiplexOptions(disabled)OutboundMultiplexOptionsМультиплексирование на стороне клиента (должно совпадать с настройками сервера).
transport*V2RayTransportOptions(plain TCP)V2RayTransportOptionsТранспортная обёртка в стиле V2Ray.

Исходный код: option/trojan.go:18-26 · зафиксировано на v1.13.15 (3708fa1)

Встраивает DialerOptions, ServerOptions (server, server_port) и OutboundTLSOptionsContainer (tls).

Примеры

Входящий с одним пользователем и HTTPS-fallback:

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 использует единый объект прокси с password на исходящей стороне и пользовательским password на входящей; он также предоставляет ss-opts из trojan-go для цепочки шифрования Shadowsocks. См. Trojan — mihomo.

Исходный код: option/trojan.go:3-26 · v1.13.15 (3708fa1)

Core Tutorial от Argsment