Skip to content

Экспериментальное

Блок experimental объединяет четыре слабо связанные области функциональности: постоянный файл кэша, Clash-совместимый RESTful API, gRPC API статистики V2Ray и встроенный эндпоинт pprof / отладки рантайма.

ПолеТипПо умолчаниюДопустимые значенияОписание
cache_file*CacheFileOptions(unset)CacheFileOptionsПостоянный кэш состояния.
clash_api*ClashAPIOptions(unset)ClashAPIOptionsВнешний контроллер, совместимый с панелями Clash.
v2ray_api*V2RayAPIOptions(unset)V2RayAPIOptionsgRPC-сервис статистики, совместимый с клиентами V2Ray.
debug*DebugOptions(unset)DebugOptionsВстроенный pprof-эндпоинт и настройка GC.

Исходный код: option/experimental.go:5-10 · зафиксировано на v1.13.15 (3708fa1)

cache_file

Постоянный дисковый кэш для аренд fakeip, запоминания выбранного прокси, записей RDRC и похожего состояния времени выполнения.

ПолеТипПо умолчаниюДопустимые значенияОписание
enabledboolfalsetrue | falseВключить файл кэша.
pathstringcache.db<file path>Где хранить базу данных кэша.
cache_idstring(unset)<string>Префикс пространства имён внутри того же файла кэша. Полезно, когда один файл кэша делят несколько экземпляров sing-box.
store_fakeipboolfalsetrue | falseСохранять таблицу аренд fakeip.
store_rdrcboolfalsetrue | falseСохранять записи Reject-DNS-Resolution Cache (rdrc).
rdrc_timeoutbadoption.Duration7d<duration>Как долго записи rdrc остаются действительными в кэше.

Исходный код: option/experimental.go:12-19 · зафиксировано на v1.13.15 (3708fa1)

clash_api

Полная реализация Clash RESTful API. Совместима с metacubexd, Yacd, Clash Dashboard и другими потребителями Clash API.

ПолеТипПо умолчаниюДопустимые значенияОписание
external_controllerstring(unset)<host:port>Адрес прослушивания RESTful API.
external_uistring(unset)<dir path>Локальный каталог, раздаваемый как панель управления.
external_ui_download_urlstringhttps://github.com/MetaCubeX/metacubexd/archive/refs/heads/gh-pages.zip<URL>Архив, автоматически скачиваемый, когда external_ui пуст.
external_ui_download_detourstring(direct)<outbound tag>Исходящий, используемый для скачивания.
secretstring(unset)<bearer token>Bearer-токен, требуемый для всех вызовов API. Настоятельно рекомендуется.
default_modestringrulerule | global | direct | <custom>Начальный режим туннеля, сообщаемый через API. Допускаются пользовательские значения; нестандартные панели их игнорируют.
access_control_allow_originbadoption.Listable[string][]<origin>Список разрешённых origin (CORS) для API.
access_control_allow_private_networkboolfalsetrue | falseРазрешить preflight-запросы из частных сетей.

Исходный код: option/experimental.go:21-42 · зафиксировано на v1.13.15 (3708fa1)

Ещё пять полей (cache_file, cache_id, store_mode, store_selected, store_fakeip) — устаревшие перенаправления в блок cache_file; не используйте их в новых конфигурациях.

v2ray_api

V2Ray-совместимый gRPC API статистики. Полезен, если у вас есть существующий инструментарий (v2ray api stats query ...), который хочется продолжать использовать.

ПолеТипПо умолчаниюДопустимые значенияОписание
listenstring(required)<host:port>Адрес прослушивания gRPC для StatsService.
stats*V2RayStatsServiceOptions(unset)V2RayStatsServiceOptionsВыбор счётчиков.

Исходный код: option/experimental.go:44-47 · зафиксировано на v1.13.15 (3708fa1)

v2ray_api.stats

ПолеТипПо умолчаниюДопустимые значенияОписание
enabledboolfalsetrue | falseВключить сервис статистики.
inbounds[]string[]<inbound tag>Теги входящих, для которых считать трафик.
outbounds[]string[]<outbound tag>Теги исходящих, для которых считать трафик.
users[]string[]<user name>Счётчики по отдельным пользователям.

Исходный код: option/experimental.go:49-54 · зафиксировано на v1.13.15 (3708fa1)

debug

Блок настройки Go-рантайма. Большинство полей — прямые ручки пакетов runtime и runtime/debug. Поле listen открывает стандартные обработчики net/http/pprof.

ПолеТипПо умолчаниюДопустимые значенияОписание
listenstring(unset)<host:port>Адрес прослушивания pprof-эндпоинта (например, 127.0.0.1:6060).
gc_percent*int(Go default)<int> | -1Переопределение GOGC. Значение -1 отключает сборку мусора.
max_stack*int(Go default)<bytes>Потолок стека на горутину.
max_threads*int(Go default)<int>Ограничение числа потоков в духе GOMAXPROCS.
panic_on_fault*boolfalsetrue | falseПреобразовывать невосстановимые сбои рантайма в панику с трассировкой стека.
trace_backstring(Go default)none | single | all | system | crashНастройка GOTRACEBACK.
memory_limit*byteformats.MemoryBytes(unset)<bytes/MiB/GiB>Мягкий предел памяти; принимает простые числа (байты) или значения с суффиксом вроде 256MiB.
oom_killer*boolfalsetrue | falseАварийно завершать процесс, когда memory_limit превышен слишком долго.

Исходный код: option/debug.go:5-14 · зафиксировано на v1.13.15 (3708fa1)

Пример

json
{
  "experimental": {
    "cache_file": {
      "enabled": true,
      "path": "cache.db",
      "store_fakeip": true
    },
    "clash_api": {
      "external_controller": "127.0.0.1:9090",
      "secret": "<random>",
      "external_ui": "/etc/sing-box/ui"
    },
    "debug": {
      "listen": "127.0.0.1:6060",
      "memory_limit": "256MiB"
    }
  }
}

Примечания

  • Устаревшие поля кэша в clash_api (cache_file, cache_id, store_mode, store_selected, store_fakeip) по-прежнему разбираются, но при загрузке выдают предупреждения и будут удалены в будущем релизе. Все пять перенаправляются в блок cache_file.
  • debug.memory_limit принимает как простые числа (байты), так и литералы с суффиксом вроде "256MiB" или "2GiB"; разбор выполняет byteformats.MemoryBytes.

Исходный код: option/experimental.go:5-54 · v1.13.15 (3708fa1)

Core Tutorial от Argsment