opt1k Posted July 3, 2011 (edited) · Report post Добрый день! Настраиваю свой первый шейпер на линуксе. До этого использовал dummynet под freebsd. Итак, дано: Шлюз eth2 - интернет, канал 1мбит. Nat eth1 - локалка (192.168.5.1) tap0 - openvpn, работает через интернет, т.е. через eth2 (172.16.0.5) Есть несколько компов, которые выходят в инет через этот шлюз. Есть голосовой шлюз, выходящий в инет через данный шлюз, его адрес 192.168.5.100. Необходимо дать шлюзу гарантировано 256кбит, т.е. нужно настроить шейпер. Я начал с простого - решил попробовать ограничить исходящую скорость на tap0: TC="/sbin/tc" $TC qdisc del dev tap0 root handle 1: #my root $TC qdisc add dev tap0 root handle 1: htb default 25 #root cfg $TC class add dev tap0 parent 1: classid 1:1 htb rate 900kbit ceil 901kbit #others $TC class add dev tap0 parent 1:1 classid 1:25 htb rate 32kbit #voip $TC class add dev tap0 parent 1:1 classid 1:11 htb rate 256kbit ceil 512kbit $TC qdisc add dev tap0 parent 1:11 handle 10:0 sfq perturb 10 $TC qdisc add dev tap0 parent 1:25 handle 50:0 sfq perturb 10 $TC filter add dev tap0 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.5.100 flowid 1:11 Всё получилось, ограничение заработало. Далее решил попробовать засунуть всё это дело в ifb - неудачо. Я пробовал множество вариантов, здесь все приводить, наверно, нет смысла. Поэтому выложу наиболее понятный для меня. $TC qdisc del dev ifb0 root handle 1: $TC qdisc del dev tap0 root handle 2: #my root $TC qdisc add dev ifb0 root handle 1: htb default 25 #root cfg $TC class add dev ifb0 parent 1: classid 1:1 htb rate 900kbit ceil 901kbit #others $TC class add dev ifb0 parent 1:1 classid 1:25 htb rate 32kbit #voip $TC class add dev ifb0 parent 1:1 classid 1:11 htb rate 256kbit ceil 512kbit $TC qdisc add dev ifb0 parent 1:11 handle 10:0 sfq perturb 10 $TC qdisc add dev ifb0 parent 1:25 handle 50:0 sfq perturb 10 $TC filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.5.100 flowid 1:11 $TC qdisc add dev tap0 root handle 2: prio $TC filter add dev tap0 parent 2: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0 $TC filter add dev ifb0 protocol ip parent 1:0 prio 2 handle 111 fw classid 1: iptables -t mangle -A POSTROUTING -o tap0 -j MARK --set-mark 111 Подскажите чего делаю не так? Edited July 3, 2011 by opt1k Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
opt1k Posted July 3, 2011 · Report post пришлось дома собрать тестовый стенд дабы разобраться. Данную проблему решил. Но попытался на боевой машине "закрепить" полученный опыт и /lib/iptables/libipt_mark.so: cannot open shared object file: No such file or directory failed to find target MARK Сейчас обновляю ОС, надеюсь поможет... Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
opt1k Posted July 3, 2011 · Report post обновление не помогло, вот скрипт который запускаю: TC="/sbin/tc" $TC qdisc del dev ifb0 root handle 1: $TC qdisc del dev eth0 ingress #my root $TC qdisc add dev ifb0 root handle 1: htb default 25 #root cfg $TC class add dev ifb0 parent 1: classid 1:1 htb rate 9000kbit ceil 9010kbit #others $TC class add dev ifb0 parent 1:1 classid 1:25 htb rate 320kbit #voip $TC class add dev ifb0 parent 1:1 classid 1:11 htb rate 560kbit ceil 1120kbit $TC qdisc add dev ifb0 parent 1:11 handle 10:0 sfq perturb 10 $TC qdisc add dev ifb0 parent 1:25 handle 50:0 sfq perturb 10 $TC filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.100.102 flowid 1:11 ifconfig ifb0 up $TC qdisc add dev eth0 ingress $TC filter add dev eth0 parent ffff: protocol ip prio 10 u32 match u32 0 0 flowid 1: action ipt -j MARK --set-mark 1 action mirred egress redirect dev ifb0 В дебиане 6 работает, в убунту 10.04 нет, вываливает ошибку: /lib/iptables/libipt_mark.so: cannot open shared object file: No such file or directory failed to find target MARK bad action parsing parse_action: bad value (11:ipt)! Illegal "action" Гугл кроме как бага дебиана ничего внятного не даёт. Что подскажите? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Zaqwr Posted July 3, 2011 · Report post может оно там не работает (POSTROUTING)могу и ошибаться... можно копнуть в сторону CLASSIFY в качестве альтернативы MARK Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
s.lobanov Posted July 3, 2011 · Report post Это баг дебина, который переехал в убунту, а вот его фикс уже нет... В любом случае, можно использовать CLASSIFY как это посоветовали выше. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
opt1k Posted July 4, 2011 (edited) · Report post спасибо всем за ответы. Часа два потратил на поиск хороших примеров с CLASSIFY, но так ничего и не нашёл. Посмотрел в инете как народ делает более внимательно и решил вообще не метить трафик. В итоге получилось такое: ip link set dev ifb1 up TC="/sbin/tc" tc qdisc del dev ifb0 root handle 1: tc qdisc del dev ifb1 root handle 2: tc qdisc del dev eth1 ingress tc qdisc del dev eth1 root handle 2: #in root $TC qdisc add dev ifb0 root handle 1: htb default 300 #out root $TC qdisc add dev ifb1 root handle 2: htb default 300 #ingress $TC class add dev ifb0 parent 1: classid 1:1 htb rate 900kbit ceil 901kbit #egress $TC class add dev ifb1 parent 2: classid 2:1 htb rate 900kbit ceil 901kbit #others $TC class add dev ifb0 parent 1:1 classid 1:300 htb rate 32kbit $TC class add dev ifb1 parent 2:1 classid 2:300 htb rate 32kbit $TC qdisc add dev ifb0 parent 1:300 sfq perturb 10 $TC qdisc add dev ifb1 parent 2:300 sfq perturb 10 #2 $TC class add dev ifb0 parent 1:1 classid 1:2 htb rate 64kbit ceil 512kbit $TC class add dev ifb1 parent 2:1 classid 2:2 htb rate 64kbit ceil 512kbit $TC qdisc add dev ifb0 parent 1:2 sfq perturb 10 $TC qdisc add dev ifb1 parent 2:2 sfq perturb 10 $TC filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.5.2 flowid 1:2 $TC filter add dev ifb1 protocol ip parent 2:0 prio 1 u32 match ip dst 192.168.5.2 flowid 2:2 . . . #voip $TC class add dev ifb0 parent 1:1 classid 1:100 htb rate 320kbit ceil 512kbit $TC class add dev ifb1 parent 2:1 classid 2:100 htb rate 320kbit ceil 512kbit $TC qdisc add dev ifb0 parent 1:100 sfq perturb 10 $TC qdisc add dev ifb1 parent 2:100 sfq perturb 10 $TC filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.5.100 flowid 1:100 $TC filter add dev ifb1 protocol ip parent 2:0 prio 1 u32 match ip dst 192.168.5.100 flowid 2:100 ifconfig ifb0 up #ingress redirection $TC qdisc add dev eth1 ingress $TC filter add dev eth1 parent ffff: protocol ip prio 1 u32 match u32 0 0 flowid 1: action mirred egress redirect dev ifb0 #egress redirection $TC qdisc add dev eth1 root handle 2: htb $TC filter add dev eth1 parent 2: protocol ip prio 1 u32 match u32 0 0 flowid 2: action mirred egress redirect dev ifb1 На тестовой машинке работает нормально, через 3 часа народ в офисе появится и будут тестить. Для чистоты эксперимента о нововведениях я говорить сотрудникам пока не буду :). ПС долго думал и пришёл к выводу что шейпить одновременно и исходящий и входящий трафик на одном ifb интерфейсе нельзя, прав ли я? (иначе скорость будет складываться из даунлоада и аплоада суммарно) И ещё 1 вопросик есть, но его чуть позже задам, сейчас уже засыпаю сидя... Edited July 4, 2011 by opt1k Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...