Skip to content

Исходящие ​

outbounds — массив вышестоящих целей. Каждая запись — плоский объект: конверт type / tag плюс собственные поля выбранного типа на том же уровне. Правила «первый исходящий — по умолчанию» здесь нет: не совпавший ни с одним правилом трафик уходит в route.final.

Конверт ​

ПолеТипПо умолчаниюДопустимые значенияОписание
typestring—direct | bridge | block | selector | urltest | socks | http | shadowsocks | snell | vmess | trojan | naive | tor | ssh | shadowtls | vless | anytls | hysteria | tuic | hysteria2Тип исходящего. Определяет, в какую структуру параметров декодируется остальная часть объекта. Незарегистрированное значение приводит к ошибке запуска "unknown outbound type".
tagstring——Уникальное имя этого исходящего. На него ссылаются правила маршрутизации, 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). Все они располагаются на том же плоском уровне, что и конверт.

ПолеТипПо умолчаниюДопустимые значенияОписание
detourstring——Устанавливать соединения через другой исходящий, указанный по его тегу. Если задан, остальные поля подключения игнорируются.

Исходный код: option/outbound.go:80-83 · зафиксировано на v1.14.2 (af6e64c)

ПолеТипПо умолчаниюДопустимые значенияОписание
bind_interfacestring——Сетевой интерфейс, к которому привязываются исходящие соединения.
inet4_bind_address*badoption.Addr——Привязываемый исходный IPv4-адрес.
inet6_bind_address*badoption.Addr——Привязываемый исходный IPv6-адрес.
bind_address_no_portboolfalsetrue | falseУстанавливать IP_BIND_ADDRESS_NO_PORT при привязке — откладывает выделение порта до connect. Только Linux.
protect_pathstring——Путь к Unix-сокету защитного демона Android VpnService; перед установкой соединения туда передаётся fd каждого сокета.
routing_markFwMark——SO_MARK (fwmark), устанавливаемый на исходящих сокетах. Только Linux.
reuse_addrboolfalsetrue | falseУстановить SO_REUSEADDR на исходящих сокетах.
netnsstring——Сетевое пространство имён, из которого устанавливаются соединения: имя или путь либо тег элемента верхнеуровневого network_namespaces. Только Linux. Не ссылайтесь на пространство типа unshare — его единственный выход наружу — собственный TUN sing-box.
connect_timeoutbadoption.Duration——Тайм-аут установки TCP-соединения. Строка длительности, например "5s".
tcp_fast_openboolfalsetrue | falseВключить TCP Fast Open для исходящих соединений.
tcp_multi_pathboolfalsetrue | falseВключить Multipath TCP для исходящих соединений.
disable_tcp_keep_aliveboolfalsetrue | falseОтключить TCP keep-alive для исходящих соединений.
tcp_keep_alivebadoption.Duration——Период простоя до начала keep-alive-проб. Строка длительности.
tcp_keep_alive_intervalbadoption.Duration——Интервал между keep-alive-пробами. Строка длительности.
udp_fragment*boolfalsetrue | 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_typebadoption.Listable[InterfaceType]——Предпочитаемые типы сетей (wifi, cellular, ethernet, other) при использовании network_strategy.
fallback_network_typebadoption.Listable[InterfaceType]——Типы сетей, на которые выполняется переход, когда предпочитаемые недоступны.
fallback_delaybadoption.Duration——Задержка перед запуском резервного подключения (в стиле Happy Eyeballs). Строка длительности, например "300ms".
domain_strategyDomainStrategy—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.

ПолеТипПо умолчаниюДопустимые значенияОписание
serverstring——Имя хоста или IP сервера.
server_portuint16——Порт сервера.

Исходный код: option/outbound.go:183-186 · зафиксировано на v1.14.2 (af6e64c)

Минимальный пример ​

json
{
  "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)

Core Tutorial от Argsment