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 сервера. |
port | uint16 | (required with address) | <port> | Порт сервера. |
level | byte | 0 | <byte> | Уровень пользователя (упрощённая форма). |
email | string | (unset) | <string> | Идентификатор пользователя, отображаемый в статистике. |
password | string | (required with address) | <string> | Общий пароль для рукопожатия Trojan. |
flow | string | (must be empty) | — | Удалённая возможность. Любое непустое значение приводит к отклонению конфигурации при запуске. |
servers | []*TrojanServerTarget | (use simplified shape) | [TrojanServerTarget] | Полная форма. Должна содержать ровно один сервер; для нескольких серверов нужны несколько исходящих + балансировщик. |
Исходный код: infra/conf/trojan.go:31-39 · зафиксировано на v26.7.28 (5ca6f4b)
servers[]
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
address | *Address | (required) | <host> | Имя хоста или IP сервера. |
port | uint16 | (required) | <port> | Порт сервера. |
level | byte | 0 | <byte> | Уровень пользователя. |
email | string | (unset) | <string> | Идентификатор пользователя. |
password | string | (required) | <string> | Пароль Trojan. |
flow | string | (must be empty) | — | Удалено; непустое значение отклоняется. |
Исходный код: infra/conf/trojan.go:21-28 · зафиксировано на v26.7.28 (5ca6f4b)
Упрощённая форма vs. servers
Исходящий принимает либо упрощённую верхнеуровневую форму (address, port, password, ...), либо полную форму servers с ровно одним элементом. Для многосерверных схем используйте несколько исходящих Trojan плюс балансировщик маршрутизации.
Входящий
settings для входящего с "protocol": "trojan":
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
users | []*TrojanUserConfig | — | [TrojanUserConfig] | … | Список учётных записей входящего; та же форма объекта, что и у `clients`. `users` — более новое имя, появившееся в свежих версиях Xray и принимаемое наряду с `clients`. |
clients | []*TrojanUserConfig | (required) | [TrojanUserConfig] | Список принимаемых пользователей. |
fallbacks | []*TrojanInboundFallback | [] | [TrojanInboundFallback] | Резервные назначения, к которым обращаются, когда входящий TLS-обёрнутый трафик не похож на Trojan. |
Исходный код: infra/conf/trojan.go:114-118 · зафиксировано на v26.7.28 (5ca6f4b)
clients[]
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
password | string | (required) | <string> | Пароль Trojan. |
level | byte | 0 | <byte> | Уровень политики для этого пользователя. |
email | string | (unset) | <string> | Метка в выводе статистики / журналов. |
flow | string | (must be empty) | — | Удалено; непустое значение отклоняется. |
Исходный код: infra/conf/trojan.go:106-111 · зафиксировано на v26.7.28 (5ca6f4b)
fallbacks[]
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
name | string | (unset) | <TLS server name> | Сопоставляется с SNI входящего TLS; пустое значение совпадает с любым. |
alpn | string | (unset) | h2 | http/1.1 | | Сопоставляется с согласованным ALPN; пустое значение совпадает с любым. |
path | string | (unset) | /<path> | Префикс HTTP-пути. Если непустой, должен начинаться с `/`. |
type | string | (auto) | tcp | unix | serve | Протокол бэкенда. Если опущен, выводится из `dest`. |
dest | json.RawMessage | (required) | <host:port> | <port> | <unix path> | Цель пересылки. Голое целое число = порт на localhost. |
xver | uint64 | 0 | 0 | 1 | 2 | Версия PROXY-протокола. 0 — отключено. |
Исходный код: infra/conf/trojan.go:96-103 · зафиксировано на v26.7.28 (5ca6f4b)
Цепочка fallback у Trojan повторяет VLESS: совпадения проверяются по порядку на первом байте TLS-обёрнутого потока, ключи — (name, alpn, path).
Примеры
Минимальный входящий с одним пользователем и TLS:
{
"inbounds": [
{
"tag": "trojan-in",
"listen": "0.0.0.0",
"port": 443,
"protocol": "trojan",
"settings": {
"clients": [
{ "password": "<password>", "email": "alice" }
]
},
"streamSettings": { "network": "tcp", "security": "tls" }
}
]
}Упрощённый исходящий:
{
"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-поверх-Trojan (
ss-opts) для клиентов trojan-go. См. Trojan — mihomo.
Исходный код: infra/conf/trojan.go:21-118 · v26.7.28 (5ca6f4b)
