---
date: 2026-07-18
tags:
  - sing-box
  - справочник
  - конфигурация
aliases:
  - Хардкод-константы sing-box
  - дефолты sing-box
  - sing-box defaults
link: https://github.com/shtorm-7/sing-box-extended
---

# 🔩 Хардкод-константы и дефолты sing-box-extended

> [!info] О чём заметка
> Справочник значений, зашитых в исходники [[sing-box/sing-box-extended|sing-box-extended]] (и в унаследованный от upstream sing-box код): порты по умолчанию, таймауты, интервалы, магические адреса и числа протоколов. Полезно, когда поведение «из коробки» неочевидно из документации. Устройство кода, откуда эти константы взяты, — в [[sing-box/architecture|разборе архитектуры]].

> [!warning] Снимок исходников
> Значения выписаны из ветки `extended` на июль 2026 (релиз `v1.13.14-extended-2.5.1`), файлы указаны от корня репозитория. В новых версиях константы могут меняться — при сомнении сверяйся с `constant/` в актуальных исходниках.

## Порт по умолчанию у socks/http: его нет

Частый вопрос: «какой порт слушает socks/http-inbound, если не указать?». Ответ: **никакого привычного дефолта (1080 для SOCKS, 8080 для HTTP) в sing-box не существует**. По коду (`option/inbound.go`, `common/listener/listener_tcp.go`):

- Поле `listen` (адрес) — **обязательное**: без него конфиг не валиден.
- Поле `listen_port` — необязательное (`uint16`, omitempty): если его не указать, значение будет `0`, и операционная система выдаст **случайный свободный порт**. Для постоянного inbound это почти всегда не то, что нужно, — порт задавай явно.
- Если адрес из `listen` не удаётся собрать, fallback-адрес привязки — `127.0.0.1`.

Проще говоря: sing-box сознательно не назначает «известных» портов — каждый inbound слушает ровно то, что написано в конфиге, а забытый `listen_port` оборачивается случайным портом, а не 1080.

## Таймауты ядра (`constant/timeout.go`)

| Константа | Значение | Что означает |
|---|---|---|
| `TCPConnectTimeout` | 5 с | Лимит на установление исходящего TCP-соединения |
| `TCPTimeout` | 15 с | Общий лимит TCP-операций (например, хендшейков протоколов) |
| `ReadPayloadTimeout` | 300 мс | Ожидание первых данных (для сниффинга протокола) |
| `DNSTimeout` | 10 с | Лимит DNS-запроса |
| `UDPTimeout` | 5 мин | Простой UDP-сессии до закрытия NAT-записи |
| `ICMPTimeout` | 10 с | Простой ICMP-сессии |
| `TCPKeepAliveInitial` / `Interval` | 5 мин / 75 с | Параметры TCP keep-alive |
| `DefaultURLTestInterval` | 3 мин | Период URL-теста в группах `urltest` |
| `DefaultURLTestIdleTimeout` | 30 мин | Простой, после которого URL-тест группы засыпает |
| `StartTimeout` / `StopTimeout` / `FatalStopTimeout` | 10 с / 5 с / 10 с | Лимиты запуска и остановки сервисов ядра |
| `TLSFragmentFallbackDelay` | 500 мс | Задержка-фолбэк при TLS-фрагментации |

Сниффер протоколов дополнительно связывает известные порты с протоколами (`PortProtocols`): 53 → DNS, 123 → NTP, 3478 → STUN, 443 (UDP) → QUIC; для распознанных протоколов действуют свои таймауты UDP-сессий (`ProtocolTimeouts`): DNS/NTP/STUN — 10 с, QUIC/DTLS — 30 с. TTL DNS-ответов по умолчанию — 600 с (`constant/dns.go`, `DefaultDNSTTL`).

## Константы фич форка

Значения из extended-кода (подробности механики — в [[sing-box/architecture|архитектуре]]):

| Где | Константа | Значение |
|---|---|---|
| Fallback-группа | `blacklist_timeout` по умолчанию | 1 мин (неисправный outbound временно исключается) |
| Failover | размер кольцевого буфера кадров | 10 кадров (глубина восстановления сессии; при большем отставании — `SessionBroken`) |
| Failover | служебный адрес протокола | `sp.failover.sing-box.arpa:444` |
| Bond | служебный адрес протокола | `sp.bond.sing-box.arpa:444` |
| Bond | сумма `download_ratio` и `upload_ratio` | обязана равняться 100, иначе ошибка `invalid ratios` |
| Провайдер remote | `update_interval` по умолчанию / минимум | 24 ч / 1 мин |
| Провайдер, health check | интервал / минимум / таймаут / параллелизм | 10 мин / 1 мин / 3 с / 10 одновременных URL-тестов |
| Traffic-лимитер | период отправки счётчиков менеджеру | 5 с |
| Node → manager | интервал переподключения gRPC-стрима | 5 с |
| Connection-лимитер (`lock_type: manager`) | обновление распределённого лока / TTL лока на менеджере | 5 с / 30 с |
| Manager | пул рассылки обновлений узлам | 16 воркеров |
| Manager API | префикс REST / лимит списков по умолчанию | `/manager/v1` / 100 записей |
| Пересчёт скоростей | `MbpsToBps` (`constant/speed.go`) | 125 000 (1 Мбит/с = 125 000 байт/с — множитель для опций `speed` лимитеров) |

## Магические числа протоколов

Константы, обеспечивающие байтовую совместимость с другими реализациями (происхождение кода — в [[sing-box/protocols-origin|заметке о происхождении протоколов]]):

- **XTLS-Vision**: размер чанка 8192 байта; пороги паддинга — контент короче 900 байт дополняется до `900 + rand(500)`, иначе паддинг `rand(256)`; 5-байтовый заголовок `{команда, длина контента (2 байта), длина паддинга (2 байта)}`. Значения совпадают с Xray-core — иначе Vision-клиент sing-box не работал бы с Vision-сервером Xray.
- **Hysteria2**: аутентификация — HTTP/3-запрос на путь `/auth` с заголовком `Hysteria-Auth`, успех — нестандартный статус-код **233**; максимальный размер UDP-датаграммы 4096 байт; обфускация Salamander — XOR с BLAKE2b-256(PSK + соль), соль 8 байт. Congestion control Brutal: минимум 50 сэмплов, `minAckRate` 0.8.
- **Trojan**: ключ — SHA224-хеш пароля в hex (56 символов), разделители CRLF, команды TCP=1, UDP=3.

## 📚 См. также

- [[sing-box/sing-box-extended|sing-box-extended — обзор]] — что за проект
- [[sing-box/architecture|Архитектура sing-box-extended]] — где эти константы живут в коде
- [[sing-box/protocols-origin|Откуда код протоколов]] — почему магические числа совпадают с Xray и apernet/hysteria
- 🔗 [constant/ в репозитории](https://github.com/shtorm-7/sing-box-extended/tree/extended/constant) — первоисточник констант

---

> [!quote] 🤖 Эти статьи открыты — можно обучать на них ИИ
> При желании вы можете натренировать ИИ на наших статьях. Исходное форматирование и скачивание всего репозитория одним zip-архивом доступны в Forgejo: [исходник этой заметки](https://git.zapret.moe/zapretdiscordyoutube/todo/src/branch/main/sing-box/hardcoded-defaults.md) · [весь репозиторий](https://git.zapret.moe/zapretdiscordyoutube/todo/src/branch/main).
