Исходящие
outbounds — массив вышестоящих целей. Каждый элемент — один OutboundDetourConfig: имя протокола, объект settings конкретного протокола и необязательные блоки транспорта (streamSettings), цепочек (proxySettings) и мультиплексирования (mux). Первый элемент массива — исходящий по умолчанию: трафик, не совпавший ни с одним правилом маршрутизации, направляется в него.
Параметры
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
protocol | string | — | freedom | direct | blackhole | block | loopback | http | socks | shadowsocks | vless | vmess | trojan | hysteria | dns | wireguard | Каким обработчиком исходящих устанавливать соединение. Имя приводится к нижнему регистру перед поиском в реестре. `direct` — псевдоним `freedom`, `block` — псевдоним `blackhole`. |
sendThrough | *string | 0.0.0.0 | — | Локальный адрес источника для исходящих соединений. Принимает IP, CIDR (для каждого соединения берётся случайный адрес внутри него) или специальные домены `origin` / `srcip`. |
tag | string | — | — | Уникальное имя этого исходящего. На него ссылаются правила маршрутизации, балансировщики, цепочки proxySettings и счётчики статистики. |
settings | *json.RawMessage | — | — | Объект настроек конкретного протокола; его декодирует обработчик, выбранный полем protocol. Формат для каждого протокола описан на соответствующей странице. |
streamSettings | *StreamConfig | — | — | Транспорт и безопасность исходящих соединений (raw / ws / grpc / xhttp…, tls / reality). См. страницы «Транспорт» и «TLS». |
proxySettings | *ProxyConfig | — | — | Пустить этот исходящий цепочкой через другой, указанный по тегу. Поля — ниже. |
mux | *MuxConfig | — | — | Мультиплексирование Mux поверх нижележащего соединения. Поля — ниже. |
targetStrategy | string | AsIs | AsIs | UseIP | UseIPv4 | UseIPv6 | UseIPv4v6 | UseIPv6v4 | ForceIP | ForceIPv4 | ForceIPv6 | ForceIPv4v6 | ForceIPv6v4 | Как разрешать целевой домен перед соединением (сопоставляется без учёта регистра). Use* предпочитает указанные семейства с откатом, Force* отката не допускает. Неизвестное значение — ошибка при запуске. |
Исходный код: infra/conf/xray.go:213-222 · зафиксировано на v26.7.28 (5ca6f4b)
Цепочки (proxySettings)
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
tag | string | — | — | Тег исходящего, через который ретранслировать трафик. |
transportLayer | bool | false | true | false | Строить цепочку на транспортном уровне, а не на прикладном — эквивалент sockopt.dialerProxy, поэтому совмещать их нельзя. |
Исходный код: infra/conf/transport_internet.go:312-317 · зафиксировано на v26.7.28 (5ca6f4b)
Мультиплексирование (mux)
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
enabled | bool | false | true | false | Включить Mux для TCP-трафика через этот исходящий. |
concurrency | int16 | — | — | Максимум одновременных потоков на одно физическое соединение. Отрицательное значение полностью отключает Mux, включая путь XUDP. |
xudpConcurrency | int16 | — | — | Отдельный предел параллельности для XUDP-соединений (UDP поверх Mux). |
xudpProxyUDP443 | string | reject | reject | allow | skip | Что делать с проксируемым трафиком UDP/443 (QUIC) внутри XUDP: отклонить (reject), разрешить (allow) или пропустить Mux (skip). |
Исходный код: infra/conf/xray.go:102-107 · зафиксировано на v26.7.28 (5ca6f4b)
Минимальный пример
json
{
"outbounds": [
{
"tag": "proxy",
"protocol": "vless",
"settings": {
"vnext": [
{
"address": "example.com",
"port": 443,
"users": [{ "id": "uuid", "encryption": "none" }]
}
]
},
"streamSettings": { "security": "tls" }
},
{ "tag": "direct", "protocol": "freedom", "settings": {} },
{ "tag": "block", "protocol": "blackhole", "settings": {} }
]
}Примечания
- Порядок важен: маршрутизация отправляет несовпавший трафик в первый исходящий. Держите прокси или
freedom, которые должны быть умолчанием, на индексе 0. proxySettings.tagконфликтует сstreamSettings.sockopt.dialerProxy— конфигурация с обоими отклоняется при запуске. ПриtransportLayer: trueцепочка внутренне переписывается именно в этот sockopt.sendThroughс CIDR выбирает для каждого соединения случайный адрес источника внутри диапазона — полезно с маршрутизируемым префиксом IPv6.- Протокол
dns— особый исходящий, перехватывающий DNS-запросы; см. DNS.
Сравнение с другими ядрами
- sing-box моделирует ту же концепцию как плоский объект на каждую запись (
type+tag+ поля на одном уровне) и не имеет неявного правила «первый — по умолчанию»: умолчание задаётсяroute.final. См. Исходящие sing-box. - mihomo называет их
proxiesи всегда направляет трафик через группы прокси или правила, а не через упорядоченное умолчание.
Исходный код: infra/conf/xray.go:213-222 · v26.7.28 (5ca6f4b)
