Экспериментальное
Блок experimental объединяет четыре слабо связанные области функциональности: постоянный файл кэша, Clash-совместимый RESTful API, gRPC API статистики V2Ray и встроенный эндпоинт pprof / отладки рантайма.
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
cache_file | *CacheFileOptions | (unset) | CacheFileOptions | Постоянный кэш состояния. |
clash_api | *ClashAPIOptions | (unset) | ClashAPIOptions | Внешний контроллер, совместимый с панелями Clash. |
v2ray_api | *V2RayAPIOptions | (unset) | V2RayAPIOptions | gRPC-сервис статистики, совместимый с клиентами V2Ray. |
debug | *DebugOptions | (unset) | DebugOptions | Встроенный pprof-эндпоинт и настройка GC. |
Исходный код: option/experimental.go:5-10 · зафиксировано на v1.14.2 (af6e64c)
cache_file
Постоянный дисковый кэш для аренд fakeip, запоминания выбранного прокси, записей RDRC, DNS-кэша (store_dns) и похожего состояния времени выполнения.
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
enabled | bool | false | true | false | Включить файл кэша. |
path | string | cache.db | <file path> | Где хранить базу данных кэша. |
cache_id | string | (unset) | <string> | Префикс пространства имён внутри того же файла кэша. Полезно, когда один файл кэша делят несколько экземпляров sing-box. |
store_fakeip | bool | false | true | false | Сохранять таблицу аренд fakeip. |
store_rdrc | bool | false | true | false | Устарело, заменено store_dns. Сохраняет кэш отклонённых DNS-ответов, используемый устаревшими полями фильтра адресов DNS. |
rdrc_timeout | badoption.Duration | 7d | <duration> | Как долго записи rdrc остаются действительными в кэше. |
store_dns | bool | false | true | 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_controller | string | (unset) | <host:port> | Адрес прослушивания RESTful API. |
external_ui | string | (unset) | <dir path> | Локальный каталог, раздаваемый как панель управления. |
external_ui_download_url | string | https://github.com/MetaCubeX/metacubexd/archive/refs/heads/gh-pages.zip | <URL> | Архив, автоматически скачиваемый, когда external_ui пуст. |
external_ui_download_detour | string | (direct) | <outbound tag> | Исходящий, используемый для скачивания. |
secret | string | (unset) | <bearer token> | Bearer-токен, требуемый для всех вызовов API. Настоятельно рекомендуется. |
default_mode | string | rule | rule | global | direct | <custom> | Начальный режим туннеля, сообщаемый через API. Допускаются пользовательские значения; нестандартные панели их игнорируют. |
access_control_allow_origin | badoption.Listable[string] | [] | <origin> | Список разрешённых origin (CORS) для API. |
access_control_allow_private_network | bool | false | true | 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 ...), который хочется продолжать использовать.
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
listen | string | (required) | <host:port> | Адрес прослушивания gRPC для StatsService. |
stats | *V2RayStatsServiceOptions | (unset) | V2RayStatsServiceOptions | Выбор счётчиков. |
Исходный код: option/experimental.go:44-47 · зафиксировано на v1.14.2 (af6e64c)
v2ray_api.stats
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
enabled | bool | false | true | 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.
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
listen | string | (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 | *bool | false | true | false | Преобразовывать невосстановимые сбои рантайма в панику с трассировкой стека. |
trace_back | string | (Go default) | none | single | all | system | crash | Настройка GOTRACEBACK. |
memory_limit | *byteformats.MemoryBytes | (unset) | <bytes/MiB/GiB> | Мягкий предел памяти; принимает простые числа (байты) или значения с суффиксом вроде 256MiB. |
oom_killer | *bool | false | true | false | Аварийно завершать процесс, когда memory_limit превышен слишком долго. |
Исходный код: option/debug.go:5-14 · зафиксировано на v1.14.2 (af6e64c)
Пример
{
"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)
