Новые возможности
-
Обновление sing-box до
1.14.0-beta.1-awgm.2— форк перенесён на актуальный upstream sing-boxv1.14.0-beta.1, а AmneziaWG-ядро — на финальный upstream AWG3 (влит в master). Новая схема версий форка<upstream>-awgm.Nвместо длинного-awg3-xhttp-mieru-N. -
Показ AWG3 device-таймеров на карточке импортированного туннеля — если в конфиге заданы
rekey_timeout/reject_after_time/keepalive_timeout/max_handshake_attempts, они видны read-only в карточке и таблице AWG3-туннелей. Настраиваются эти таймеры на стороне сервера (routebox); awg-manager их принимает и показывает. -
Импорт нативного
.confAmneziaWG 3 в AWG3-туннели — модалка импорта AWG3 принимает конфиг в форматеawg.conf(вставкой и загрузкой файла): формат детектится автоматически, конфиг конвертируется в endpoint sing-box, тег берётся из Endpoint. Конвертация сверена с эталонными конфигами RouteBox. -
Свой тег outbound'а у сводной группы подписок (#572) — при создании группы можно задать имя outbound'а для конфига sing-box и правил маршрутизации (латиница/цифры/
._-, до 32 символов) вместо случайногоagg-xxxxxxxx; пустое поле оставляет автогенерацию. Тег валидируется и проверяется на коллизии с другими группами и подписками; после создания не меняется.
Исправления
-
Подписки: эндпоинты одного сервера с разным транспортом больше не считаются дубликатами (#625, #614) — идентичность сервера считалась по протоколу, адресу, порту и credential (плюс SNI/reality short_id), поэтому записи, отличающиеся только ws-путём, Host-заголовком, gRPC-сервисом или режимом транспорта, давали один тег: при импорте подписки второй сервер отбрасывался как дубликат, при ручном добавлении — отклонялся. Ключ идентичности расширен полями транспорта (только там, где различения не хватало — теги остальных групп не меняются); ручные исключения пользователя у затронутых групп переносятся на новую схему автоматически.
-
VLESS-ссылки с параметром
encryptionбольше не роняют разбор конфига (#603) — sing-box не имеет поля encryption в VLESS-outbound и декодирует строго: одна такая ссылка в большой подписке стоила отдельного прогонаsing-box checkна каждый сервер, дренаж упирался в бюджет, и пользователь видел «слишком много неподдерживаемых серверов». Мусорные значения (auto,zero, шифры от VMess) теперь молча игнорируются; настоящий VLESS Encryption отбраковывается с объяснением — sing-box его не поддерживает, сервер всё равно не заработал бы. Экспорт ссылки этот параметр больше не несёт. -
Мониторинг: «не измерено» больше не показывается как время отклика (#629) — для NativeWG-туннелей латентность меряет отдельная проба, и её неудачи схлопывались в −1, которую UI считал значением: успешная проверка показывалась как «-1 ms», квадрат в полоске краснел, а −1 попадала в avg/min/max. Теперь неизмеренная латентность везде трактуется как «неизвестно»: прочерк в строках проверок, приглушённый столбец вместо красного, из статистики исключается; причина показывается один раз в карточке (методы handshake и disabled время не измеряют вовсе — это не сбой).
-
FreeTurn: обновления
-N-сборок снова предлагаются, проверка GitHub убрана — сравнение версий отбрасывало суффикс-Nкак pre-release (1.8.0-2и1.8.0-3считались равными), из-за чего апдейт не предлагался; теперь номер сборки учитывается. Заодно удалена проверка обновлений через GitHub upstream (недоступен из RU, результат нигде не использовался — установка идёт закреплённой версией с зеркала) вместе с баннером «Не удалось проверить GitHub». -
Хвост stderr умершего sing-box захватывается до удаления pidfile — исчезновение pidfile разблокирует старт преемника (tun-restart/watchdog), который очищает err.log; чтение хвоста после удаления могло поймать пустой или чужой вывод (фантомный lastError, сломанная OOM-эвристика). Ловилось флаком теста в CI.
-
Outbound'ы подписок и сводных групп больше не «редактируются» в маршрутизации (#572) — generic-редактор outbound'ов физически не может менять сущности слота подписок (сохранение всегда падало с «outbound not found»), но UI предлагал карандашик и поля tag/типа/URL. Теперь редактирование для них заблокировано с подсказкой, где менять на самом деле; строка сводной группы показывает её название вместо сырого
agg-тега и бейдж «группа» вместо «subscription». -
«Пиковая скорость» показывала текущую, а не пиковую (#576) — плитка в сводке туннелей и дашборде брала последнюю точку скорости самого нагруженного туннеля, поэтому в затишье расходилась с пиками графиков карточек на порядки. Теперь считается честный максимум суммарной скорости (↓+↑) по тому же окну истории (последний час), что рисуют графики.
-
«Некорректный ответ сервера» при создании/импорте IP-маршрутов (#578) — swagger-спека мутаций static-routes (create/update/import) и client-routes (create/update/delete/toggle) объявляла списочный конверт, тогда как бэкенд возвращает одиночный объект; runtime-валидация ответов на фронте (появилась в 2.16.0) на этом падала, хотя сами маршруты сохранялись корректно. Аннотации приведены к фактической форме ответов; заодно выправлены спеки ещё 13 endpoint'ов, где объявлялся голый payload вместо конверта
{success,data}(geo-expand, ndms/save-status, presets, resolve, router/staging, terminal/install, selective, subscriptions refresh/active-member/orphans) — валидацию они не роняли, но документировали неверную форму.