LINUX.ORG.RU
ФорумAdmin

Работа с шейпером в linux


0

0

Надоели юзвери в попытках положить канал торрентами...
Захотелось придумать решение на основе шейпера под линукс.
Решение: дать ICMP, www, smtp наибольший приоритет, а оставшимся портам всё остальное.
Условно, канал 100 мегабит
Путём ковыряния документации вышло следющее:
eth0 - внешний интерфейс
eth1 - внутренний интерфейс
зы: ессно между ними нат.
# clean shaper
tc filter del dev eth1 parent 1: prio 1
tc qdisc del dev eth1 root handle 1: htb
tc filter del dev eth0 parent 1: prio 1
tc qdisc del dev eth0 root handle 1: htb
# install shaper
# download rules
tc qdisc add dev eth1 root handle 1: htb default 20
tc class add dev eth1 parent 1: classid 1:1 htb rate 100mbit
tc class add dev eth1 parent 1:1 classid 1:20 htb rate 50mbit prio 2
tc class add dev eth1 parent 1:1 classid 1:30 htb rate 100mbit prio 1
tc qdisc add dev eth1 parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev eth1 parent 1:30 handle 30: sfq perturb 10
# ssh, www, smtp
tc filter add dev eth1 parent 1:0 protocol ip prio 10 u32 match ip sport 22 0xffff flowid 1:30
tc filter add dev eth1 parent 1:0 protocol ip prio 10 u32 match ip sport 25 0xffff flowid 1:30
tc filter add dev eth1 parent 1:0 protocol ip prio 10 u32 match ip sport 80 0xffff flowid 1:30
# ICMP
tc filter add dev eth1 parent 1:0 protocol ip prio 10 u32 match ip protocol 1 0xff flowid 1:30
# upload rules
tc qdisc add dev eth0 root handle 1: htb default 20
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 50mbit prio 2
tc class add dev eth0 parent 1:1 classid 1:30 htb rate 100mbit prio 1
tc qdisc add dev eth0 parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev eth0 parent 1:30 handle 30: sfq perturb 10
# ssh, www, smtp
tc filter add dev eth0 parent 1:0 protocol ip prio 10 u32 match ip dport 22 0xffff flowid 1:30
tc filter add dev eth0 parent 1:0 protocol ip prio 10 u32 match ip dport 25 0xffff flowid 1:30
tc filter add dev eth0 parent 1:0 protocol ip prio 10 u32 match ip dport 80 0xffff flowid 1:30
# ICMP
tc filter add dev eth0 parent 1:0 protocol ip prio 10 u32 match ip protocol 1 0xff flowid 1:30

Для того чтоб дополнительно ограничить по скорости некоторых клиентов - я маркирую их в iptables и обрабатываю в шейпере по примеру подобного:

# download
tc class add dev eth1 parent 1: classid 1:100 htb rate 1024kbit burst 12k
tc filter add dev eth1 protocol ip parent 1:0 prio 1 handle 100 fw flowid 1:100
tc qdisc add dev eth1 parent 1:100 handle 100: sfq perturb 10
# upload
tc class add dev eth0 parent 1: classid 1:100 htb rate 1024kbit burst 12k
tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 100 fw flowid 1:100
tc qdisc add dev eth0 parent 1:100 handle 100: sfq perturb 10

Так вот, ограничение по скорости коиентов - работает на ура.
Но канал по приоритетам не делится... может я где не прав?


Ответ на: комментарий от dimon555

Ессно дам, толькоб работало. Я список сократил для понятности.

borcat
() автор топика

> tc class add dev eth1 parent 1: classid 1:1 htb rate 100mbit 
>...
> tc class add dev eth1 parent 1: classid 1:100 htb rate 1024kbit burst 12k 

У вас получается что классы 1:1 и 1:100 работают раздельно и не подчинены друг-другу. Весь траффик для клиента согласно фильтру 100 у вас пойдёт через класс 1:100 и все ограничения, применяемые для 1:1 (и его потомков) на него действовать не будут.

В зависимости от того что вы хотите, вам нужно построить дерево классов так, чтобы классы для клиентов подчинялись общим ограничивающим классам. Также фильтры можно прикпреплять не только к корневому qdisc но и к произвольному классу. Также в качестве flowid можно указывать класс потомок.

Nao ★★★★★
()

И ещё на всякий случай убедись что по всем qdiscам и классам траффик ходит.

tc -s qdisc
tc -s class show dev eth0
tc -s class show dev eth1

лично у меня например упорно не работает указание default для qdisc и я создал дополнительный catch all фильтр для этого, но наверное это у меня руки кривые...

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

поправил tc class add dev eth1 parent 1: classid 1:100 htb rate 1024kbit burst 12k на tc class add dev eth1 parent 1:1 classid 1:100 htb rate 1024kbit burst 12k стало гораздо лучше

borcat
() автор топика
Ответ на: комментарий от Nao

заодно исправил tc class add dev eth0 parent 1:1 classid 1:20 htb rate 50mbit prio 2 tc class add dev eth1 parent 1:1 classid 1:20 htb rate 50mbit prio 2 на tc class add dev eth0 parent 1:1 classid 1:20 htb rate 1mbit ceil 90mbit prio 2 tc class add dev eth1 parent 1:1 classid 1:20 htb rate 1mbit ceil 90mbit prio 2 Вроде как это гарантирует каждому в отдельности 1 мегабит с возможностью до 100.

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