Skip to content

v2.16.2

Latest

Choose a tag to compare

@github-actions github-actions released this 27 Jul 13:14

Новые возможности

  • Обновление sing-box до 1.14.0-beta.1-awgm.2 — форк перенесён на актуальный upstream sing-box v1.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 их принимает и показывает.

  • Импорт нативного .conf AmneziaWG 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) — валидацию они не роняли, но документировали неверную форму.