github eGamesAPI/remnawave-reverse-proxy v3.6.0

3 hours ago

REMNAWAVE REVERSE PROXY

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

Панель, ноды, страница подписки и Xray Checker теперь умеют жить в частной mesh-сети NetBird. Служебный трафик уходит из публичного интернета, порты панели закрываются от чужих, а управление остаётся у вас. Один пункт в главном меню разворачивает сеть, переводит машины и следит за путями. Публичные адреса при этом не сгорают: запасной путь остаётся у каждой ноды, и любую службу можно вернуть на публичный путь одним пунктом меню.


🕸️ Частная сеть для всей связки

Пункт «NetBird: сеть для нод и панели». Подробности в wiki.

  • Панель подключается к вашему аккаунту NetBird, облачному или собственному серверу.
  • В режиме API модуль создаёт группы rrp-…-panel, rrp-…-nodes и однонаправленные политики вместо всеобщей Default, ключи для каждой машины выпускаются одноразовые и отзываются сразу после использования.
  • Политика Default выключается по команде, но сначала модуль проверяет, что все нужные пути выживут, а если нет, возвращает её обратно.
  • Клиент на каждой машине ставится с закреплённой версией: фоновые обновления не перезапустят его сами.

🔒 Ноды в сети

  • Перевод ноды это один вопрос и пара минут: клиент ставится по SSH, путь до нового адреса проверяется из контейнера панели (TCP и TLS с проверкой MTU), и только потом адрес меняется в панели.
  • Публичный порт 2222 остаётся открытым как запасной.
  • Аварийный возврат всех нод на публичные адреса одной командой, сам NetBird не трогается.
  • Прерванный перевод продолжается с места остановки или откатывается назад.
  • Новую ноду можно развернуть сразу в сети: панель будет ходить на неё по сетевому адресу с первой секунды, а публичный путь останется запасным.

📄 Страница подписки и Xray Checker

  • Сервер подписки переключается на панель через отдельный порт из закрытого диапазона, compose переписывается на сетевой адрес, куки и auth-гейты уходят.
  • Возврат на публичный путь тем же пунктом: конфигурация восстанавливается из снимка, кука доступа обновляется под текущую панель, путь проверяется живьём.
  • Xray Checker работает в сети одним контейнером: подписка только через сеть, метрики и страница мониторинга под паролем и только для машин сети.
  • Возврат чекера восстанавливает публичный вариант из снимка, а без снимка честно говорит, что публичный чекер ставится своим пунктом.

🛟 Спокойный выход

  • Отключение обратимое: клиент останавливается, установка и состояние остаются на месте.
  • Пока в сети живёт хотя бы одна служба, модуль не даст погасить панель и подскажет порядок возврата.
  • Полное удаление чистит клиенты на нодах по SSH, записи в аккаунте и состояние модуля, а группы и политики остаются на будущее.
  • Диагностика сверяет записанные адреса с фактическими и показывает состояние клиента, настроек и путей.

🔧 Исправления

  • Синхронизация сертификатов на ноды сверяла только срок сертификата панели: до второй и последующих нод продления не доезжали вовсе, а первая получала их с опозданием в месяц каждый цикл. Теперь сравниваются отпечатки sha256 сертификата панели и самой ноды.
  • Крон-скрипт синхронизации подтягивал модуль SSH из кэша модулей, и обновление основного скрипта оставляло его навсегда отчитываться успехом. Теперь в скрипте живёт собственная встроенная копия модуля.
  • Обновлятор RU-списков перегенерируется по маркеру версии, а дословные переводы строк в его curl-вызовах раньше отправляли токен панели постороннему хосту.
  • Пресет закрытых адресов egress при повторном применении терял приватные подсети из блок-листа, старый набор теперь вычитается до слияния. Источники моста в ufw хранятся построчно, и устаревшие правила больше не остаются на машине выхода.
  • На свежих VPS первая загрузка шла вместе с unattended-upgrades, который подолгу держал apt, и установка падала на первом же пакете. Теперь скрипт ждёт освобождения блокировки сам, а зависшие обновления останавливает и докатывает установку.

🔐 Безопасность

Заголовки API-запросов панели передаются через временный файл: раньше токен светился в ps на сервере. Выпуск ограниченного токена при неудаче падает с понятной ошибкой, а не подменяется токеном с полными правами. Публичный адрес определяется по https с проверкой ответа: страницы ошибок с ifconfig.me раньше попадали прямо в корневые команды на нодах. Compose страницы подписки пишется с правами доступа только владельцу в обоих вариантах установки, а снос скрипта убирает его крон-задачи, отзывает ключи на управляемых машинах и токен панели вместо осиротевших следов.

⚙️ Дисциплина и честные итоги

  • SSH-вызовы без передачи данных идут с -n: такой вызов внутри цикла чтения раньше съедал оставшиеся строки, и следующие вопросы упирались в конец ввода.
  • Конец ввода в меню возвращает управление вместо бесконечной рекурсии, подменю IPv6 и сертификатов перестали открывать главное меню дважды.
  • Загрузчик модулей проверяет код возврата, а новые файлы скачиваются во временные и проходят проверку синтаксиса до замены кэша.
  • Неудачная переустановка ноды поднимает старые контейнеры обратно, а не оставляет её лежать.
  • Проверка здоровья страницы подписки требует и контейнер приложения: доступность https сама по себе доказывает лишь nginx, TLS и DNS.

🧱 Файрвол и SSH

Правила ufw применяются по одному с проверкой каждого: склеенные цепочки рапортовали только последний код возврата, и включение файрвола могло пройти при неудачном разрешении SSH. На каждый хост хранится ровно одна SSH-цель, поля сбрасываются при промахе поиска, отзыв последней цели не трогает known_hosts остальных, для законной смены ключа хоста есть отдельный пункт. У всех SSH-вызовов настроен keepalive, а выбор ноды показывает публичный адрес и больше не молча берёт первую при пустом вводе.

🔁 Установка страницы подписки

Сбор параметров, рендер и применение разделены: рендеры пишут в stdout, compose собирается одним документом, отказы возвращают управление, а не завершают процесс. Для автоматических установок есть режим без вопросов через переменные окружения, адрес панели можно переопределить, секреты пишутся с правами доступа только владельцу, а проверка здоровья требует контейнер приложения.

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

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

📖 Wiki

https://wiki.egam.es/ · статья модуля: https://wiki.egam.es/ru/configuration/netbird-module/

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

NewReleases is sending notifications on new releases.