вот оно
lan=ppp0
tc=`which tc`
tc qdisc del dev $lan root
$tc qdisc add dev $lan root handle 1: htb default 2
$tc class add dev $lan parent 1: classid 1:1 htb rate 1024kbit
$tc class add dev $lan parent 1:1 classid 1:2 htb rate 24kbit ceil 512kbit prio 1
$tc filter add dev $lan protocol ip parent 1: u32 match ip dst 192.168.0.1 flowid 1:2
tc qdisc add dev eth0 parent 1:2 handle 20: sfq perturb 10
Чуток подправил.
Tc-шейпинг
Нашол не большой пример который проще адаптировать
iptables -t mangle -I OUTPUT -o eth1 -d xx.xx.xx.xx -j MARK --set-mark 10
iptables -t mangle -I OUTPUT -o eth1 -d xx.xx.xx.yy -j MARK --set-mark 11
#дисциплина очереди
tc qdisc add dev eth1 root handle 1: htb
#главный класс
tc class add dev eth1 parent 1: classid 1:1 htb rate 6kbps ceil 6kbps
#дочерние классы
tc class add dev eth1 parent 1:1 classid 1:10 htb rate 3kbps ceil 6kbps prio 0
tc class add dev eth1 parent 1:1 classid 1:11 htb rate 3kbps ceil 6kbps prio 0
#фильтр
tc filter add dev eth1 protocol ip handle 10 parent 1:0 prio 0 fw flowid 1:10
tc filter add dev eth1 protocol ip handle 11 parent 1:0 prio 0 fw flowid 1:11
Вот вопрос возник, сущности ака темы плодить не охота :)
А откуда скрипт запускаете? Из /etc/rc.local что-то не хочет отрабатывать - руами норма
может его в init.d пихнуть, насколько такое оправдано?
Мдя.. чет добавидв init.d и все умерло....
Forgot, дистрибутив? Если Деб то поторять устал - Iptables (новичек)
2 zenon
Разобрался, все элементарное простынь (С) Фоменко
Суть такая, что скрипт (в т.ч.) и из rc.local запускался раньше dnsmasq и правил iptables
вот и было все девственно чисто, вылечилось добавлением строчки sleep 1
А дистрибутив - сборка на базе Debian Lenny, Untangle 9.3.1 :)
P.S. а писать "в интерфейс" я тоже пробовал, результат тот-же )))
Теперь вопрос по фильтрам
eth0 - внешний интерфейс роутера
eth1 - внутренний интерфейс роутера
tc filter add dev eth1 protocol ip parent 1: u32 match ip dst 192.168.0.1 flowid 1:2Это фильтр на исходящий поток со стороны роутера (входящий для абонента) - для зарезания входящей скорости аб.
А если мне нужно исходящую скорость от абонента порезать, то насколько я понимаю нужно поменять интерфейс и, dst на src т.е. привести к виду
tc filter add dev eth0 protocol ip parent 1: u32 match ip src 192.168.0.1 flowid 1:2Что-то каша в голове по этому поводу, да и пишут все разное, ниче не понимаю.... *DONT_KNOW*
Как пример
#Режем входящую
NUMBERS_VLAN="vlan14 vlan15 vlan16"
for number_vl in `echo $NUMBERS_VLAN`
do
echo $number_vl
tc qdisc del dev $number_vl root
tc qdisc add dev $number_vl root handle 1: htb
tc class add dev $number_vl parent 1: classid 1:1 htb rate 100Mbit
tc class add dev $number_vl parent 1:1 classid 1:100 htb rate 2Mbit ceil 4Mbit burst 15k
tc class add dev $number_vl parent 1:1 classid 1:90 htb rate 1Mbit ceil 2Mbit burst 15k
tc qdisc add dev $number_vl parent 1:100 handle 100: sfq perturb 10
tc qdisc add dev $number_vl parent 1:90 handle 90: sfq perturb 10
tc filter add dev $number_vl parent 1:0 protocol ip prio 7 handle 100 fw classid 1:100
tc filter add dev $number_vl parent 1:0 protocol ip prio 6 handle 90 fw classid 1:90
done
#FORWARD CLIENT 14
iptables -t mangle -A FORWARD -s 192.168.14.0/24 -o ppp999 -j MARK --set-mark 100
iptables -t mangle -A FORWARD -i ppp999 -d 192.168.14.0/24 -j MARK --set-mark 100
iptables -A FORWARD -s 192.168.14.0/24 -o ppp999 -j ACCEPT
iptables -A FORWARD -i ppp999 -d 192.168.14.0/24 -j ACCEPT
#FORWARD CLIENT 15
iptables -t mangle -A FORWARD -s 192.168.15.0/24 -o ppp999 -j MARK --set-mark 90
iptables -t mangle -A FORWARD -i ppp999 -d 192.168.15.0/24 -j MARK --set-mark 90
iptables -A FORWARD -s 192.168.15.0/24 -o ppp999 -j ACCEPT
iptables -A FORWARD -i ppp999 -d 192.168.15.0/24 -j ACCEPT
#Режем исходящую
tc qdisc del dev ppp999 root
tc qdisc add dev ppp999 root handle 1: htb
tc class add dev ppp999 parent 1: classid 1:1 htb rate 100Mbit
tc class add dev ppp999 parent 1:1 classid 1:100 htb rate 2Mbit ceil 4Mbit burst 15k
tc class add dev ppp999 parent 1:1 classid 1:90 htb rate 1Mbit ceil 2Mbit burst 15k
tc qdisc add dev ppp999 parent 1:100 handle 100: sfq perturb 10
tc qdisc add dev ppp999 parent 1:90 handle 90: sfq perturb 10
tc filter add dev ppp999 parent 1:0 protocol ip prio 1 handle 100 fw classid 1:100
tc filter add dev ppp999 parent 1:0 protocol ip prio 1 handle 90 fw classid 1:90
А можно пример попроще и без маркирования пакетов :) .
И снова нужна помощь :)
Встала задача порезать исходящий от абонентов трафик, условие самое простое - всех под одну гребенку. Покурив маны по tc додумался до следующего
$tc qdisc del dev eth1 handle ffff: ingress
$tc qdisc add dev eth1 handle ffff: ingress
$tc filter add dev eth1 parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate 3072kbit burst 10k drop flowid :1
на боевом серваке пока не проверял, на домашней тачке что-то ересь какая-то выходит, входящая падает до не приличия, а исходящая как перла так и прет (правда на машине всего один интерфейс)
На правильном ли я пути, или где-то что-то все же не так?
P.S. Проверил на боевом, исходящая у абонентов упала до ~0.5mb/s Что не так?