Обновить правила репозитория и подписи исходников в 99 заметках, не затрагивая пользовательские незакоммиченные файлы. Сделать Forgejo Actions содержательным: проверять опубликованный commit, а не пустое рабочее дерево после checkout.
9.1 KiB
| date | tags | aliases | link | ||||||
|---|---|---|---|---|---|---|---|---|---|
| 2026-07-18 |
|
|
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 сэмплов,minAckRate0.8. - Trojan: ключ — SHA224-хеш пароля в hex (56 символов), разделители CRLF, команды TCP=1, UDP=3.
📚 См. также
- sing-box/sing-box-extended — что за проект
- sing-box/architecture — где эти константы живут в коде
- sing-box/protocols-origin — почему магические числа совпадают с Xray и apernet/hysteria
- 🔗 constant/ в репозитории — первоисточник констант
[!quote] 🤖 Эти статьи открыты — можно обучать на них ИИ При желании вы можете натренировать ИИ на наших статьях. Исходное форматирование и скачивание всего репозитория одним zip-архивом доступны в Forgejo: исходник этой заметки · весь репозиторий.