Предлагаю добавить возможность настройки шейпинга с помощью утилиты tc непосредственно в панели управления.
Сейчас вся настройка выполняется через отдельные скрипты, однако было бы значительно удобнее управлять этим функционалом прямо из панели.
В моём сервисе, например, реализовано отслеживание подключений к порту 443. Для всех обнаруженных IP-адресов применяется ограничение исходящего трафика (outbound) до 100 Мбит/с. Кроме того, существует отдельный список IP-адресов, для которых используется более строгое ограничение — до 20 Мбит/с.
При этом сама панель уже знает IP-адреса клиентов и понимает, подключён конкретный клиент в данный момент или нет. Поэтому реализация такого механизма непосредственно в панели могла бы получиться намного проще, удобнее и эффективнее, чем вариант с внешними скриптами.
UPD: Пояснение. Ограничение в 100 Мбит/с применяется отдельно к каждому IP-адресу. То есть каждый пользователь ограничен скоростью до 100 Мбит/с и не сможет занять канал выше этого значения.
А что если юзер сидит за CGNAT? Кажется, что стоит это делать на уровне юзера в xray. Идея, безусловно, хорошая, но не на уровне TCP/IP, считаю я.
Уже были issue:
https://github.com/XTLS/Xray-core/issues/6150
https://github.com/XTLS/Xray-core/issues/3667
В идеале, я понимаю, что такой механизм стоило бы реализовать непосредственно в ядре Xray, чтобы шейпинг можно было применять на уровне конкретных пользователей. Но за неимением такой возможности это можно реализовать на уровне TCP/IP.
Даже если пользователь находится за CGNAT, такой подход всё равно может быть практически полезен. Внешний IP в этом случае действительно может быть общим для нескольких абонентов, но это не обязательно означает слишком широкую область вроде целого города — всё зависит от архитектуры сети конкретного провайдера (по крайней мере в РФ). Поэтому в ряде случаев такой уровень идентификации всё ещё может быть достаточно полезным для управления трафиком.
При этом шейпинг необязательно использовать как постоянное ограничение для всех. Его можно применять, например, только для отсечения пикового трафика, либо по умолчанию держать выключенным и включать выборочно только для определённых пользователей или групп, где это действительно необходимо. Если например пользователь что-то начал скачивать и временно применить политику на 20 Мбит/с
Вообще в свое время натыкался на проект вот этот
На сколько вайб код, а так же эффективность такого подхода - подсказать не могу, надо смотреть, а я так далеко не разбирался и вообще давно на полку отложил
Может, стоило бы просмотреть репозиторий, и кому-то придет идея как можно это сделать либо нативно в панели, либо поддерживать подобный тул сделав форк или переписав с нуля
В репозитории находятся shell-скрипты, похожие на те, что я использую. Однако это обычные скрипты + ansible. Внедрение такого функционала в панель упростило бы реализацию. Идею я вкинул, но тут не мне уже решать)
По сути реализовать это можно плагином, как TorrentBlocker. Возможно сам займусь этим, если время появится