Browse Source

fix: address PR review comments

- Remove Docker Container requirements (already in template)
- Remove Technical Details section (belongs in code only)
- Remove AI-generated translations (keep English only)
pull/2368/head
Ha Vu 6 months ago
parent
commit
a63367d443
  1. 53
      docs/content/guides/bandwidth-limiting.md
  2. 14
      src/i18n/locales/bn.json
  3. 14
      src/i18n/locales/de.json
  4. 14
      src/i18n/locales/es.json
  5. 14
      src/i18n/locales/fr.json
  6. 14
      src/i18n/locales/id.json
  7. 14
      src/i18n/locales/it.json
  8. 14
      src/i18n/locales/ko.json
  9. 14
      src/i18n/locales/pl.json
  10. 14
      src/i18n/locales/pt-BR.json
  11. 14
      src/i18n/locales/ru.json
  12. 14
      src/i18n/locales/tr.json
  13. 14
      src/i18n/locales/uk.json
  14. 14
      src/i18n/locales/zh-CN.json
  15. 14
      src/i18n/locales/zh-HK.json
  16. 14
      src/i18n/locales/zh-TW.json

53
docs/content/guides/bandwidth-limiting.md

@ -53,59 +53,6 @@ If IFB is not available:
- Upload limiting will be skipped
- A warning will display in the admin panel
### Docker Container
The container must run with:
- `--cap-add=NET_ADMIN` (required for tc commands)
- `--cap-add=SYS_MODULE` (required for IFB module loading)
Example docker-compose:
```yaml
services:
wg-easy:
image: ghcr.io/wg-easy/wg-easy
cap_add:
- NET_ADMIN
- SYS_MODULE
# ... other settings
```
## Technical Details
### TC Commands Generated
**Download (egress on wg0):**
```bash
tc qdisc add dev wg0 root handle 1: htb default 10
tc class add dev wg0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit
tc class add dev wg0 parent 1:1 classid 1:10 htb rate 100mbit ceil 100mbit
```
**Upload (ingress via IFB mirror):**
```bash
ip link add ifb0 type ifb
ip link set ifb0 up
tc qdisc add dev wg0 handle ffff: ingress
tc filter add dev wg0 parent ffff: protocol all u32 match u32 0 0 action mirred egress redirect dev ifb0
tc qdisc add dev ifb0 root handle 1: htb default 10
tc class add dev ifb0 parent 1: classid 1:1 htb rate 50mbit ceil 50mbit
tc class add dev ifb0 parent 1:1 classid 1:10 htb rate 50mbit ceil 50mbit
```
### Database Schema
Settings stored in `general_table`:
- `bandwidth_enabled` (boolean)
- `download_limit_mbps` (integer)
- `upload_limit_mbps` (integer)
### API Endpoints
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | `/api/admin/general` | Get current settings |
| POST | `/api/admin/general` | Update settings (triggers restart) |
| GET | `/api/admin/bandwidth-status` | Check IFB availability |
## Troubleshooting
### Bandwidth limits not applied

14
src/i18n/locales/bn.json

@ -148,15 +148,7 @@
"json": "JSON",
"jsonDesc": "JSON ফরম্যাটে মেট্রিক্সের রুট",
"prometheus": "Prometheus",
"prometheusDesc": "Prometheus মেট্রিক্সের রুট",
"bandwidth": "ব্যান্ডউইথ সীমাবদ্ধকরণ",
"bandwidthEnabled": "ব্যান্ডউইথ সীমাবদ্ধকরণ সক্রিয় করুন",
"bandwidthEnabledDesc": "সমস্ত VPN ট্রাফিকে গ্লোবাল ব্যান্ডউইথ সীমা প্রয়োগ করুন",
"downloadLimit": "ডাউনলোড সীমা (Mbps)",
"downloadLimitDesc": "ক্লায়েন্টদের জন্য সর্বোচ্চ ডাউনলোড গতি (0 = সীমাহীন)",
"uploadLimit": "আপলোড সীমা (Mbps)",
"uploadLimitDesc": "ক্লায়েন্টদের থেকে সর্বোচ্চ আপলোড গতি (0 = সীমাহীন)",
"ifbWarning": "আপলোড সীমাবদ্ধকরণের জন্য IFB kernel module প্রয়োজন, যা এই হোস্টে উপলব্ধ নয়"
"prometheusDesc": "Prometheus মেট্রিক্সের রুট"
},
"config": {
"connection": "সংযোগ",
@ -219,9 +211,7 @@
"general": {
"sessionTimeout": "সেশন টাইমআউট",
"metricsEnabled": "মেট্রিক্স",
"metricsPassword": "মেট্রিক্স পাসওয়ার্ড",
"bandwidthEnabled": "ব্যান্ডউইথ সীমাবদ্ধকরণ",
"bandwidthLimit": "ব্যান্ডউইথ সীমা"
"metricsPassword": "মেট্রিক্স পাসওয়ার্ড"
},
"interface": {
"cidr": "CIDR",

14
src/i18n/locales/de.json

@ -145,15 +145,7 @@
"json": "JSON",
"jsonDesc": "Pfad zu den Statistiken als JSON",
"prometheus": "Prometheus",
"prometheusDesc": "Pfad zu den Prometheus-Statistiken",
"bandwidth": "Bandbreitenbegrenzung",
"bandwidthEnabled": "Bandbreitenbegrenzung aktivieren",
"bandwidthEnabledDesc": "Globale Bandbreitenlimits auf den gesamten VPN-Datenverkehr anwenden",
"downloadLimit": "Download-Limit (Mbps)",
"downloadLimitDesc": "Maximale Download-Geschwindigkeit für Clients (0 = unbegrenzt)",
"uploadLimit": "Upload-Limit (Mbps)",
"uploadLimitDesc": "Maximale Upload-Geschwindigkeit von Clients (0 = unbegrenzt)",
"ifbWarning": "Upload-Begrenzung erfordert das IFB-Kernelmodul, das auf diesem Host nicht verfügbar ist"
"prometheusDesc": "Pfad zu den Prometheus-Statistiken"
},
"config": {
"connection": "Verbindung",
@ -216,9 +208,7 @@
"general": {
"sessionTimeout": "Sitzungszeitüberschreitung",
"metricsEnabled": "Statistiken",
"metricsPassword": "Passwort für Statistiken",
"bandwidthEnabled": "Bandbreitenbegrenzung",
"bandwidthLimit": "Bandbreitenlimit"
"metricsPassword": "Passwort für Statistiken"
},
"interface": {
"cidr": "CIDR",

14
src/i18n/locales/es.json

@ -148,15 +148,7 @@
"json": "JSON",
"jsonDesc": "Ruta para métricas en formato JSON",
"prometheus": "Prometheus",
"prometheusDesc": "Ruta para métricas de Prometheus",
"bandwidth": "Limitación de ancho de banda",
"bandwidthEnabled": "Habilitar limitación de ancho de banda",
"bandwidthEnabledDesc": "Aplicar límites globales de ancho de banda a todo el tráfico VPN",
"downloadLimit": "Límite de descarga (Mbps)",
"downloadLimitDesc": "Velocidad máxima de descarga para clientes (0 = ilimitado)",
"uploadLimit": "Límite de subida (Mbps)",
"uploadLimitDesc": "Velocidad máxima de subida desde clientes (0 = ilimitado)",
"ifbWarning": "La limitación de subida requiere el módulo del kernel IFB, que no está disponible en este host"
"prometheusDesc": "Ruta para métricas de Prometheus"
},
"config": {
"connection": "Conexión",
@ -219,9 +211,7 @@
"general": {
"sessionTimeout": "Tiempo de sesión",
"metricsEnabled": "Métricas",
"metricsPassword": "Contraseña de métricas",
"bandwidthEnabled": "Limitación de ancho de banda",
"bandwidthLimit": "Límite de ancho de banda"
"metricsPassword": "Contraseña de métricas"
},
"interface": {
"cidr": "CIDR",

14
src/i18n/locales/fr.json

@ -152,15 +152,7 @@
"json": "JSON",
"jsonDesc": "Route pour les métriques au format JSON",
"prometheus": "Prometheus",
"prometheusDesc": "Route pour les métriques Prometheus",
"bandwidth": "Limitation de bande passante",
"bandwidthEnabled": "Activer la limitation de bande passante",
"bandwidthEnabledDesc": "Appliquer des limites globales de bande passante à tout le trafic VPN",
"downloadLimit": "Limite de téléchargement (Mbps)",
"downloadLimitDesc": "Vitesse de téléchargement maximale pour les clients (0 = illimité)",
"uploadLimit": "Limite d’envoi (Mbps)",
"uploadLimitDesc": "Vitesse d’envoi maximale depuis les clients (0 = illimité)",
"ifbWarning": "La limitation d’envoi nécessite le module kernel IFB, non disponible sur cet hôte"
"prometheusDesc": "Route pour les métriques Prometheus"
},
"config": {
"connection": "Connexion",
@ -223,9 +215,7 @@
"general": {
"sessionTimeout": "Délai d'expiration de la session",
"metricsEnabled": "Métriques",
"metricsPassword": "Mot de passe métriques",
"bandwidthEnabled": "Limitation de bande passante",
"bandwidthLimit": "Limite de bande passante"
"metricsPassword": "Mot de passe métriques"
},
"interface": {
"cidr": "CIDR",

14
src/i18n/locales/id.json

@ -148,15 +148,7 @@
"json": "JSON",
"jsonDesc": "Rute untuk metrik dalam format JSON",
"prometheus": "Prometheus",
"prometheusDesc": "Rute untuk metrik Prometheus",
"bandwidth": "Pembatasan Bandwidth",
"bandwidthEnabled": "Aktifkan Pembatasan Bandwidth",
"bandwidthEnabledDesc": "Terapkan batas bandwidth global ke semua lalu lintas VPN",
"downloadLimit": "Batas Unduhan (Mbps)",
"downloadLimitDesc": "Kecepatan unduhan maksimum untuk klien (0 = tidak terbatas)",
"uploadLimit": "Batas Unggahan (Mbps)",
"uploadLimitDesc": "Kecepatan unggahan maksimum dari klien (0 = tidak terbatas)",
"ifbWarning": "Pembatasan unggahan memerlukan modul kernel IFB yang tidak tersedia di host ini"
"prometheusDesc": "Rute untuk metrik Prometheus"
},
"config": {
"connection": "Koneksi",
@ -219,9 +211,7 @@
"general": {
"sessionTimeout": "Waktu Sesi Habis",
"metricsEnabled": "Metrik",
"metricsPassword": "Kata Sandi Metrik",
"bandwidthEnabled": "Pembatasan Bandwidth",
"bandwidthLimit": "Batas Bandwidth"
"metricsPassword": "Kata Sandi Metrik"
},
"interface": {
"cidr": "CIDR",

14
src/i18n/locales/it.json

@ -148,15 +148,7 @@
"json": "JSON",
"jsonDesc": "Percorso per metriche in formato JSON",
"prometheus": "Prometheus",
"prometheusDesc": "Percorso per metriche Prometheus",
"bandwidth": "Limitazione della larghezza di banda",
"bandwidthEnabled": "Abilita limitazione della larghezza di banda",
"bandwidthEnabledDesc": "Applica limiti globali di larghezza di banda a tutto il traffico VPN",
"downloadLimit": "Limite di download (Mbps)",
"downloadLimitDesc": "Velocità massima di download per i client (0 = illimitato)",
"uploadLimit": "Limite di upload (Mbps)",
"uploadLimitDesc": "Velocità massima di upload dai client (0 = illimitato)",
"ifbWarning": "La limitazione dell'upload richiede il modulo kernel IFB, non disponibile su questo host"
"prometheusDesc": "Percorso per metriche Prometheus"
},
"config": {
"connection": "Connessione",
@ -219,9 +211,7 @@
"general": {
"sessionTimeout": "Timeout Sessione",
"metricsEnabled": "Metriche",
"metricsPassword": "Password Metriche",
"bandwidthEnabled": "Limitazione larghezza di banda",
"bandwidthLimit": "Limite larghezza di banda"
"metricsPassword": "Password Metriche"
},
"interface": {
"cidr": "CIDR",

14
src/i18n/locales/ko.json

@ -148,15 +148,7 @@
"json": "JSON",
"jsonDesc": "JSON 형식의 메트릭 경로",
"prometheus": "프로메테우스",
"prometheusDesc": "Prometheus 메트릭을 위한 경로",
"bandwidth": "대역폭 제한",
"bandwidthEnabled": "대역폭 제한 활성화",
"bandwidthEnabledDesc": "모든 VPN 트래픽에 전역 대역폭 제한 적용",
"downloadLimit": "다운로드 제한 (Mbps)",
"downloadLimitDesc": "클라이언트의 최대 다운로드 속도 (0 = 무제한)",
"uploadLimit": "업로드 제한 (Mbps)",
"uploadLimitDesc": "클라이언트의 최대 업로드 속도 (0 = 무제한)",
"ifbWarning": "업로드 제한은 IFB 커널 모듈이 필요하지만 이 호스트에서 사용할 수 없습니다"
"prometheusDesc": "Prometheus 메트릭을 위한 경로"
},
"config": {
"connection": "연결",
@ -219,9 +211,7 @@
"general": {
"sessionTimeout": "세션 타임아웃",
"metricsEnabled": "메트릭",
"metricsPassword": "메트릭 비밀번호",
"bandwidthEnabled": "대역폭 제한 활성화",
"bandwidthLimit": "대역폭 제한"
"metricsPassword": "메트릭 비밀번호"
},
"interface": {
"cidr": "CIDR",

14
src/i18n/locales/pl.json

@ -148,15 +148,7 @@
"json": "JSON",
"jsonDesc": "Ścieżka dla metryk w formacie JSON",
"prometheus": "Prometheus",
"prometheusDesc": "Ścieżka dla metryk Prometheus",
"bandwidth": "Ograniczanie przepustowości",
"bandwidthEnabled": "Włącz ograniczanie przepustowości",
"bandwidthEnabledDesc": "Zastosuj globalne limity przepustowości do całego ruchu VPN",
"downloadLimit": "Limit pobierania (Mbps)",
"downloadLimitDesc": "Maksymalna prędkość pobierania dla klientów (0 = bez limitu)",
"uploadLimit": "Limit wysyłania (Mbps)",
"uploadLimitDesc": "Maksymalna prędkość wysyłania od klientów (0 = bez limitu)",
"ifbWarning": "Ograniczanie wysyłania wymaga modułu jądra IFB, który nie jest dostępny na tym hoście"
"prometheusDesc": "Ścieżka dla metryk Prometheus"
},
"config": {
"connection": "Połączenie",
@ -219,9 +211,7 @@
"general": {
"sessionTimeout": "Limit czasu sesji",
"metricsEnabled": "Metryki",
"metricsPassword": "Hasło do metryk",
"bandwidthEnabled": "Ograniczanie przepustowości",
"bandwidthLimit": "Limit przepustowości"
"metricsPassword": "Hasło do metryk"
},
"interface": {
"cidr": "CIDR",

14
src/i18n/locales/pt-BR.json

@ -148,15 +148,7 @@
"json": "JSON",
"jsonDesc": "Rota para métricas em formato JSON",
"prometheus": "Prometheus",
"prometheusDesc": "Rota para métricas do Prometheus",
"bandwidth": "Limitação de largura de banda",
"bandwidthEnabled": "Ativar limitação de largura de banda",
"bandwidthEnabledDesc": "Aplicar limites globais de largura de banda a todo o tráfego VPN",
"downloadLimit": "Limite de download (Mbps)",
"downloadLimitDesc": "Velocidade máxima de download para clientes (0 = ilimitado)",
"uploadLimit": "Limite de upload (Mbps)",
"uploadLimitDesc": "Velocidade máxima de upload dos clientes (0 = ilimitado)",
"ifbWarning": "A limitação de upload requer o módulo de kernel IFB, que não está disponível neste host"
"prometheusDesc": "Rota para métricas do Prometheus"
},
"config": {
"connection": "Conexão",
@ -219,9 +211,7 @@
"general": {
"sessionTimeout": "Tempo limite da sessão",
"metricsEnabled": "Métricas",
"metricsPassword": "Senha de métricas",
"bandwidthEnabled": "Limitação de largura de banda",
"bandwidthLimit": "Limite de largura de banda"
"metricsPassword": "Senha de métricas"
},
"interface": {
"cidr": "CIDR",

14
src/i18n/locales/ru.json

@ -152,15 +152,7 @@
"json": "JSON",
"jsonDesc": "Путь для метрик в формате JSON",
"prometheus": "Prometheus",
"prometheusDesc": "Путь для метрик Prometheus",
"bandwidth": "Ограничение пропускной способности",
"bandwidthEnabled": "Включить ограничение пропускной способности",
"bandwidthEnabledDesc": "Применить глобальные ограничения пропускной способности ко всему VPN-трафику",
"downloadLimit": "Лимит загрузки (Mbps)",
"downloadLimitDesc": "Максимальная скорость загрузки для клиентов (0 = без ограничений)",
"uploadLimit": "Лимит выгрузки (Mbps)",
"uploadLimitDesc": "Максимальная скорость выгрузки от клиентов (0 = без ограничений)",
"ifbWarning": "Ограничение выгрузки требует модуль ядра IFB, который недоступен на этом хосте"
"prometheusDesc": "Путь для метрик Prometheus"
},
"config": {
"connection": "Соединение",
@ -223,9 +215,7 @@
"general": {
"sessionTimeout": "Время жизни сессии",
"metricsEnabled": "Метрики",
"metricsPassword": "Пароль для метрик",
"bandwidthEnabled": "Ограничение пропускной способности",
"bandwidthLimit": "Лимит пропускной способности"
"metricsPassword": "Пароль для метрик"
},
"interface": {
"cidr": "CIDR",

14
src/i18n/locales/tr.json

@ -148,15 +148,7 @@
"json": "JSON",
"jsonDesc": "JSON formatında metrikler için rota",
"prometheus": "Prometheus",
"prometheusDesc": "Prometheus metrikleri için rota",
"bandwidth": "Bant Genişliği Sınırlaması",
"bandwidthEnabled": "Bant Genişliği Sınırlamasını Etkinleştir",
"bandwidthEnabledDesc": "Tüm VPN trafiğine global bant genişliği limitleri uygula",
"downloadLimit": "İndirme Limiti (Mbps)",
"downloadLimitDesc": "İstemciler için maksimum indirme hızı (0 = sınırsız)",
"uploadLimit": "Yükleme Limiti (Mbps)",
"uploadLimitDesc": "İstemcilerden maksimum yükleme hızı (0 = sınırsız)",
"ifbWarning": "Yükleme sınırlaması IFB çekirdek modülü gerektirir ve bu ana makinede mevcut değildir"
"prometheusDesc": "Prometheus metrikleri için rota"
},
"config": {
"connection": "Bağlantı",
@ -219,9 +211,7 @@
"general": {
"sessionTimeout": "Oturum Zaman Aşımı",
"metricsEnabled": "Metrikler",
"metricsPassword": "Metrik Şifresi",
"bandwidthEnabled": "Bant Genişliği Sınırlaması",
"bandwidthLimit": "Bant Genişliği Limiti"
"metricsPassword": "Metrik Şifresi"
},
"interface": {
"cidr": "CIDR",

14
src/i18n/locales/uk.json

@ -152,15 +152,7 @@
"json": "JSON",
"jsonDesc": "Маршрут для метрик у форматі JSON",
"prometheus": "Prometheus",
"prometheusDesc": "Маршрут для метрики Prometheus",
"bandwidth": "Обмеження пропускної здатності",
"bandwidthEnabled": "Увімкнути обмеження пропускної здатності",
"bandwidthEnabledDesc": "Застосувати глобальні обмеження пропускної здатності до всього VPN-трафіку",
"downloadLimit": "Ліміт завантаження (Mbps)",
"downloadLimitDesc": "Максимальна швидкість завантаження для клієнтів (0 = без обмежень)",
"uploadLimit": "Ліміт вивантаження (Mbps)",
"uploadLimitDesc": "Максимальна швидкість вивантаження від клієнтів (0 = без обмежень)",
"ifbWarning": "Обмеження вивантаження потребує модуль ядра IFB, який недоступний на цьому хості"
"prometheusDesc": "Маршрут для метрики Prometheus"
},
"config": {
"connection": "З'єднання",
@ -223,9 +215,7 @@
"general": {
"sessionTimeout": "Час очікування сеансу",
"metricsEnabled": "Метрики",
"metricsPassword": "Пароль метрик",
"bandwidthEnabled": "Обмеження пропускної здатності",
"bandwidthLimit": "Ліміт пропускної здатності"
"metricsPassword": "Пароль метрик"
},
"interface": {
"cidr": "CIDR",

14
src/i18n/locales/zh-CN.json

@ -152,15 +152,7 @@
"json": "JSON格式",
"jsonDesc": "获取JSON格式的监控数据路由",
"prometheus": "Prometheus格式",
"prometheusDesc": "获取Prometheus格式监控数据的路由",
"bandwidth": "带宽限制",
"bandwidthEnabled": "启用带宽限制",
"bandwidthEnabledDesc": "对所有VPN流量应用全局带宽限制",
"downloadLimit": "下载限制 (Mbps)",
"downloadLimitDesc": "客户端最大下载速度(0 = 不限制)",
"uploadLimit": "上传限制 (Mbps)",
"uploadLimitDesc": "客户端最大上传速度(0 = 不限制)",
"ifbWarning": "上传限制需要IFB内核模块,但该模块在此主机上不可用"
"prometheusDesc": "获取Prometheus格式监控数据的路由"
},
"config": {
"connection": "连接设置",
@ -223,9 +215,7 @@
"general": {
"sessionTimeout": "会话超时",
"metricsEnabled": "启用监控",
"metricsPassword": "监控密码",
"bandwidthEnabled": "启用带宽限制",
"bandwidthLimit": "带宽限制值"
"metricsPassword": "监控密码"
},
"interface": {
"cidr": "CIDR",

14
src/i18n/locales/zh-HK.json

@ -146,15 +146,7 @@
"json": "JSON",
"jsonDesc": "JSON格式指標的路由",
"prometheus": "Prometheus",
"prometheusDesc": "Prometheus指標的路由",
"bandwidth": "頻寬限制",
"bandwidthEnabled": "啟用頻寬限制",
"bandwidthEnabledDesc": "對所有VPN流量應用全局頻寬限制",
"downloadLimit": "下載限制 (Mbps)",
"downloadLimitDesc": "客戶端最大下載速度(0 = 不限制)",
"uploadLimit": "上傳限制 (Mbps)",
"uploadLimitDesc": "客戶端最大上傳速度(0 = 不限制)",
"ifbWarning": "上傳限制需要IFB核心模組,但此主機上未能使用"
"prometheusDesc": "Prometheus指標的路由"
},
"config": {
"connection": "連線",
@ -217,9 +209,7 @@
"general": {
"sessionTimeout": "工作階段逾時",
"metricsEnabled": "指標",
"metricsPassword": "指標密碼",
"bandwidthEnabled": "啟用頻寬限制",
"bandwidthLimit": "頻寬限制值"
"metricsPassword": "指標密碼"
},
"interface": {
"cidr": "CIDR",

14
src/i18n/locales/zh-TW.json

@ -152,15 +152,7 @@
"json": "JSON",
"jsonDesc": "提供 JSON 格式計量的路由",
"prometheus": "Prometheus",
"prometheusDesc": "提供 Prometheus 計量的路由",
"bandwidth": "頻寬限制",
"bandwidthEnabled": "啟用頻寬限制",
"bandwidthEnabledDesc": "對所有 VPN 流量套用全域頻寬限制",
"downloadLimit": "下載限制 (Mbps)",
"downloadLimitDesc": "用戶端最大下載速度(0 = 不限制)",
"uploadLimit": "上傳限制 (Mbps)",
"uploadLimitDesc": "用戶端最大上傳速度(0 = 不限制)",
"ifbWarning": "上傳限制需要 IFB 核心模組,但此主機上無法使用"
"prometheusDesc": "提供 Prometheus 計量的路由"
},
"config": {
"connection": "連線",
@ -223,9 +215,7 @@
"general": {
"sessionTimeout": "工作階段逾時",
"metricsEnabled": "計量",
"metricsPassword": "計量密碼",
"bandwidthEnabled": "啟用頻寬限制",
"bandwidthLimit": "頻寬限制值"
"metricsPassword": "計量密碼"
},
"interface": {
"cidr": "CIDR",

Loading…
Cancel
Save