github eGamesAPI/remnawave-reverse-proxy v3.7.0

3 hours ago

REMNAWAVE REVERSE PROXY

🚀 Основные изменения

Главное в этом релизе: исправление багов. Большинство касалось редких и аварийных сценариев: сбой посреди операции, повторный запуск, временно недоступная панель.


NetBird

  • Аварийный возврат охватывает и ноды в состояниях rollback_failed, и импортированные: раньше именно они оставались на overlay-адресе при аварии NetBird.
  • Импорт ручной схемы не теряет ноды: вопрос о публичном хосте идёт мимо потока jq, имена с пробелами парсятся, а публичные ноды не помечаются как overlay.
  • Состав группы собирается из идентификаторов участников: добавление уже зарегистрированной ноды в непустую группу больше не падает с 400.
  • Перед выключением политики Default проверяются пути всех участников: импортированных нод, страницы подписки и чекера.
  • Отдельный порт на Caddy создаётся с первого раза: пустой список разрешённых адресов допустим, номер порта своего блока распознаётся и не смещается при каждом применении.
  • Откат страницы подписки завершается при любой защите панели: имя куки берётся из конфига панели, для TinyAuth и MFA отправляется X-Api-Key. Выход из схемы больше не требует удалять файл состояния вручную.
  • Токен self-hosted аккаунта не отправляется в облако: адрес API строится по адресу вашего сервера NetBird, и нода при переводе подключается к нему же.
  • Уже подключённый на ноде клиент виден до перевода: модуль показывает его сервер управления и предлагает перерегистрацию, а клиент из чужого аккаунта опознаётся по адресу вне сети панели.
  • Чекер в сети не открывает свой интерфейс в интернет: состояние UFW проверяется, порт 2112 остаётся закрытым снаружи.
  • Полное удаление стирает участников сети по идентификаторам, а не по именам: чужой сервер с hostname «vps» не выпадает из сети, а политика Default возвращается на место до удаления состояния модуля.

🧭 Маршрутизация

  • «Локальная нода» снова означает адрес этой панели: публичный IP, домен, указывающий на этот IP, или шлюз локального compose. Overlay-адрес и домен удалённой ноды больше не считаются локальными: раньше так правило ext: попадало в профиль, где файла нет, и Xray на ноде не запускался.
  • Перед включением ufw на сервере выхода открывается порт ноды для панели: если правило поставить не удалось, ufw не включается, и нода не теряет связь с панелью.
  • Правило ruex включается только в профили, где файл смонтирован на всех нодах. Отступ в compose подстраивается под формат файла, запись идёт во временный файл со сверкой sha256, а рестарт получают только изменившиеся ноды.
  • Если снять правила с профиля не удалось, мост остаётся в списке: служебный пользователь и сквад не удаляются, повтор доводит удаление до конца.
  • Порт SS-инбаунда проверяется на диапазон и занятость, а EOF в любом меню модуля возвращает управление.

🧩 Плагины нод

  • Сбойный запрос конфига плагина прерывает сохранение: раньше конфиг подменялся пустым, и следующий PATCH стирал остальные секции плагина на всех нодах.
  • Ноды с чужим плагином перепривязываются только по списку и после подтверждения.
  • Переименованный в панели плагин находится по сохранённому идентификатору, а не пересоздаётся пустым с перепривязкой всех нод.
  • «Пересоздать таблицы» честно предупреждает: Ingress и Egress на нодах сбросятся тоже.
  • Отметки пресетов переживают недоступную панель, пресет private не блокирует DNS самого сервера, а прокси с авторизацией в уведомлениях кодируется корректно.

➕ Добавление нод

  • Сертификат, выпущенный на самой ноде, продлевается с рестартом nginx: deploy-hook прописывается в конфиг продления.
  • Пара файлов сертификата при синхронизации пишется атомарно: передача, прерванная посередине, больше не ломает nginx ноды при следующем рестарте.
  • Удаление устаревшей ноды находит профиль конфигурации по правильному полю и стирает его вместе с хостами, а профиль, созданный при неудачной установке ноды, удаляется, и имя свободно для повтора.
  • Ошибка создания ноды не принимается за её uuid, overlay-нода получает SSH-алиас с первого раза, DNS-провайдер спрашивается и тогда, когда запись уже указывает на ноду.

📜 Сертификаты

  • Сертификаты HTTP-01 продлеваются сами: крон ставит ufw, если его нет, хук лежит в ключе renew_hook, который certbot действительно читает, а порт 80 открывается только на время ACME-проверки и не трогает чужие правила.
  • Хуки продления ставятся и для Bunny, и для сертификатов с суффиксом -0001, а «Обновить сертификаты» не переписывает хуки чужих сертификатов, включая сертификат чекера.
  • Отчёт в Telegram об истекающих сертификатах идёт на языке интерфейса, а токен бота и учётные данные прокси уходят из командной строки.

⚙️ Ядро Xray

  • Замена смонтированного кастомного ядра пересоздаёт контейнер ноды: раньше после замены контейнер продолжал работать со старым файлом.
  • Перед установкой ядра 26.9.8 и новее модуль предупреждает: сервер REALITY перестаёт принимать клиентов без поддержки X25519MLKEM768 и молча отправляет их на сайт-маскировку. Ошибки у клиента при этом нет, подключение просто не работает. Перед обновлением проверьте, что ваши клиенты уже поддерживают ML-KEM.
  • При недоступном GitHub API ставится закреплённая версия, своё ядро с потерянной записью показывается как неизвестное, а если профиль панели запускает собственное ядро, об этом сказано прямо.

📡 Xray Checker

  • nginx -t выполняется в пересозданном контейнере с новыми монтированиями: публикация через nginx панели больше не падает на свежем сертификате.
  • Каталог сертификата определяется по факту, контейнер в цикле рестартов не считается работающим, а наполовину выполненная установка объясняет, как её завершить или отменить.
  • Существующий сертификат используется повторно, если он уже покрывает домен, а домен, который уже обслуживает веб-сервер, отклоняется.

🖥️ Панель и доступ

  • Неудачное обновление откатывает .env и compose, а возврат с 3.x поднимает образ 2.x, а не только что скачанный 3.x.
  • Проверка после правки Caddy замечает цикл рестартов и возвращает конфиг.
  • Порт 8443: повторное открытие не падает на «порт занят» (его занимает сам nginx), сбой правки не трогает чужое правило ufw, а с TinyAuth пост объясняет, когда страница входа доступна вообще.
  • Логи показываются и для остановленных контейнеров, а ошибка docker pull докладывается вместо «обновлений нет».

🌐 IPv6, BBR и DNS

  • Настройки IPv6 и BBR пишутся в собственный файл sysctl.d: Debian 13 перестал читать /etc/sysctl.conf при загрузке, и значения молча возвращались к исходным после каждой перезагрузки. Старые строки из sysctl.conf вычищаются.
  • Статус IPv6 понимает отключение параметром ядра ipv6.disable=1, а пустой ответ sysctl больше не роняет проверку.
  • Проверка «домен уже указывает на этот сервер» узнаёт записи за прокси Cloudflare по их CIDR-диапазонам, и обновление A-записи сохраняет прокси.

🎨 Legiz и selfsteal-шаблоны

  • yq для расширений legiz ставится под архитектуру процессора (amd64/arm64), а повреждённый yq от прошлой установки замечается и заменяется.
  • Установка страницы подписки ищется и в /opt/remnawave, и в /opt/subscription.
  • Пункт 0 в меню расширений legiz действительно выходит: раньше он проваливался дальше, и compose панели перезапускался без причины.
  • Смена selfsteal-шаблона ноды идёт через промежуточный каталог: неудачная копия оставляет работающий сайт на месте, а не пустой каталог.
  • Выход из вложенного меню шаблонов больше не запускает вторую копию скрипта, а конец ввода выводит из меню вместо вечного цикла.

🔑 SSH

  • Запись overlay-алиаса одной цели не стирает его у остальных: защита перевода больше не держится только на последней ноде.
  • Смена ключа хоста при переустановке ОС решается на месте: скрипт показывает отпечаток сервера и забывает старый ключ после подтверждения.
  • Подпись сервера в списке подключений меняется без повторного ввода: Enter оставляет прежнюю.

🔐 Безопасность и стабильность

  • Тела API-запросов уходят через stdin: приватные ключи Reality из патчей профиля, пароль суперадмина и токены Telegram-ботов больше не видны в ps.
  • Скачиваемые скрипты и бинарники проверяются перед запуском от root: установщик Docker и скрипты WARP и бекапа запускаются только при совпадении контрольных сумм с двух независимых источников, yq сверяется с контрольными суммами релиза. Если проверка невозможна, Docker ставится подписанными пакетами дистрибутива, а остальные скрипты не запускаются.
  • Пустой ответ и страница ошибки перестали считаться успехом: DELETE проверяет HTTP-код, ответы панели проверяются на .response.
  • Конец ввода выводит из любого меню вместо цикла без задержки на 100% CPU.
  • Русские строки вынесены из кода в языковые файлы: диагностика NetBird и названия ядер показываются по-английски при английском интерфейсе.

⬆️ Обновление

bash <(curl -Ls https://raw.githubusercontent.com/eGamesAPI/remnawave-reverse-proxy/refs/heads/main/install_remnawave.sh)

📖 Wiki

https://wiki.egam.es/

Don't miss a new remnawave-reverse-proxy release

NewReleases is sending notifications on new releases.