opt1k Posted July 3, 2011 Posted July 3, 2011 (edited) Добрый день! Настраиваю свой первый шейпер на линуксе. До этого использовал 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
opt1k Posted July 3, 2011 Author Posted July 3, 2011 пришлось дома собрать тестовый стенд дабы разобраться. Данную проблему решил. Но попытался на боевой машине "закрепить" полученный опыт и /lib/iptables/libipt_mark.so: cannot open shared object file: No such file or directory failed to find target MARK Сейчас обновляю ОС, надеюсь поможет... Вставить ник Quote
opt1k Posted July 3, 2011 Author Posted July 3, 2011 обновление не помогло, вот скрипт который запускаю: 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
Zaqwr Posted July 3, 2011 Posted July 3, 2011 может оно там не работает (POSTROUTING)могу и ошибаться... можно копнуть в сторону CLASSIFY в качестве альтернативы MARK Вставить ник Quote
s.lobanov Posted July 3, 2011 Posted July 3, 2011 Это баг дебина, который переехал в убунту, а вот его фикс уже нет... В любом случае, можно использовать CLASSIFY как это посоветовали выше. Вставить ник Quote
opt1k Posted July 4, 2011 Author Posted July 4, 2011 (edited) спасибо всем за ответы. Часа два потратил на поиск хороших примеров с 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
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.