Хотелось бы увидеть реализацию прямо в панели по настройке раздельного учета лимита трафика пользователя по конкретным нодам, а не только общий лимит трафика.
Для чего это нужно ?
Если обычные сервера зачастую безлимитные и лимит трафика служит условным ограничением для пользователей, то в случае применения CDN инфраструктуры в связке с нодой даёт конкретно пофактово тарифицируемый трафик за ГБ, который невозможно контролировать нативно без например создания отдельного пользователя, т.е. пользователь получает 2 подписки, это неудобно не владельцу сервиса, не пользователю.
Объединяйте эти две подписки в одну своим микросервисом. Было даже опенсурсное решение на гитхабе по этому поводу. Возможно даже не одно. Да и самому навайбкодить такое несложно. Кто-то даже делал форк панели + ноды + xray-core + xtls api, чтобы считать и записывать трафик по каждому инбаунду отдельно.
Задумайтесь. Запрос на эту фичу прилетает каждый божий день. Фичи до сих пор нет. Значит на то есть какие-то причины. Скорее всего этой фичи в панели и не будет.
Это не задача remnawave, это задача вашего микросервиса, писать вы его должны сами(мое имхо), все данные для этого remnawave отдает, если сильно кратко:
Создаете сквад с именем “SUPER_NODES”
Создаете таблицу в бд с именем “USERS_SUPER_NODES”
Создаете в вашем боте или сайте продажу тарифа “SELL SUPER NODES”
Когда пользователь покупает “SELL SUPER NODES” Пишите в таблицу “USERS_SUPER_NODES” купившего и добавляете его в сквад “SUPER_NODES”
Cron tasks точнее ваш microservices каждые N времени смотрит вашу таблицу “USERS_SUPER_NODES” на превышение трафика, в случаях когда трафик превышен выкидываем из сквада
Забираем статистику пользователя через GetStatsUserUsageCommand, находим в ней нужную ноду по имени
(например, «super_node») и считаем, сколько трафика юзер потратил именно на ней.
Вычитаем baseline(Тут подробнее)
baseline - это снимок «сколько трафика уже было намотано в момент покупки». Снимаем его один раз при выдаче пакета и сохраняем в БД (baselineBytes).
Лимит - сколько разрешено скушать сверх baseline (ваши 50 МБ).
Тогда:
потрачено_в_пакете = трафик_сейчас − baseline
осталось = лимит - потрачено_в_пакете
Пример:
На момент покупки у юзера было baseline = 1000 МБ трафика.
Купил пакет на лимит = 50 МБ.
Через час Remnawave показывает total = 1030 МБ.
потрачено = 1030 − 1000 = 30 МБ < 50 → ещё жив, осталось 20 МБ.
Без baseline юзер с историей сгорел бы сразу, потому что total уже был 1000 МБ.
Когда пользователь исчерпал трафик выкидываете из сквада
Это лишь пример того как это реализовано у меня, делать так же или по другому решать вам самим!
На мой взгляд в вашем рассуждении есть несостыковка. Если лимитировать трафик по нодам не является задачей панели управления нодами, тогда почему она УЖЕ имеет такой функционал, пусть и в тривиальной реализации?
Я считаю, что как раз панель управления нодами и должна уметь лимитировать трафик пользователей на те самые ноды, которыми она управляет.
А такой фичи нет, скорей всего просто потому, что из 100% пользователей такое нужно меньшему проценту и есть более приоритетные у разработчика задачи, просто руки не дошли.
вы перекладываете ответственность, задача панели лишь отдавать данные, что вы будете делать с ними решать вам самим, если панель идет таким ракурсом то это только + панели