--}}
Новая тема
Вы не можете создавать новые темы.
Т.к. вы неавторизованы на сайте. Пожалуйста назовите себя или зарегистрируйтесь.
Список тем

Trouble iproute2 tc and traff shaping

3
14
С друзьями на NN.RU
В социальных сетях
Поделиться
Different
08.02.2006
Есть проблемка распределить канал 64кbit на 3х пользователей. интернет приходит на сервер с Gentoo Linux, всё нормально бегает, но есть одно НО, оч хочется чтобы был шейпинг канала, для этих целей решил использовать iproute2 (в ядро всё что надо вкомпилено)

Все 3 юзверя канала сидят на eth0, инет на сервер приходит по ppp0.
Трафик решил шейпить на основе меток в iptables, но что-то происходит не так. помогите найти в чём затык далее все команды которые делаю:

сначала меточки

iptables -t mangle -A FORWARD -s 0/0 -d 192.168.100.13/32 -j MARK --set-mark 20
iptables -t mangle -A FORWARD -s 0/0 -d 192.168.100.72/32 -j MARK --set-mark 21
iptables -t mangle -A FORWARD -s 0/0 -d 192.168.100.76/32 -j MARK --set-mark 22

смотрю iptables -t mangle -L -n -v всё метит всё гуд, дальше перехожу к настройке самого tc

tc qdisc add dev eth0 root handle 1: htb default 13
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit burst 15k
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 20kbps ceil 64kbps burst 15k
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 20kbps ceil 64kbps burst 15k
tc class add dev eth0 parent 1:1 classid 1:12 htb rate 20kbps ceil 64kbps burst 15k
tc class add dev eth0 parent 1:1 classid 1:13 htb rate 10mbit ceil 100mbit burst 15k

tc qdisc add dev eth0 parent 1:10 handle 20: pfifo limit 5
tc qdisc add dev eth0 parent 1:11 handle 30: pfifo limit 5
tc qdisc add dev eth0 parent 1:12 handle 40: pfifo limit 5
tc qdisc add dev eth0 parent 1:13 handle 50: sfq perturb 10

tc filter add dev eth0 protocol ip parent 1:0 prio 2 handle 20 fw classid 1:20
tc filter add dev eth0 protocol ip parent 1:0 prio 2 handle 21 fw classid 1:30
tc filter add dev eth0 protocol ip parent 1:0 prio 2 handle 22 fw classid 1:40

tc qdisc add dev ppp0 root sfq perturb 10

после этого проверяю как вся работает

bserver ~ # tc -s qdisc


qdisc htb 1: dev eth0 r2q 10 default 13 direct_packets_stat 845
Sent 219847516 bytes 323727 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0

qdisc pfifo 20: dev eth0 parent 1:10 limit 5p
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0

qdisc pfifo 30: dev eth0 parent 1:11 limit 5p
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0

qdisc pfifo 40: dev eth0 parent 1:12 limit 5p
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0

qdisc sfq 50: dev eth0 parent 1:13
Sent 219077728 bytes 322630 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0

qdisc pfifo_fast 0: dev eth1 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0

qdisc sfq 8001: dev ppp0
Sent 18914693 bytes 156450 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0

И вижу, что всё работает не так, как мне нужно(( получается что трафф просто идёт по дефолту а не заруливает на шейпинг(((

Кто делал подобное, может подскажет..... а то зае уже(((
ИМХО:
а) тебе надо ограничивать не входящие на eth0 (смысла в этом в 100 мбитной сети не вижу), а исходящие с ppp0 + прикрутить ingress очередь. Во всех HOWTO написано что шейпить надо на внешнем интерфейсе.

А так получается что у тебя строки
tc qdisc add dev eth0 root handle 1: htb default 13
и
tc class add dev eth0 parent 1:1 classid 1:13 htb rate 10mbit ceil 100mbit burst 15k
разрещают всем по умолчанию грузить ppp0 со скоростью в 10 мегабит. Hint: по умолчанию шейпится egress (исходящий) поток, не важно в какую сторону (в LAN или наружу).

б) марки на пакеты ставь в цепочке PREROUTING
Заодно можно маркировать пакеты с -s 192.168.100.xx/32 на всякий

пока все, ща пойду дочитаю до конца :))

p.s. возьми пример из lartc howto, где описано как парень в общаге трафик шейпил, адаптируй да не мучайся :)

p.p.s. резать 64 кбит на троих - сильно!!!
Different
08.02.2006
такс начнём ответ по пунктикам
а)ограничивать мне надо входящий трафик на ppp0 НО ограничение входящего трафа весч достаточно дурная и смысла в ней мало, нормальные ограничения могут работать только на исходящем трафике
вот я и делаю шейпинг
tc qdisc add dev eth0 root handle 1: htb default 13
а строчка
tc class add dev eth0 parent 1:1 classid 1:13 htb rate 10mbit ceil 100mbit burst 15k
не более чем условность
т.к. доступ в интернет ограничен по MAC адреса этих 3х компов

б) ставить марки в цепочки PREROUTING в моём случае глупо т.к. на этом компе кроме ната висит ещё и самба и индеец, и в случае установки меток в PREROUTING трафик который не должен будет шейпиться

Вот так что так)))
а) этим правилом (вот этой "условностью") ты даешь 10 мегабит исходящей полосы каждому пакету пришедшему из локалки. Про разграничение по макам вообще не понял, мы же про шейпинг, а не ACL всякие?
б) а что мешает поставить в PREROUTING проверку на протокол?
типа ... -d $SOME_IP -p tcp -m multiport --destination-port !137,138,139,445,80,443
и аналогично для udp

еще раз повторюсь, по моему ты не с той стороны решил порешать проблему. ИМХО надо шейпить исходящие с ppp0.
Different
08.02.2006
сейчас вопрос не в том как понимает шейпинг, главный вопрос в том ПОЧЕМУ замаркированый трафик не попадает в нужный ему класс, или я чё-то не понимаю или что-то не так делаю(((

ну расставил меточки в PREROUTING ну это тоже мало помогает((

пробовал и u32 match
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.100.13 flowid 1:20
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.100.72 flowid 1:30
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.100.76 flowid 1:40

А тут больше нет чтоль никого, я думал это форум, хоть народу побольше будет((
кароче я в отчаянии(((
iptables -t mangle -A FORWARD -s 0/0 -d 192.168.100.13/32 -j MARK --set-mark 20

даст тебе то, что любой пакет ИЗ ЛОКАЛКИ направленный товарищу 192.168.100.13 будет помечен маркой 20. Ты этого добиваешься или все таки инет будешь резать :) Ну не может прийти из инета на ppp0 (а затем и eth0) пакет с адресом получателя 192.168.ххх.ууу. Серые адреса то не маршрутизируются...

У тебя кстати prio 2 везде, а надо prio 1, prio 2 , prio 3...
И еще - ты задаешь классы classid 1:10, 1:11, и т.д., а направляешь (fw classid) в классы 1:20, 1:30 и т.п. Хотя у тебя этих классов просто нет.

p.s. это форум а не чат
Different
08.02.2006
такс вроде заработало))))

да это FORWARD, ничего ненужного метиться не будет, я всё правильно продумал))

а вот за классы спасибо, вот тут действительно ступил((( точнее думал что они там подругому считаются))))

вот а с приоритетами что делать не знаю.. мне кажется надо всем одинаковый давать....
лана буду тестить

на данный момент скрипт выглядит так

IPTABLES -t mangle -A FORWARD -s 192.168.100.13/32 -d 0/0 -j MARK --set-mark 20
IPTABLES -t mangle -A FORWARD -s 192.168.100.72/32 -d 0/0 -j MARK --set-mark 21
IPTABLES -t mangle -A FORWARD -s 192.168.100.76/32 -d 0/0 -j MARK --set-mark 22

IPTABLES -t mangle -A FORWARD -s 0/0 -d 192.168.100.13/32 -j MARK --set-mark 20
IPTABLES -t mangle -A FORWARD -s 0/0 -d 192.168.100.72/32 -j MARK --set-mark 21
IPTABLES -t mangle -A FORWARD -s 0/0 -d 192.168.100.76/32 -j MARK --set-mark 22

tc qdisc add dev eth0 root handle 1: htb default 13

tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit burst 15k
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 20kbps ceil 64kbps burst 15k
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 20kbps ceil 64kbps burst 15k
tc class add dev eth0 parent 1:1 classid 1:12 htb rate 20kbps ceil 64kbps burst 15k
tc class add dev eth0 parent 1:1 classid 1:13 htb rate 10mbit ceil 100mbit burst 15k

tc qdisc add dev eth0 parent 1:10 handle 20: pfifo limit 5
tc qdisc add dev eth0 parent 1:11 handle 30: pfifo limit 5
tc qdisc add dev eth0 parent 1:12 handle 40: pfifo limit 5
tc qdisc add dev eth0 parent 1:13 handle 50: sfq perturb 10

tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 20 fw classid 1:10
tc filter add dev eth0 protocol ip parent 1:0 prio 2 handle 21 fw classid 1:11
tc filter add dev eth0 protocol ip parent 1:0 prio 3 handle 22 fw classid 1:12

tc qdisc add dev ppp0 root sfq perturb 10

tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit burst 15k


тоже не совсем корректно (если уж о eth0 говорим). Параметр "Ceil" по науке должен составлять 75-80% от общей ширины исходящего канала, иначе очередь не будет контролироваться linux-ом.
в общем рекомендую обратить внимание на
http://www.opennet.ru/docs/RUS/LARTC/
Конкретно - пункт 15.10

С него можно срисовать и адаптировать под собственные нужды.
Different
08.02.2006
да блин читал я этот ман и кроме него несколько, только у меня задача несколько другая нежели там

просто грубо надо поделить 64 на троих справедливо и чтобы человек один сидел мог спокойно занять весь канал а если трое чтоб делилось по 20к каждому.....
если бы внимательно прочитал, таких бы ошибок не наделал, ИМХО.

При таком ТЗ тебе достаточно отрезать от полосы кусок в 60КБ и назначить ему дисциплину SFQ, т.е. чтобы всем досталось поровну, а у тебя целое дерево классов зачем-то.
Different
08.02.2006
я все за и против взвешивал, но остановился именно на варианте HTB
у меня все таки мнение, что ты перемудрил с конфигурацией, но хозяин-барин... тебе же с этим потом работать.
honar
09.02.2006
Почему-то вспоминаеться старый анекдот про лошадь, галстук и генератор
Новая тема
Вы не можете создавать новые темы.
Т.к. вы неавторизованы на сайте. Пожалуйста назовите себя или зарегистрируйтесь.
Список тем
Последние темы форумов
Форум Тема (Автор) Последний ответ Ответов
Материнские платы на запчасти и не только

Материнские платы на запчасти и не только Материнские платы и другие комплектующие Отправка в регионы после оплаты. Транспортной...
Цена: 3 000 руб.

Оперативная память Corsair XMS3 CMX8GX3M2A1600C9

Оперативная память Corsair XMS3 CMX8GX3M2A1600C9 Отправка в регионы после оплаты. Продаются сразу обе. Цена за обе 2000 руб....
Цена: 1 000 руб.

Принтер лазерный HEWLETT PACKARD HP-6L

Принтер лазерный HEWLETT PACKARD HP-6L Отправка в регионы после оплаты. 3штуки БУ. Внешний вид из магазина простояли на складе...
Цена: 4 500 руб.

Сетевой фильтр APC Surge Arrest

Сетевой фильтр APC Surge Arrest для радиолюбителя.и не только Отправка в регионы после оплаты. ЦЕНА 3000 руб. В рабочем состоянии....
Цена: 3 000 руб.