Исходящие
outbounds — массив вышестоящих целей. Каждая запись — плоский объект: конверт type / tag плюс собственные поля выбранного типа на том же уровне. Правила «первый исходящий — по умолчанию» здесь нет: не совпавший ни с одним правилом трафик уходит в route.final.
Конверт
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
type | string | — | direct | bridge | block | selector | urltest | socks | http | shadowsocks | snell | vmess | trojan | naive | tor | ssh | shadowtls | vless | anytls | hysteria | tuic | hysteria2 | Тип исходящего. Определяет, в какую структуру параметров декодируется остальная часть объекта. Незарегистрированное значение приводит к ошибке запуска "unknown outbound type". |
tag | string | — | — | Уникальное имя этого исходящего. На него ссылаются правила маршрутизации, route.final, групповые исходящие и поле detour при установке соединений. |
Исходный код: option/outbound.go:22-26 · зафиксировано на v1.14.2 (af6e64c)
Поля конкретных типов описаны на страницах протоколов: Direct, HTTP и SOCKS, Shadowsocks, VMess, Trojan, Naive, Tor, SSH, VLESS, AnyTLS, Hysteria2, TUIC. selector и urltest — групповые исходящие, выбирающие среди других тегов. bridge и snell описаны на страницах Bridge и Snell.
Общие поля подключения (DialerOptions)
Каждый устанавливающий соединения исходящий встраивает DialerOptions — это detour плюс поля AbstractDialerOptions (вынесены в отдельную структуру, чтобы действие правила маршрутизации direct могло использовать те же поля подключения без detour). Все они располагаются на том же плоском уровне, что и конверт.
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
detour | string | — | — | Устанавливать соединения через другой исходящий, указанный по его тегу. Если задан, остальные поля подключения игнорируются. |
Исходный код: option/outbound.go:80-83 · зафиксировано на v1.14.2 (af6e64c)
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
bind_interface | string | — | — | Сетевой интерфейс, к которому привязываются исходящие соединения. |
inet4_bind_address | *badoption.Addr | — | — | Привязываемый исходный IPv4-адрес. |
inet6_bind_address | *badoption.Addr | — | — | Привязываемый исходный IPv6-адрес. |
bind_address_no_port | bool | false | true | false | Устанавливать IP_BIND_ADDRESS_NO_PORT при привязке — откладывает выделение порта до connect. Только Linux. |
protect_path | string | — | — | Путь к Unix-сокету защитного демона Android VpnService; перед установкой соединения туда передаётся fd каждого сокета. |
routing_mark | FwMark | — | — | SO_MARK (fwmark), устанавливаемый на исходящих сокетах. Только Linux. |
reuse_addr | bool | false | true | false | Установить SO_REUSEADDR на исходящих сокетах. |
netns | string | — | — | Сетевое пространство имён, из которого устанавливаются соединения: имя или путь либо тег элемента верхнеуровневого network_namespaces. Только Linux. Не ссылайтесь на пространство типа unshare — его единственный выход наружу — собственный TUN sing-box. |
connect_timeout | badoption.Duration | — | — | Тайм-аут установки TCP-соединения. Строка длительности, например "5s". |
tcp_fast_open | bool | false | true | false | Включить TCP Fast Open для исходящих соединений. |
tcp_multi_path | bool | false | true | false | Включить Multipath TCP для исходящих соединений. |
disable_tcp_keep_alive | bool | false | true | false | Отключить TCP keep-alive для исходящих соединений. |
tcp_keep_alive | badoption.Duration | — | — | Период простоя до начала keep-alive-проб. Строка длительности. |
tcp_keep_alive_interval | badoption.Duration | — | — | Интервал между keep-alive-пробами. Строка длительности. |
udp_fragment | *bool | false | true | false | Разрешить фрагментацию UDP-пакетов крупнее MTU вместо их отбрасывания. |
domain_resolver | *DomainResolveOptions | — | — | Какой DNS-сервер (по тегу) разрешает адрес сервера: либо просто строка-тег, либо объект с переопределениями для конкретного подключения (server, strategy, timeout, disable_cache, disable_optimistic_cache, rewrite_ttl, client_subnet). Для direct вместо этого разрешается запрошенный домен. |
network_strategy | *NetworkStrategy | — | — | Стратегия выбора среди доступных сетей (например, default / hybrid / fallback). Только для платформенных сборок с поддержкой информации о сетях. |
network_type | badoption.Listable[InterfaceType] | — | — | Предпочитаемые типы сетей (wifi, cellular, ethernet, other) при использовании network_strategy. |
fallback_network_type | badoption.Listable[InterfaceType] | — | — | Типы сетей, на которые выполняется переход, когда предпочитаемые недоступны. |
fallback_delay | badoption.Duration | — | — | Задержка перед запуском резервного подключения (в стиле Happy Eyeballs). Строка длительности, например "300ms". |
domain_strategy | DomainStrategy | — | prefer_ipv4 | prefer_ipv6 | ipv4_only | ipv6_only | Устарело в пользу domain_resolver.strategy: его установка прерывает запуск, если не задана переменная окружения ENABLE_DEPRECATED_LEGACY_DOMAIN_STRATEGY_OPTIONS=true. |
Исходный код: option/outbound.go:85-112 · зафиксировано на v1.14.2 (af6e64c)
Общие поля сервера (ServerOptions)
Протокольные исходящие, подключающиеся к фиксированному серверу, встраивают ServerOptions.
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
server | string | — | — | Имя хоста или IP сервера. |
server_port | uint16 | — | — | Порт сервера. |
Исходный код: option/outbound.go:183-186 · зафиксировано на v1.14.2 (af6e64c)
Минимальный пример
{
"outbounds": [
{
"type": "shadowsocks",
"tag": "proxy",
"server": "example.com",
"server_port": 8388,
"method": "2022-blake3-aes-128-gcm",
"password": "<base64-key>"
},
{ "type": "direct", "tag": "direct" }
],
"route": { "final": "proxy" }
}Примечания
- Исходящего
dnsнет — его настройка приводит к ошибке; перехват DNS является действием правила. Исходящегоwireguardтоже нет: вместо него используйте конечную точку WireGuard. shadowsocksrзарегистрирован только как заглушка, возвращающая ошибку (реализации ShadowsocksR в sing-box нет).hysteria,tuicиhysteria2требуют сборки с тегомwith_quic, а исходящийnaive— с тегомwith_naive_outbound; официальные релизные бинарники включают оба, кромеwith_naive_outboundна нескольких редких платформах.detourсцепляет исходящие по тегу; цепочка, замыкающаяся сама на себя, — ошибка запуска.- Когда
server— домен, он разрешается черезdomain_resolver, а при его отсутствии — черезroute.default_domain_resolver. Опустить оба можно, только если настроен ровно один DNS-сервер; иначе запуск завершается ошибкой. bridge— L3-аналогdirect: пересылает L3-соединения (TCP, UDP, ICMP) из TUN или других L3-конечных точек напрямую через сетевой интерфейс и отклоняет L4-соединения. Требует привилегий (Linux, macOS, Windows, Android с root, iOS с джейлбрейком) и получает трафик через действиеrouteв pre-match.snellреализует протокол Snell от Surge для входящего и исходящего (без режима QUIC-прокси из v5).
Сравнение с другими ядрами
- Xray-core вкладывает поля протокола в
settings, сцепляет исходящие черезstreamSettings.sockopt.dialerProxy(proxySettingsотклоняется при запуске) и считает первый элемент массива целью маршрутизации по умолчанию. См. Исходящие Xray. - mihomo называет их
proxies, а групповые типы (select,url-test,fallback,load-balance) вынесены в отдельные группы прокси, а не в типы исходящих.
Исходный код: option/outbound.go:22-26 · v1.14.2 (af6e64c)
