Как ограничить исходящий трафик по IP-адресу с использованием Linux TC

Вопрос или проблема

Я хочу ограничить исходящий трафик по IP-адресу. Например, у меня есть сетевой интерфейс eth0, имеющий пропускную способность 1 Гбит/с.

Я хочу ограничить весь сетевой интерфейс до 1 Мбит/с для каждого целевого IP-адреса.

Например, 1 Мбит/с для 192.168.1.1 и 1 Мбит/с для 192.168.1.2

В настоящее время я использую wondershaper с этой командой:

wondershaper eth0 1024[outbound traffic] 1024000[inbound traffic]

Но это ограничивает весь сетевой интерфейс, и не будет разделенного трафика для каждого IP-адреса.

Вам может понадобиться CLASSIFY от iptables. Смотрите
http://www.fyzix.net/index.php?title=Traffic_shaping_with_tc_and_iptables

Ответ или решение

Для ограничения исходящего трафика на уровне IP-адреса в системе Linux с использованием инструментов tc (traffic control), необходимо выполнить несколько шагов. В отличие от решения с wondershaper, которое обрабатывает весь интерфейс как единое целое, подход с использованием tc позволяет более точно контролировать полосы пропускания для каждого отдельного IP-адреса.

Шаг 1: Установка необходимых инструментов

Убедитесь, что у вас установлены нужные пакеты:

sudo apt-get install iproute2
sudo apt-get install iptables

Шаг 2: Очистка предыдущих конфигураций

Перед тем как настраивать новую конфигурацию, рекомендуется очистить предыдущие настройки tc:

sudo tc qdisc del dev eth0 root

Шаг 3: Настройка корневой очереди

Создайте корневую очередь с установленной длиной:

sudo tc qdisc add dev eth0 root handle 1: htb default 12

Шаг 4: Создание класса для общего трафика

Создайте класс, который будет включать весь трафик и ограничить его до 1 Гбит/с:

sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 1Gbit ceil 1Gbit

Шаг 5: Создание классов для отдельных IP-адресов

Теперь создадим классы для каждого IP-адреса с ограничением в 1 Мбит/с:

sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 1Mbit ceil 1Mbit
sudo tc class add dev eth0 parent 1:1 classid 1:11 htb rate 1Mbit ceil 1Mbit

Шаг 6: Настройка фильтров для маршрутизации

Создайте правила фильтрации с использованием iptables для распределения трафика по созданным классам:

# Для IP 192.168.1.1
sudo iptables -t mangle -A POSTROUTING -d 192.168.1.1 -j CLASSIFY --set-class 1:10

# Для IP 192.168.1.2
sudo iptables -t mangle -A POSTROUTING -d 192.168.1.2 -j CLASSIFY --set-class 1:11

Шаг 7: Проверка и мониторинг

Вы можете проверить свою конфигурацию, используя следующую команду:

tc -s qdisc ls dev eth0

Эта команда покажет статистику по очередям, что позволит оценить, как применяется ограничение.

Рекомендации по дальнейшему использованию

  1. Логирование: Для более эффективного анализа трафика рекомендуется установить и настроить средства мониторинга, такие как vnstat, чтобы отслеживать использование полосы пропускания.

  2. Регулярная проверка: Периодически проверяйте настройки и производительность сети, чтобы в случае изменений в нагрузке можно было внести соответствующие коррективы.

  3. Интеграция с другими инструментами: Рассмотрите возможность интеграции с программами для анализа и управления трафиком, такими как nload или iftop.

Таким образом, следуя вышеуказанным шагам, вы сможете эффективно ограничить исходящий трафик для каждого IP-адреса, избегая единичного ограничения всего интерфейса.

Оцените материал
Добавить комментарий

Капча загружается...