Настройка VPN-серверов на VPS: ноды Marzban и Remnawave для двух VPN-сервисов, переезд на 8 новых серверов за 2 дня, установка в Docker одним скриптом
Настройка VPN-серверов на VPS для владельца двух VPN-сервисов по подписке: ноды панелей Marzban и Remnawave на новых серверах, установка в Docker одним скриптом и проверка каждой ноды до ввода. Пользователям хватило обновить подписку в приложении.
У каждого сервиса своя панель управления нодами и свой Telegram-бот. Почти все ноды разом перестали работать: старые серверы стояли у одного хостера, их адреса оказались недоступны для пользователей. Задача - за 2 дня переселить ноды на новые серверы, не трогая пользователей, ботов, кассу и единственную живую ноду.
Что сделано:
- 8 новых нод: в Marzban 3 новые и прежняя живая, в Remnawave 4 и резервная, два хостера в 4 странах Европы;
- Marzban: новые серверы добавлены хостами к инбаунду живой ноды, конфиг ядра не менялся, живая нода ни разу не перезапустилась;
- Remnawave: обновлены 4 профиля конфигурации, адреса нод и хостов заменены;
- setup-node.sh: один скрипт на обе панели, 4-6 минут на ноду - Docker, BBR, фаервол только для своей панели, проверка TLS 1.3 и h2, секрет в .env с правами 600;
- каждый новый адрес проверен на доступность из сетей пользователей до установки, каждая нода - загрузкой 10 МБ через ключ тестового пользователя;
- версии ядра зафиксированы: новые не принимают текущие ссылки пользователей;
- по ходу: панель Marzban ходит к нодам с основного IP сервера (нашёл через tcpdump), fix-ip.sh меняет адрес без обрыва SSH, сбойный IPv6 отключён хуком ifupdown.
Результат: все 9 нод работают, заказчик проверил обе подписки и ответил «Все ок». 2 дня от резерва денег до приёмки, один исполнитель, около 635 строк скриптов, инструкция на 60 шагов. Честно о минусах: мониторинга и автоматического переключения нод нет, их я предложил следующим шагом.
Стек: Xray, VLESS + Reality, Marzban, Remnawave, Docker, Ubuntu 24.04, UFW, Bash, Python.