REMNAWAVE REVERSE PROXY
🚀 Основные изменения
Трафик пользователей теперь можно разделить между двумя серверами: русские сайты пойдут через один IP, зарубежные через другой. Второй сервер скрипт настроит целиком по SSH, вплоть до установки Docker и ноды, а списки российских доменов подключаются расширенные и обновляются сами. Для личного выбора есть второй тип моста: каждый пользователь сам решает, через какую страну выходить, просто выбирая хост в подписке. Скрипт заодно перестал переспрашивать логин панели: после первого входа он выпускает себе API-токен на 10 лет.
🔀 Серверный роутинг (мост)
«Расширения ноды → Серверный роутинг (мост)». Классическая схема: входная нода за рубежом принимает пользователей, а русские сервисы видят родной российский IP второй машины. Работает и наоборот. Подробности в wiki.
- Между серверами один Shadowsocks-туннель (
chacha20-ietf-poly1305), весь трафик, включая UDP. Пользователи ничего не замечают: та же подписка, те же адреса. - Направление выбирается одним вопросом, подсказка у каждого варианта говорит, какой IP увидит какая сторона, и поменять его можно в любой момент без переустановки.
- Всё считает скрипт: профиль моста, внутренний сквад и сервисный пользователь создаются через API панели. Задаёте одно название, получаете аккуратные объекты вроде
Kazan bridgeиbridge-kazanвместо случайных цифр. - Ноды на второй машине нет? Скрипт поставит её удалённо по SSH: Docker (с зеркалами на случай блокировок), контейнер ноды, регистрация в панели, открытие порта в ufw. Домен и сертификаты машине выхода не нужны: слушает порт и завершает туннель.
- В конце всё проверяется живьём: нода подключилась, порт отвечает. Проверка с клиента:
yandex.ru/internetпокажет один IP,ifconfig.meдругой.
| Режим | Когда подходит | RU-сайты видят | Зарубежные видят |
|---|---|---|---|
| Через мост | входная нода за рубежом | IP машины выхода | IP входной ноды |
| Напрямую со входной ноды | входная нода в России | IP входной ноды | IP машины выхода |
Мостов может быть несколько, каждое со своей машиной и своими профилями. Профиль, уже занятый другим мостом, скрипт честно пометит и переспросит перед перепривязкой.
В меню моста: подключить ещё профиль (вторая входная нода через тот же выход), RU-списки, полная перенастройка, переименование (один ввод, и сквад с юзером, нодой и профилем меняют имена) и удаление роутинга. Профили получат прямой выход, сервисный пользователь и сквад уйдут, порт закроется. Нода моста остаётся и ничего не маршрутизирует.
🧭 Свой выход для каждого (VLESS Route)
Второй тип моста не делит трафик автоматически: через какую страну выходить, каждый пользователь решает сам. Разбор в wiki. У профиля появляется дополнительный хост в подписке, вроде Germany → Moscow, и выбрав его, пользователь целиком выходит через машину моста: телефон может висеть на московском хосте ради банков, а компьютер на обычном. Переключение происходит в клиенте, без переустановки и второй подписки.
- Панель делает это штатно: у хоста есть поле номера маршрута, число вшивается в UUID ссылки, входная нода читает его и везёт соединение через нужный выход.
- Линия на каждый выход: свой номер маршрута, свой сервисный пользователь и своя статистика. Вторая линия на тот же выход создаётся без новой машины.
- «Подключить ещё профиль» добавляет хост второй входной ноде одним вопросом, тем же номером маршрута.
- Контейнер ноды без записи в панели скрипт подключит как есть, без переустановки.
- ufw включается сам: уже открытые порты остаются открытыми, закрывается всё прочее.
- Снять мост можно в любой момент: хост уходит из подписок, пользователь со старой ссылкой просто возвращается к общим правилам.
🔑 SSH-доступ к удалённым машинам
«Расширения ноды → SSH-доступ». Обслуживание второго сервера из меню скрипта: обновить пакеты, перезапустить контейнер ноды, посмотреть логи, не открывая вторую сессию. Инструкция в wiki.
- Если на панели уже есть ключ, открывающий вторую машину, скрипт молча возьмёт его: вопросы не задаются.
- Если нет, спросит пароль root один раз, поставит свой ключ и забудет пароль: на диск он не пишется никогда. Для серверов с закрытым парольным входом есть режим ручной вставки публичного ключа.
- Ваш собственный ключ не читается и не копируется. В
authorized_keysна второй машине появляется ровно одна строка с пометкойremnawave-reverse-proxy, ваши строки не трогаются. - Машин может быть сколько угодно, у каждой своё название в списке, и любую можно отключить одним пунктом.
- Тот же доступ роутинг использует для установки ноды: вручную трогать ничего не нужно.
🇷🇺 Расширенные RU-списки
Стандартное правило category-ru накрывает все домены в зонах .ru, .su и .рф, но русские сервисы на иностранных доменах мимо него: тот же vk.com в списке отсутствует. Пункт «RU-списки» в меню моста подключает списки проекта runetfreedom, они пересобираются ежедневно.
- Штатные правила не заменяются: поверх добавляется одно правило для доменов, доступных только изнутри России.
- Таким адресам обеспечен российский выход в любом режиме работы моста.
- Файл списков ставится на входные ноды, где принимаются решения о маршрутизации.
- Обновляется сам: каждый день в 4:30 свежая версия скачивается с зеркал, контрольная сумма сверяется. Ноды перезапускаются только если файл изменился: в обычный день ничего не происходит и соединения не рвутся.
🔐 Свой токен для панели
Раньше любое протухание токена входа означало новый вопрос про логин и пароль: входной токен панели живёт около недели. Теперь после первого успешного входа скрипт выпускает себе отдельный API-токен на 10 лет и сохраняет его вместо разового. Логин спросит в последний раз.
- Токен называется
remnawave-reverse-proxyи лежит в панели рядом с остальными API-токенами: отозвать можно там же, одним действием. - Права полные: скрипт управляет нодами, профилями, хостами, пользователями, сквадами и расширениями нод.
- Установка панели выпускает токен сразу, поэтому первый запуск меню после установки не спросит логин.
- Сохранённый с прошлых версий токен входа скрипт обменяет на долгий сам, при первом же открытии меню.
- Панели с входом только через OAuth или MFA работают как раньше: токен создаётся в панели руками и вставляется один раз.
- Через 10 лет или после отзыва токена достаточно одного входа: скрипт выпустит новый и удалит старый.
- Панель слишком старая для выпуска токенов? Скрипт заметит и останется на прежнем режиме.
📦 Установка «только панели» без нодовых вопросов
Раньше установка панели без ноды всё равно спрашивала домен будущей ноды и заранее создавала её записи в панели: профиль, ноду и хост. Дальше эти записи мешались: домен оказывался «занят», и добавить ноду через меню не выходило, записи приходилось удалять руками. Теперь панель ставится без вопросов про ноду, а нода добавляется после, через «Добавить ноду в панель»: автоматически по SSH или вручную.
- «Установить только ноду» на сервере ноды работает как раньше: домен и Secret Key берутся из карточки ноды в панели.
- Если на панели осталась запись ноды, которая так и не подключилась, меню добавления ноды само предложит удалить старые записи и продолжить с тем же доменом.
- Живая нода при этом не трогается: предложение появится, только если нода не подключена.
- Финальный баннер после установки панели ведёт в меню добавления ноды и называет данные, которые понадобятся на её сервере.
🔧 Исправления
- «Обновить панель» мог написать «успешно обновлена» и почистить старые образы, когда пересоздание стека упало: панель оставалась лежать. Теперь запуск, остановка и обновление проверяют каждый шаг, а при неудаче скрипт пишет красным и подсказывает команду ручного подъёма.
- Xray Checker: «Обновить образы» отвечает «Обновлено» только если контейнер чекера реально поднялся.
- Шаблон страницы подписки: смена шаблона больше не рапортует «обновлено», когда контейнер страницы не встал.
- Установка «панель + нода» с подпиской: финальный баннер не покажется, пока стек не поднялся после перезапуска, вместо него ошибка и команда восстановления.
- Сайт-заглушка: редкий отказ с целевым каталогом больше не оставляет крутиться индикатор и распакованные шаблоны в
/opt.
🩹 Мелочи
- На свежих минимальных системах
ufwставится с предварительным обновлением списков пакетов, а если поставить не вышло, скрипт прямо скажет, какой порт открыть руками. - В wiki появились две статьи: серверный роутинг и SSH-доступ, с таблицами «кто какой IP видит» и примерами команд.
⬆️ Обновление
Пункт 11 меню, или:
bash <(curl -Ls https://raw.githubusercontent.com/eGamesAPI/remnawave-reverse-proxy/refs/heads/main/install_remnawave.sh)