Установка ограничений на скорость трафика для каждого клиента в 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-сервере.