todo/sing-box/hardcoded-defaults.md
loop-uh 08b4491545
Some checks failed
Published content check / validate (push) Failing after 3s
Завершить переезд базы знаний на Forgejo
Обновить правила репозитория и подписи исходников в 99 заметках, не затрагивая пользовательские незакоммиченные файлы. Сделать Forgejo Actions содержательным: проверять опубликованный commit, а не пустое рабочее дерево после checkout.
2026-08-07 08:27:28 +03:00

9.1 KiB
Raw Permalink Blame History

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

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

[!info] О чём заметка Справочник значений, зашитых в исходники sing-box/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.

📚 См. также


[!quote] 🤖 Эти статьи открыты — можно обучать на них ИИ При желании вы можете натренировать ИИ на наших статьях. Исходное форматирование и скачивание всего репозитория одним zip-архивом доступны в Forgejo: исходник этой заметки · весь репозиторий.