Прослойка подписок для панели Remnawave: встаёт между клиентом и панелью, даёт российский домен подписки, показывает кто и с чего подключается, и позволяет управлять выдачей, не трогая саму панель.
Один статический бинарник без зависимостей. SQLite из коробки, MySQL для крупных установок.
Warning
Статус: ранняя версия. Ставьте на тестовом контуре, прежде чем выпускать на клиентов. Функция грейса меняет данные в живой панели и по умолчанию выключена: включайте осознанно.
Содержание: Что решает · Возможности · Как выглядит · Установка · Настройка · Токен панели · Совместимость · Помощь · Разработка
Подписка в Remnawave живёт по адресу панели. Если панель за Cloudflare или за границей, её адрес рано или поздно перестаёт открываться из России, и подписка не обновляется у всех разом. При этом узлы работают, а пользователь видит «подписка недоступна» и пишет в поддержку.
Ещё панель не отвечает на ежедневные вопросы: с какого приложения пришёл клиент, сколько у него устройств, кто раздал одну подписку на общежитие. И отдаёт всем одинаковые заголовки, хотя приложения понимают разное.
MultiGate закрывает это, оставаясь снаружи панели.
- Два режима: зеркало подписки на российском домене либо самостоятельная выдача через API панели. Переключается в админке без перезапуска.
- Кто пришёл: определение приложения, его версии, ядра и устройства по User-Agent. Для приложений, которые не шлют свои заголовки, идентификатор устройства собирается из User-Agent.
- Журнал запросов с фильтрами по пользователю, устройству, адресу, приложению и решению.
- Блокировки пользователя целиком или отдельного устройства. Локальные: панель не трогается.
- Правила ответа под конкретные приложения: подмена названия профиля, ссылки поддержки, интервала обновления.
- Грейс для истёкших подписок: временный сквад вместо полного отключения, со снимком для отката.
- Пул конфигов WireGuard и AmneziaWG с привязкой к устройству.
- Страница-маскировка для тех, кто зашёл браузером: адрес не выглядит как сервис подписок.
- Ретрансляция вебхуков панели на несколько адресов, каждому своя подпись.
- Чат поддержки с пересылкой в Telegram, с возможностью указать своё зеркало Bot API.
- Админка со всем перечисленным, встроенная в бинарник.
Подробности устройства: docs/architecture.md. Разбор с примерами из практики: статья на VPN HUB — доступ PRO.
Ещё экраны админки — журнал, пользователи, правила, настройки
Журнал запросов. Кто пришёл, с какого приложения и устройства, что получил в ответ.
Пользователи. Устройства, приложения, блокировки — без захода в панель.
Правила ответа. Заголовки и параметры подписки под конкретное приложение.
Переопределения. Точечные исключения для отдельных пользователей.
Настройки. Режим, панель, домен, грейс, вебхуки, чат.
Самый прямой путь, пока проект в ранней стадии: собирается одной командой, ничего лишнего в систему не ставит.
git clone https://github.com/qwe8nxtroud/multigate.git
cd multigate
make build
./multigate --listen 127.0.0.1:8080 --data ./datacurl -fsSL https://raw.githubusercontent.com/qwe8nxtroud/multigate/main/deploy/install.sh -o install.sh
sudo bash install.shУстановщик ставит один бинарник, заводит системного пользователя и юнит systemd. Он не трогает ваш веб-сервер: не сносит nginx, не выпускает сертификаты, не правит чужие конфигурации. В конце печатает готовые куски конфигурации для nginx и Caddy.
Обновление — только sudo bash install.sh --update: эта ветка делает резервную копию
бинарника и откатывается сама, если новая версия не поднялась. Повторный запуск без флага
перезаписывает бинарник без страховки.
curl -fsSL https://raw.githubusercontent.com/qwe8nxtroud/multigate/main/deploy/docker-compose.yml -o docker-compose.yml
# задайте MULTIGATE_PANEL_TOKEN и MULTIGATE_ADMIN_PASSWORD
docker compose up -dNote
Образ ghcr.io/qwe8nxtroud/multigate:v1 появляется в GHCR после первого релиза
(git tag v1.0.0 && git push origin v1.0.0), и пакет нужно один раз переключить
в публичные: Packages → multigate → Package settings → Change visibility → Public.
Пока этого не сделано, docker compose up -d отвечает error from registry: denied.
Обходной путь без реестра — собрать образ на самом сервере:
make docker VERSION=v1 && docker compose up -dПрослойка слушает 127.0.0.1:8080. Наружу её выставляет тот же обратный прокси,
который уже обслуживает панель.
Всё, кроме адреса прослушивания и пути к базе, настраивается в админке и хранится в базе. Переменные окружения нужны только для первого запуска, чтобы контейнер поднялся без ручного мастера:
| Переменная | Назначение |
|---|---|
MULTIGATE_LISTEN |
адрес и порт, по умолчанию 127.0.0.1:8080 |
MULTIGATE_DATA_DIR |
каталог данных, по умолчанию /var/lib/multigate |
MULTIGATE_DB |
DSN базы: sqlite:///путь/multigate.db или mysql://user:pass@host/db |
MULTIGATE_MODE |
режим при первом запуске: mirror или panel |
MULTIGATE_PANEL_URL |
адрес API панели |
MULTIGATE_PANEL_TOKEN |
токен API панели |
MULTIGATE_MIRROR_TARGET |
домен origin панели для режима зеркала |
MULTIGATE_DOMAIN |
домен самой прослойки |
MULTIGATE_ADMIN_USER MULTIGATE_ADMIN_PASSWORD |
учётные данные админки при первом запуске |
MULTIGATE_LOG_LEVEL |
debug, info, warn, error |
Эти значения применяются один раз, на пустой базе. Дальше настройки живут в базе, и перезапуск не затирает то, что вы поменяли в админке.
Прослойке нужен токен API Remnawave. Выдавайте токен с минимально необходимыми правами: на панели 2.8.0 и новее права ограничиваются при создании токена.
Токен хранится в базе прослойки. Это значит, что доступ к серверу прослойки равносилен доступу к токену панели: держите базу на своём сервере, ограничьте права токена и не выставляйте админку в интернет без нужды. Подробнее — SECURITY.md.
| Панель Remnawave | 2.7.4 и новее, включая 3.x |
| Клиенты | Happ, v2rayNG, Streisand, Hiddify, NekoBox, Clash Meta и Verge, FlClash, Shadowrocket, sing-box, Karing и другие |
| Форматы подписки | base64, обычный список, Clash (YAML), sing-box (JSON) |
| Архитектуры | linux/amd64, linux/arm64 |
| База | SQLite (по умолчанию), MySQL или MariaDB |
|
Сообщество VPN HUB в Telegram: вопросы по установке и настройке, разбор проблем по горячим следам, анонсы обновлений. Открыто для всех. |
База знаний по запуску и обслуживанию коммерческого VPN-сервиса: панель, узлы, маскировка, приём платежей, работа с блокировками. |
Нашли ошибку — заведите задачу. Нашли уязвимость — не в публичную задачу, а по SECURITY.md. Хотите поучаствовать — CONTRIBUTING.md.
make check # go vet и тесты
make test # только тесты
make dist # архивы под linux/amd64 и linux/arm64
make docker # образMultiGate сделан в VPN HUB: база знаний и сообщество для тех, кто запускает и держит коммерческий VPN-сервис.
Ещё продукты VPN HUB для той же задачи:
- MultiScript — VPN-сервис под ключ: панель Remnawave, ноды и бот продаж разворачиваются из одного меню.
- MultiRoller — чистые IP, которых нет у конкурентов.
MIT.
Проект написан с нуля и не содержит кода других решений. Совпадения в наборе возможностей объясняются тем, что задачи у прослоек подписки одинаковые: протокол Remnawave и поведение клиентских приложений заданы снаружи.

