v1.6.0 · обновление за 3–7 августа 2026
Первое включение, страница статуса и страница подписок.
Пять дней ушло на то, что видно только на живом сервере и на живом человеке: установка с нуля, первая собранная схема, показ панели тому, кто открыл её впервые. Отсюда и состав. Большая часть релиза — про первое включение: панель доводит нового человека от приветствия до QR-кода, который можно отдать клиенту, вместо того чтобы оставить его наедине с холстом и двумя десятками разделов. Остальное — два новых раздела, привязка сетевых адресов ноды и разбор с проверками здоровья, которые слишком охотно объявляли аварию.
Панель доводит нового человека до первого клиента
Раньше первый экран был тем же, что и тысячный: сайдбар, разделы, пустой холст. Теперь новичка встречает тур. Он объясняет, что такое Axottle и где кончается его работа и начинается Remnawave, ведёт до установленной ноды, потом на холст — собрать первое подключение, потом до страницы подписок и до QR-кода. Опытному предлагаются два экрана и ссылки на документацию.
Подсветка идёт по живым страницам, а не по макету: кнопка «Новая схема», блок шлюза, палитра, «Применить изменения». Переходы тур узнаёт от самих страниц — блок брошен, вход настроен, схема уехала в Remnawave, — поэтому переживает F5 и не заставляет делать заново то, что уже сделано. Нода, созданная руками до обучения, засчитывается молча. Если Remnawave не подключена, тур начинает с неё: иначе человек узнавал бы об этом через полчаса, на кнопке «Применить».
Настройка входа на этом пути спрашивает три вещи вместо шести вкладок: набор, ноду и, где он нужен, маскировочный домен. Рекомендация зависит от ноды — с доменом честно предлагать маскировку под сайт, без домена она физически не соберётся. «Показать все настройки» разворачивает прежний конструктор с уже собранным ответом. Упрощённое окно принадлежит именно туру: кто его прошёл или закрыл, получает полный конструктор сразу.
Прогресс хранится на администратора, а не на установку — сотрудник, заведённый через полгода, тоже видит панель впервые. Полосу тура можно свернуть, если она мешает настраивать раздел под ней. У каждого шага свой аксолотль.
Чего тур не умеет: собрать схему пальцем на телефоне нельзя, палитра тянется мышью.
Появился раздел «Страница статуса»
Публичная страница со статусом сервисов, инцидентами и окнами работ. Панель её настраивает и публикует туда снимок состояния, но сама не хранит ни одной строчки наблюдений: ни проб, ни uptime, ни истории «работало / не работало». Владелец наблюдений — сам рантайм страницы, потому что он не спит, когда панель выключена. Иначе страница показывала бы то, что панель помнит, а не то, что есть.
Установка идёт мастером по одному вопросу на экран: как назовём, по какому адресу открывать, куда поставить. Порядок шагов задан не вкусом, а ACME — домен, A-запись, её распространение, сертификат, сервис. Поставить страницу на домен, который ещё никуда не указывает, мастер не даст. Установщик на сервере разговаривает так же, как установщик панели: баннер, фазы, меню стрелками, русский и английский, подтверждение перед тем, как что-то менять. По SSH из панели запускается он же, только молча и со значениями по умолчанию — терминала там нет, и любой вопрос ждал бы ответа от никого.
Компоненты привязываются к ноде или схеме, инцидент объявляется с первым сообщением, дальше ведётся хроника. Вход сотрудника со страницы обратно в панель стал отдельным экраном подтверждения: видно, какая страница спрашивает, под какой учётной записью и что она получит. Код уходит по нажатию, а не сам — молчаливая выдача подписанного утверждения любому, кто открыл ссылку, означала бы, что чужой сайт уводит сессию сотрудника одним редиректом.
Страницу можно удалить из панели: инстанс, компоненты, инциденты, работы и ключи уходят вместе. Сервер, на котором она стоит, при этом продолжит работать — панель до него не дотягивается и снести его не может.
Появился раздел «Страница подписок»
Разворачивается официальная страница подписок Remnawave — та, которую открывает клиент вместо панели. За развёрнутой раздел следит: доступность, срок сертификата, журнал операций, обновление образа.
Способов установки сейчас два. По SSH — панель ставит сама, реквизиты живут внутри одного запроса и никуда не сохраняются. Вручную — для сервера, где 80 и 443 уже держит ваш Caddy или nginx: панель выдаёт команду и готовые куски конфига с подставленными доменом и портом. Раньше в этом случае оператор упирался в «освободите порты», и способа обойти это из панели не было. Установка на управляемую ноду и на сервер самой панели из мастера временно убраны — до тех пор, пока их не доведут.
Настройки подписки в самой Remnawave раздел показывает, но не переписывает: они принадлежат применению схем подключения, и менять их за вас он не станет.
Адрес ноды привязывается вводом одного поля
Провайдер выдал дополнительный адрес — раньше это означало разговор с netplan по SSH. Теперь оператор вводит адрес, а интерфейс, маску, шлюз и необходимость отдельной таблицы маршрутизации панель выводит из инвентаря самой ноды: спрашивать это у человека значит просить его сделать работу панели. Второй вопрос появляется ровно там, где ядру физически неоткуда взять ответ — адрес из подсети, до которой нода не дотягивается.
У адреса появилась роль. Вход — тот, на который подключаются клиенты: он уходит в конфиг клиента вместо адреса администрирования. Выход — тот, с которого нода идёт в интернет. Второй адрес с той же ролью встаёт в резерв: он уже прописан на ноде и готов принимать трафик, поэтому переключение на него стоит одну перекомпиляцию схемы, а не поход на сервер. Это и есть весь смысл резерва — на выходной адрес прилетела жалоба, и съезжать надо сразу.
Ограничение названо ошибкой, а не советом. Связка компилируется в один профиль конфигурации, который получают все её ноды, поэтому адрес одной ноды нельзя навязать блоку, где их несколько: для остальных это команда, которую они выполнить не могут, и вход у них молча не поднимется. Панель отклоняет такую схему с объяснением.
Отдельно: назначить роль и убедиться, что нода ей пользуется — разные вещи. Схема компилируется, проверки зелёные, а трафик всё это время может уходить со старого адреса. Панель теперь сверяет, с какого адреса нода на самом деле выходит, и говорит, если это не тот, что помечен выходом. Выход через WARP считается законным, а не расхождением: адрес там принадлежит Cloudflare, и называть это ошибкой значило бы отправить оператора искать поломку, которой нет.
Панель проверяет, за кого интернет принимает ноду
Страна ноды была величиной объявленной: приезжала из снимка Remnawave или её вписывал оператор, и дальше панель повторяла её везде. Между «нода жива» и «нода там, где написано» помещается целый класс поломок, которые панель показывала зелёными. Провайдер переназначил адрес из другого пула, гео-базы уехали следом, клиенты получили не тот регион стриминга — а доступность, сервисы и рукопожатие в порядке, потому что с нодой ничего и не случилось. Она просто больше не там, где написано.
Теперь панель выходит в интернет через саму ноду, смотрит, что о её выходном адресе думает внешняя сторона, и показывает вердикт рядом с объявленной страной.
Схемы на Hysteria2 перестали гореть аварией
Hysteria2 слушает QUIC поверх UDP, а все проверки панели были TCP. Стук по TCP в такой порт получает отказ всегда, независимо от того, работает туннель или нет, — и рабочая схема объявлялась недоступной с формулировкой «порт закрыт».
Теперь UDP-вход проверяется с двух сторон. Изнутри — по снимку слушающих сокетов, который агент присылает вместе с метриками: занят ли порт вообще. Снаружи — настоящим QUIC-рукопожатием с проверкой сертификата, тем же, которое делает клиент. Маршрут на Hysteria2 впервые получил доказательство и перестал висеть непроверенным.
Границу стоит назвать вслух. Рукопожатие доказывает, что пакеты доходят и сертификат тот. Оно не доказывает, что пройдёт аутентификация Hysteria2 — для этого нужен пароль подписки, которого у проверки нет и быть не должно. Поэтому в журнале это называется рукопожатием, а не «маршрут работает».
Заодно незнание перестало краситься как поломка. Проверка, которой нечего было проверить, больше не красит путь на холсте красным и не подписывает его «Проблемный путь»; в сводке такие пути считаются отдельно, как непроверенные. WARP по той же причине больше не обвиняется без проверки. Раньше отличить «сломано» от «не смотрели» можно было только открыв журнал проб.
Перепродажа с арендованного сервера теперь ловится
Все факторы детектора шаринга построены на разбросе: адресов, стран, устройств. Перепродажа с арендованного сервера даёт обратное — один адрес, одна страна, один провайдер. Для детектора такой перепродавец выглядел образцовым подписчиком. То есть панель ловила клиента, раздавшего ключ трём друзьям, и пропускала того, кто продаёт доступ сотне.
Появился фактор «трафик приходит из хостинга»: домашнего интернета в датацентрах не бывает. Сам по себе он ничего не открывает — подписчик может сидеть за корпоративной сетью или держать сервер для себя. Инцидент открывает пара «объём плюс хостинг», и она объясняется клиенту одной фразой. Порог объёма, который считается подозрительным, теперь задаётся в настройках, а не зашит в код.
Превышение лимита устройств тоже стало поводом для инцидента — но только когда устройства посчитаны по устройствам. Там, где данных об устройствах нет, панель подставляет число активных адресов, и по этому пути один телефон, переехавший из дома в метро, выглядел бы как несколько устройств. По такому счётчику инцидент не открывается, а в тексте для оператора прямо сказано, факт перед ним или подстановка.
Бот и прокси поддержки настраиваются, а не только удаляются
У канала были «Проверить», «Включить» и «Удалить». Бот с протухшим токеном оказывался в тупике: чинить нечем, а удалить нельзя — к нему привязаны тикеты. Прокси правился ещё хуже: завести его можно было только внутри диалога добавления модели ИИ, и потерянный пароль означал, что канал уже не поднять.
Теперь у канала есть «Настроить»: имя, новый токен, выбор прокси, и новый прокси заводится прямо там же. Отдельно исправлено то, из-за чего рабочий прокси объявлялся сломанным: одной неудачной попытки для этого больше не достаточно, а отказ самого прокси панель выдавала за фильтр провайдера и отправляла оператора смотреть группы безопасности у хостера. Картинки в переписке открываются во весь экран. Отключённый оператор теряет доступ, а не переезжает в наблюдатели.
Axosun чинит, а не пересказывает
Помощник видел брутфорс и открытые порты, но сделать с этим не мог ничего. Теперь у него есть закрытый список действий: бан и разбан адреса, управление ufw, fail2ban и crowdsec, применение рекомендованного тюнинга. Имя задачи берётся из таблицы, а не из слов модели, поэтому выдуманный вид задачи до ноды не доедет.
Дотянулся он и до того, что давно есть в панели: выпуск сертификата тем же путём, что и кнопка в разделе «Домен и SSL», готовность резервных копий и запуск любого профиля, состояние GeoAssets, инвентарь адресов с ролями, поддержка. Отдельно — страница статуса: объявить инцидент, вести хронику, запланировать работы, привязать компонент к ноде или схеме. Всё, кроме чтения, требует подтверждения оператора: это заявление от имени сервиса наружу, а не внутренняя правка. И в свободном чате он теперь предлагает действие, а не рапортует о нём как о сделанном.
Диск не забивается молча
Полный диск — это не «медленно», это остановка: PostgreSQL не может записать checkpoint, ловит PANIC и уходит в цикл перезапусков, который пишет в лог ещё больше. К этому моменту API уже недоступен, поэтому всё, что может помочь, обязано работать локально и без панели.
Причина была простая: ни в одном compose-блоке установщика не стояло ограничение на логи, а json-file по умолчанию не ограничен ничем. Remnawave и прокси пишут на каждый запрос — за неделю это гигабайты. Лимит теперь стоит в каждом сервисе, в /etc/docker/daemon.json, чтобы ловить и контейнеры, которые панель поднимает сама, и в journald.
Сверх этого: установщик и обновление проверяют свободное место до начала работы — дамп базы, которому не хватило места, это обрезанный дамп, из которого потом «откатятся». Локальный бэкап не стартует без запаса. Фоновая проверка открывает инцидент при 10 и при 5 процентах свободного. А в консольной утилите на сервере появился экран «Место на диске»: цветная шкала долей, серым то, что трогать нельзя, очистка всего или только старше 7 и 30 дней. Живые docker-логи при этом обнуляются, а не удаляются — демон держит их открытыми, — и тома базы не трогаются никогда.
Мелочи, которые ловятся только на живом сервере
Маскировка под сайт снова садится на 443. Быстрые пресеты входа не писали порт, бэкенд отдавал инбаунд на откуп Remnawave, и она выдавала случайный высокий — маскировки на этом не выходит. По той же линии подписка на XHTTP SelfSteal вела клиента на внутренний порт вместо 443.
Применение схемы ждёт сертификат ноды, а не роняет Xray конфигом на пустое место. Нода получает зеркала реестра, если Docker Hub до неё не доезжает. Бэкап перестал выбирать pg_dump, который заведомо не сработает против сервера более новой версии. Окно работ не падает из-за идентификатора компонента из чужого инстанса.
Карточка лицензии больше не пишет «Активна» над красным баннером о деактивации: обе надписи брались из разных мест, и правой была нижняя. Замок по тарифу перестал ссылаться на несуществующий Pro. Установка, которая не удалась, не выдаёт себя за успешную и называет причину отказа лицензии.