Skip to content

feat: per-peer speed limit (Mbps, step 0.1, 0 = unlimited) for AmneziaWG - #106

Open
leonidorlov-hash wants to merge 2 commits into
PRVTPRO:mainfrom
leonidorlov-hash:feat/peer-speed-limit
Open

feat: per-peer speed limit (Mbps, step 0.1, 0 = unlimited) for AmneziaWG#106
leonidorlov-hash wants to merge 2 commits into
PRVTPRO:mainfrom
leonidorlov-hash:feat/peer-speed-limit

Conversation

@leonidorlov-hash

Copy link
Copy Markdown
Contributor

Что добавляет PR

Возможность задать каждому пиру AmneziaWG индивидуальный лимит скорости в Мбит/с (шаг 0.1, 0 = без лимита).

Как работает

  • managers/awg_manager.py — новый метод set_speed_limit():
    • egress: tc qdisc htb на интерфейсе awg0, класс с rate/ceil для IPv4 и IPv6 адреса пира
    • ingress: tc qdisc ingress + policer на пир-IP
    • лимиты сохраняются в flat-файл bwlimits рядом с clientsTable и автоматически применяются при старте контейнера (хук в start.sh)
    • применение вызывается из _save_clients_table — лимиты переживают добавление/удаление пиров и пересоздание интерфейса
  • ХранениеuserData.maxSpeed в clientsTable, как и остальные пользовательские поля пира
  • app.pyRenameConnectionRequest.max_speed (float, -1 = не менять); api_rename_connection применяет лимит через set_speed_limit, ошибки tc возвращаются как speed_warning в ответе (rename при этом не падает)
  • UI (templates/server.html):
    • бейдж ⚡∞ / ⚡X Mbps на карточке пира (только для AWG-протоколов)
    • в диалоге переименования — поле скорости с подписями полей «Название» / «Лимит скорости (0 = без лимита)», step=0.1
  • Переводы: en / ru / fr / fa / zh

Совместимость

  • tc присутствует в образе amneziavpn/amneziawg-go (проверено)
  • Если менеджер не поддерживает set_speed_limit (кастомные сборки), панель молча пропускает (hasattr-проверка)
  • Работает и на удалённых серверах: лимит применяется внутри контейнера инстанса по SSH

Тест

Проверено на живом сервере (панель на одном хосте, инстанс AWG 2.0 на другом): установлен лимит 1 Мбит/с через UI → реальная скорость пира резалась до ~1 Мбит/с. Снятие лимита (0) восстанавливает полную скорость.

- awg_manager: set_speed_limit() applies tc HTB (egress) + ingress policer
  inside container for peer IPv4/IPv6; limits persisted to bwlimits file and
  re-applied on container start
- maxSpeed stored in clientsTable userData
- UI: speed badge on peer card, speed field with label in rename dialog
- translations: en/ru/fr/fa/zh
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant