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.14.2 (af6e64c)

cache_file ​

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

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

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

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:22-42 · зафиксировано на v1.14.2 (af6e64c)

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

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.14.2 (af6e64c)

v2ray_api.stats ​

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

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

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.14.2 (af6e64c)

Пример ​

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) приводит к ошибке Clash API при запуске с указанием на experimental.cache_file — используйте этот блок.
  • store_rdrc устарел: включайте вместо него store_dns, который сохраняет весь DNS-кэш, а не только отклонённые ответы.
  • debug.memory_limit принимает как простые числа (байты), так и литералы с суффиксом вроде "256MiB" или "2GiB"; разбор выполняет byteformats.MemoryBytes.

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

Core Tutorial от Argsment