LINUX.ORG.RU
ФорумAdmin

Трафик Шейпинг


0

0

Привет всем!
Запутался я совсем.
Есть сервак.ALTLinux Server 4.0. в нем 3 интерфейса:
1. eth0 - сеть 10.0.0.0/24 (сюда входят все клиенты)
2. eth1 - Провайдер 1 (предоставляет 5/5 Мбит)
3. eth2 - Провайдер 2. (Хост интерфейс, на котором поднимается pppoe сессия. 12/1 Мбит.)

На данный момент все клиенты ходят через один канал через NAT.
Далее клиенты будут рулиться по разным каналам примитивно по ip rule add from...

Задачи:
1. Ограничить клиентам трафик до 512/512Kbit
2. Ограничить админам трафик до 12/12Mbit
3. Ограничить локальный трафик от сервера (и к серверу) до 100Mbit.
4. Приоритезировать трафик.

Реализация:
Мною принято решение ограничивать весь траф на интерфейсе пользователей, т.е. eth0.

#!/bin/bash

TC=/sbin/tc
DEV=eth0

# Очистка
$TC qdisc del dev $DEV root

# создаем базовую дисциплину и указываем, что неопознанный траф. посылать в 980й класс.
$TC qdisc add dev $DEV root handle 1: htb default 980
# создаем основной класс, равный пропускной способности интерфейса eth0
$TC class add dev $DEV parent 1: classid 1:1 htb rate 100Mbit ceil 100Mbit
# делаем класс для локальных ресурсов
$TC class add dev $DEV parent 1:1 classid 1:100 htb rate 50Mbit ceil 50Mbit
# класс, равные пропуской способности канала первого провайдера. DOWNLOAD
$TC class add dev $DEV parent 1:1 classid 1:200 htb rate 11Mbit ceil 11Mbit
# класс, равные пропуской способности канала первого провайдера. UPLOAD
$TC class add dev $DEV parent 1:1 classid 1:300 htb rate 900Kbit ceil 900Kbit
# класс, равные пропуской способности канала второго провайдера. DOWNLOAD
$TC class add dev $DEV parent 1:1 classid 1:400 htb rate 5Mbit ceil 5Mbit
# класс, равные пропуской способности канала второго провайдера. DOWNLOAD
$TC class add dev $DEV parent 1:1 classid 1:500 htb rate 5Mbit ceil 5Mbit
# весь неопознанный трафик будет послан именно в этот класс
$TC class add dev $DEV parent 1:1 classid 1:980 htb rate 128kbit ceil 128kbit
# создаем дисциплины для классов локального трафика и дефолтного. (Sfq - делим общую пропускную способность на всех, кто участвует)
$TC qdisc add dev $DEV parent 1:100 handle 100: sfq
$TC qdisc add dev $DEV parent 1:980 handle 980: sfq


## BusTeR 10.0.0.130 DOWNLOAD
IP_BUSTER=«10.0.0.130»
RATE_BUSTER=«512kbit»
CEIL_BUSTER=«3Mbit»
##########################################################################################
# создаем основной класс для клиента, который берёт bandwidth от класса 400 (класс DOWNLOAD второго провайдера, который равен 5Mbit) и задаем скорость для клиента
$TC class add dev $DEV parent 1:400 classid 1:410 htb rate $RATE_BUSTER ceil $CEIL_BUSTER

# PRIO
# создаем классы для приоритезации трафика
# prio 1 icmp
# prio 2 udp
# prio 3 tcp из инета от 80х портов
# prio 4 весь остальной трафик
$TC class add dev $DEV parent 1:410 classid 1:411 htb rate 1kbit ceil $CEIL_BUSTER prio 1
$TC class add dev $DEV parent 1:410 classid 1:412 htb rate 1kbit ceil $CEIL_BUSTER prio 2
$TC class add dev $DEV parent 1:410 classid 1:413 htb rate 1kbit ceil $CEIL_BUSTER prio 3
$TC class add dev $DEV parent 1:410 classid 1:414 htb rate 1kbit ceil $CEIL_BUSTER prio 4
# QDISC
# создаем дисциплины (не знаю зачем, но в мануалах нашел)
$TC qdisc add dev $DEV parent 1:411 handle 411: sfq
$TC qdisc add dev $DEV parent 1:412 handle 412: sfq
$TC qdisc add dev $DEV parent 1:413 handle 413: sfq
$TC qdisc add dev $DEV parent 1:414 handle 414: sfq

#фильтры
#локальный трафик (здесь только ssh (scp))
$TC filter add dev $DEV parent 1:0 protocol ip u32 match ip protocol 6 0xff match ip sport 22 0xff flowid 1:100
$TC filter add dev $DEV parent 1:0 protocol ip u32 match ip protocol 6 0xff match ip dport 22 0xff flowid 1:100

#разбрасываем трафик по приорителтам и по классам
$TC filter add dev $DEV parent 1:0 protocol ip prio 1 u32 match ip dst $IP_BUSTER \
match ip protocol 1 0xff flowid 1:411

$TC filter add dev $DEV parent 1:0 protocol ip prio 2 u32 match ip dst $IP_BUSTER \
match ip protocol 17 0xff flowid 1:412
$TC filter add dev $DEV parent 1:0 protocol ip prio 3 u32 match ip dst $IP_BUSTER \
match ip protocol 6 0xff match ip sport 80 0xffff flowid 4:413
$TC filter add dev $DEV parent 1:0 protocol ip prio 4 u32 match ip dst $IP_BUSTER flowid 1:414


Все. Сконфигурировали. Запустили скрипт.
Да, действительно скорость закачки регулируется.
НО!
Скорость локального трафика, в данном случае скорость закачки по scp - остается на минимуме. Почему? не могу понять? Если добавить ssh в prio 1, тогда проблем нет с этим протоколом и скоростью, но не отрабатывается следующий фильтр на prio 1.

Что я делаю не так и как грамотно ограничить юзерам скорость, без зажимания локального трафика?

Резать скорость на исходящих интерфейсах?
eth1 и ppp1 ?

Как сделать это всё грамотней?


Очень много текста, лучше начинайте с простых конфигураций. Набора правил я не понял, шейпинг идёт только для исходящего (для интерфейса) трафика. То есть вешая правила на eth0 вы можете ограничить только скорость загрузки данных из интернета на компьютеры локальной сети. Конечно, в случае tcp пакты всегда идут в обе стороны и если сильно зарезать одно направление, то и в другом данные быстро идти не смогут. Но если говорить о контролируемой полосе, то нужно ограничивать на eth1 и ppp, либо добавлять IFB и перенаправлять через него входящий в eth0 трафик. Последнее позволит ограничить и скорость закачики из локальной сети на сервер.

Если добавить ssh в prio 1, тогда проблем нет с этим протоколом и скоростью, но не отрабатывается следующий фильтр на prio 1.

Какой следующий фильтр? Который icmp ограничивает? И как определено, что он не отрабатывается?

Как сделать это всё грамотней?

Идти учить матчасть по нормальной документации на английском.

mky ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.