Skip to content

Входящие ​

inbounds — массив слушающих сервисов. В отличие от Xray-core здесь нет вложенного блока settings: каждая запись — плоский объект, состоящий из описанного ниже конверта type / tag и собственных полей выбранного типа, объединённых на том же уровне. Сначала декодируется конверт, затем оставшиеся ключи декодируются в структуру параметров, зарегистрированную для type; неизвестные поля отклоняются.

Конверт ​

ПолеТипПо умолчаниюДопустимые значенияОписание
typestring—tun | redirect | tproxy | direct | socks | http | mixed | shadowsocks | snell | vmess | trojan | naive | shadowtls | vless | anytls | hysteria | tuic | hysteria2 | cloudflaredТип входящего. Определяет, в какую структуру параметров декодируется остальная часть объекта. Незарегистрированное значение приводит к ошибке запуска "unknown inbound type".
tagstring——Уникальное имя этого входящего. На него ссылаются правила маршрутизации (inbound) и строки журнала.

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

Поля конкретных типов описаны на страницах протоколов: TUN, Перенаправление и TProxy, Direct, HTTP и SOCKS (также mixed), Shadowsocks, VMess, Trojan, Naive, VLESS, AnyTLS, Hysteria2, TUIC. snell и cloudflared описаны на страницах Snell и cloudflared.

Общие поля прослушивания (ListenOptions) ​

Каждый входящий на основе сокета встраивает ListenOptions; поля располагаются на том же плоском уровне, что и конверт.

ПолеТипПо умолчаниюДопустимые значенияОписание
listen*badoption.Addr——Адрес для привязки, например "::" или "127.0.0.1".
listen_portuint16——Порт для прослушивания.
bind_interfacestring——Сетевой интерфейс, к которому привязывается слушатель.
routing_markFwMark——SO_MARK (fwmark), устанавливаемый на слушающем сокете. Только Linux.
reuse_addrboolfalsetrue | falseУстановить SO_REUSEADDR на слушателе.
netnsstring——Сетевое пространство имён, в котором вести прослушивание: имя или путь либо тег элемента верхнеуровневого network_namespaces. Только Linux.
disable_tcp_keep_aliveboolfalsetrue | falseОтключить TCP keep-alive для принятых соединений.
tcp_keep_alivebadoption.Duration——Период простоя до начала keep-alive-проб. Строка длительности, например "15m".
tcp_keep_alive_intervalbadoption.Duration——Интервал между keep-alive-пробами. Строка длительности.
tcp_fast_openboolfalsetrue | falseВключить TCP Fast Open на слушателе.
tcp_multi_pathboolfalsetrue | falseВключить Multipath TCP (требуется поддержка MPTCP в Go на данной платформе).
udp_fragment*boolfalsetrue | falseРазрешить фрагментацию UDP-пакетов крупнее MTU вместо их отбрасывания.
udp_timeoutUDPTimeoutCompat——Тайм-аут простоя записей UDP NAT. Строка длительности; фактическое значение по умолчанию зависит от протокола, определённого сниффингом.
detourstring——Передавать принятые соединения напрямую в другой входящий, указанный по его тегу.
proxy_protocolbool——Не поддерживается: поддержки заголовка PROXY-протокола нет; установка этого поля — ошибка.
proxy_protocol_accept_no_headerbool——Не поддерживается, как и proxy_protocol.

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

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

json
{
  "inbounds": [
    {
      "type": "mixed",
      "tag": "mixed-in",
      "listen": "127.0.0.1",
      "listen_port": 2080
    }
  ]
}

Примечания ​

  • Строгий анмаршалер действует и внутри записей входящих: опечатка в имени любого поля — ошибка запуска, а не молчаливое игнорирование.
  • У входящих нет полей сниффинга: sniff, sniff_override_destination, sniff_timeout, domain_strategy и udp_disable_domain_unmapping отклоняются при запуске с ошибкой, ссылающейся на миграцию к действиям правил. Сниффинг задаётся в правилах маршрутизации.
  • shadowsocksr зарегистрирован лишь как заглушка, возвращающая ошибку: реализации ShadowsocksR в sing-box нет.
  • hysteria, tuic и hysteria2 требуют сборки с тегом with_quic, а cloudflared — с тегом with_cloudflared (официальные релизные бинарники включают оба).
  • snell — серверная сторона Snell, парная исходящему snell.
  • cloudflared запускает встроенный клиент Cloudflare Tunnel, аутентифицируемый token туннеля, и пропускает входящий трафик туннеля (TCP, UDP, ICMP) через маршрутизацию sing-box. Он не слушает локальный сокет, поэтому ListenOptions к нему не применяются.

Сравнение с другими ядрами ​

  • Xray-core вкладывает поля протокола в объект settings и держит сниффинг на уровне входящего. См. Входящие Xray.
  • mihomo использует отдельные корневые ключи (port, socks-port, mixed-port, …) плюс список listeners. См. HTTP и SOCKS и Перенаправление и TProxy.

Исходный код: option/inbound.go:21-25 · v1.14.2 (af6e64c)

Core Tutorial от Argsment