Как можно установить ограничения на скорость трафика для каждого локального IP-адреса (клиента) в OpenVPN на Ubuntu?

Каким образом можно установить ограничения на скорость трафика для каждого локального IP-адреса (клиента) в OpenVPN на Ubuntu?
  • 28 августа 2024 г. 1:44
Ответы на вопрос 2
Установка ограничений на скорость трафика для каждого клиента в OpenVPN можно осуществить с помощью QoS (Quality of Service) на уровне сетевого интерфейса или с использованием механизмов, таких как `iptables` и `tc` (traffic control). Важно помнить, что OpenVPN должен работать с правами суперпользователя для применения подобных настроек.

### Способ 1: Использование `tc` 

1. **Установите необходимые пакеты:**

   Убедитесь, что у вас установлен пакет `iproute2`, который предоставляет утилиту `tc`.

   ```bash
   sudo apt-get update
   sudo apt-get install iproute2
   ```

2. **Создайте скрипт для настройки `tc`:**

   Вы можете создать скрипт, который будет устанавливать ограничения трафика на основе IP-адреса клиента. Для этого, например, создайте файл `tc-script.sh`:

   ```bash
   sudo nano /etc/openvpn/tc-script.sh
   ```

   Вставьте следующий код, подставив ваши значения:

   ```bash
   #!/bin/bash

   interface=YOUR_TUNNEL_INTERFACE   # Например, tun0
   client_ip=$1                       # IP-адрес клиента
   rate_limit="1mbit"                 # Ограничение по скорости

   # Сброс существующих правил
   tc q disc del dev $interface root 2> /dev/null
   tc qdisc add dev $interface root handle 1: htb default 30
   tc class add dev $interface parent 1: classid 1:1 htb rate $rate_limit
   tc filter add dev $interface protocol ip parent 1:0 prio 1 u32 match ip dst $client_ip flowid 1:1
   ```

   Не забудьте заменить `YOUR_TUNNEL_INTERFACE` на название вашего интерфейса OpenVPN (например, `tun0`).

3. **Сделайте скрипт исполняемым:**

   ```bash
   sudo chmod +x /etc/openvpn/tc-script.sh
   ```

4. **Свяжите скрипт с OpenVPN:**

   В конфигурационном файле вашего сервера OpenVPN (например, `/etc/openvpn/server.conf`), добавьте строчку для вызова вашего скрипта при подключении клиента:

   ```bash
   client-connect /etc/openvpn/tc-script.sh
   ```

### Способ 2: Использование `iptables`

Хотя `iptables` в основном используется для фильтрации, вы также можете использовать его вместе с `tc` для более сложных сценариев.

1. **Создайте `iptables` правила, которые будут метить пакеты:**

   Пример команды для метки пакетов с определённым IP-адресом клиента:

   ```bash
   sudo iptables -t mangle -A POSTROUTING -s CLIENT_IP -j MARK --set-mark 1
   ```

   Замените `CLIENT_IP` на IP-адрес вашего клиента.

2. **Настройте `tc` так же, как описано ранее, но добавьте фильтр по метке:**

   Измените фильтр `tc` в скрипте так, чтобы использовать `fw-mark`:

   ```bash
   tc filter add dev $interface protocol ip parent 1:0 prio 1 handle 1 fw flowid 1:1
   ```

### Примечания

- Обязательно протестируйте настройки, чтобы убедиться, что ограничения работают корректно. 
- Настройки могут отличаться в зависимости от вашего окружения и версии Ubuntu.
- Для более точной настройки, вероятно, вам придется изменить значение `rate_limit` на то, что соответствует вашим требованиям. 

С помощью описанных методов вы сможете установить ограничения на скорость трафика для каждого клиента в вашем OpenVPN-сервере.
не знаю, но можно, 
даже на винде есть такая функция(уже точно не помню, но что то через конфиги(это даже в графическом ифейсе,
сам сижу под линухом уже лет 10-12,
но этого мне не было нужно, поэтому не скажу
Похожие вопросы