LINUX.ORG.RU
ФорумAdmin

шейпим трафик, используя tc


1

3

trafic control (tc) - один из самых труднопонимаемых для меня инструментов. Помогите, пожалуйста, разобраться.
Из того, что нашарил в рунете, самые вменяемые для понимания статьи:
http://www.xakep.ru/post/49421/default.asp?print=true
http://unixforum.org/index.php?showtopic=123039

На сколько я понял, в tc cуществуют очереди, классы и фильтры. Очереди - это компоненты ядра, ответственные за очерёдность прохождения пакетов. Пакеты в очереди можно задерживать - это и есть шейпинг.

Просматриваю очереди пакетов на сервере:

gadminko@gate:~$ sudo tc qdisc show
qdisc pfifo_fast 0: dev eth0 root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev eth1 root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev eth2 root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
Все три сетевых интерфейса управляются очередями pfifo_fast, которая является неуправляемой. А наша задача - получить возможность управлять трафиком, заменив pfifo_fast на htb, что и делаю:
adminko@gate:~$ sudo tc qdisc add dev eth0 root handle 1: htb default 20
adminko@gate:~$ sudo tc qdisc add dev eth1 root handle 1: htb default 20
adminko@gate:~$ sudo tc qdisc add dev eth2 root handle 1: htb default 20
adminko@gate:~$ sudo tc class add dev eth0 parent 1: classid 1:1 htb 100mbps ceil 100mbps
adminko@gate:~$ sudo tc class add dev eth1 parent 0: classid 1:1 htb 100mbps ceil 100mbps
adminko@gate:~$ sudo tc class add dev eth2 parent 0: classid 1:1 htb 100mbps ceil 100mbps
Это я делаю как написано в руководстве, на которое сослался. При этом, к каждой очереди, классу или фильтру можно ссылаться указывая его хэндл в формате major:minor, символьное именование не предусмотрено.

И тут возникает первый вопрос: почему при подключении очередей htb мы указали умолчальный класс 20, но последующие команды описывают классы с хэндлом 1:1, а не 1:20?
Дальше, смотрим что получилось:
adminko@gate:~$ sudo tc qdisc show
qdisc htb 1: dev eth0 root refcnt 2 r2q 10 default 20 direct_packets_stat 142
qdisc htb 1: dev eth1 root refcnt 2 r2q 10 default 20 direct_packets_stat 332
qdisc htb 1: dev eth2 root refcnt 2 r2q 10 default 20 direct_packets_stat 42
adminko@gate:~$ sudo tc class show dev eth0
class htb 1:1 root prio 0 rate 800000Kbit ceil 800000Kbit burst 1600b cburst 1600b
adminko@gate:~$ sudo tc class show dev eth1
class htb 1:1 root prio 0 rate 800000Kbit ceil 800000Kbit burst 1600b cburst 1600b
adminko@gate:~$ sudo tc class show dev eth2
class htb 1:1 root prio 0 rate 800000Kbit ceil 800000Kbit burst 1600b cburst 1600b

Собственно вопросы: почему 800000Kbit, а не 100000 и даже не 102400? Что такое: ceil, burst, cburst, refcnt, r2q?
Теперь о задачах. eth0 - это Интернет, к eth1 подключены отделы, к eth2 - арендаторы. Задача - арендаторам сделать трафик 10Мбит/c, отделам - 5Мбит/c, привелегированным отделам - 30Мбит/с.
adminko@gate:~$ sudo tc class add dev eth2 parent 1:1 classid 1:14 htb rate 10mbps
adminko@gate:~$ sudo tc qdisc add dev eth2 parent 1:14 handle 40:0 sfq perturb 10
adminko@gate:~$ sudo tc filter add dev eth2 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.48.0/24 flowid 1:14

Вопросы: почему класс 1:14 должен являться дочерним классом класса 1:1, а не расти из корня 1:0?
Зачем тут вообще «tc qdisc add», и как она имея мажорный номер 0, может находиться под классом 1:14, ведь очереди - это самый высший уровень иерархии?

★★★★★

Последнее исправление: sunny1983 (всего исправлений: 1)

И тут возникает первый вопрос: почему при подключении очередей htb мы указали умолчальный класс 20, но последующие команды описывают классы с хэндлом 1:1, а не 1:20?

либо ошибка в руководстве, либо нужно таки создать дочерний класс 1:20 с меньшей полосой, куда будет сливаться весь нераспределенный фильтрами трафик

Что такое: ceil, burst, cburst

ceil - верхнее ограничение класса. Нижнее или гарантированное(в условиях отсутствия оверквоты) - rate. burst и cburst - порция данных, которая может быть отдана за раз перед переобсчетом алгоритма(для rate и ceil соответственно)

Pinkbyte ★★★★★
()

А почему бы не использовать HTB.init
И паралельно, просмотривая сгенеренные им правила, разбираться уже непосредственно с tc.

Kuzz ★★★
()
Ответ на: комментарий от Pinkbyte

За совет спасибо, с LARTC ознакомлюсь. Серьёзный материал, 134 страницы.

А пока всё-таки с моими настройками:
1.Какие мне нужно установить параметры класса ceil, rate, burst, cburst, чтобы трафик клиентов ограничивался до 5Мбит/с, конкретно чтобы у каждого клиента было 5Мбит/с? Это я для умолчального класса 1:20 имею ввиду.
2.Дочерним по отношению к чему должен быть класс 1:20, к очереди 1: или по отношению к некоему корневому классу? Если второе, то зачем этот корневой класс нужен?
3.Команда «tc qdisc add dev eth0 parent 1:14 handle 40:0 sfq perturb 10» нужна или нет? Если спрашиваешь, откуда я это взял - то первая ссылка на xakep.ru которая.

sunny1983 ★★★★★
() автор топика

Скажите, такой скрипт правилен:

#!/bin/bash

## Очистка очередей
tc qdisc del dev eth0 root htb
tc qdisk del dev eth1 root htb
tc qdisk del dev eth2 root htb

## Создание корневых очередей и классов
tc qdisc add dev eth0 root handle 1: htb default 99
tc qdisc add dev eth1 root handle 1: htb default 99
tc class add dev eth1 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit  burst 150000
tc class add dev eth1 parent 1:1 classid 1:99 htb rate 100mbit ceil 100mbit  burst 150000
tc qdisc add dev eth2 root handle 1: htb default 99
tc class add dev eth2 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit  burst 150000
tc class add dev eth2 parent 1:1 classid 1:99 htb rate 100mbit ceil 100mbit  burst 150000

## Класс для юристов (7 Мбит/с)
tc class add dev eth1 parent 1:1 classid 1:2 htb rate 7mbit ceil 7mbit  burst 10000
tc filter add dev eth1 parent 1: protocol ip match ip dst 192.168.32.0/29 flowid 1:2

## Класс для бухгалтерии (7 Мбит/с)
tc class add dev eth1 parent 1:1 classid 1:3 htb rate 7mbit ceil 7mbit  burst 10000
tc filter add dev eth1 parent 1: protocol ip match ip dst 192.168.32.8/29 flowid 1:3

## Класс для инженеров (1 Мбит/с)
tc class add dev eth1 parent 1:1 classid 1:4 htb rate 1mbit ceil 1mbit  burst 2000
tc filter add dev eth1 parent 1: protocol ip match ip dst 192.168.32.16/29 flowid 1:4

## Класс для арендаторов (20Мбит/с)
tc class add dev eth2 parent 1:1 classid 1:5 htb rate 20mbit ceil 20mbit  burst 28000
tc filter add dev eth2 parent 1: protocol ip match ip dst 192.168.48.0/24 flowid 1:5
sunny1983 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.