Привет всем!
Запутался я совсем.
Есть сервак.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 ?
Как сделать это всё грамотней?
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Шейпинг трафика Vlan (2014)
- Форум Настройка QoS, приоритезация трафика. (2013)
- Форум Шейпинг трафика (2016)
- Форум [на рецензию] Traffic Control (TC) (2011)
- Форум htb - разграничение трафика (2005)
- Форум Шейпинг трафика (2017)
- Форум Приоритезация и динамический шейпинг SRR (2009)
- Форум Помогите с TC (2015)
- Форум [tc][htb] два варианта реализации, но ни один не работает так, как нужно (2011)
- Форум шейпер tc, фильтр для Ifb (2013)