cac2s
Пользователи-
Публикации
24 -
Зарегистрирован
-
Посещение
О cac2s
-
Звание
Абитуриент
Контакты
-
ICQ
Array
-
[tc][htb] два варианта реализации, но ни одного корректно работающего
тему ответил в cac2s пользователя cac2s в Программное обеспечение, биллинг и *unix системы
дело в том, что я администрирую небольшой офис, так что хеш-таблицы вряд-ли понадобятся. покрайней мере в ближайшей время... -
[tc][htb] два варианта реализации, но ни одного корректно работающего
тему ответил в cac2s пользователя cac2s в Программное обеспечение, биллинг и *unix системы
нет. не нужно. достаточно того, что он может разгонятся.спасибо Вам большое! ну, ты это... если что - заходи (с) ;) UPD: к ста, при 1:5 rate 80% (1:10..1:90 ceil 80% соответсвенно) жмёт немного лучше. пожалуй, останусь на нём. -
[tc][htb] два варианта реализации, но ни одного корректно работающего
тему ответил в cac2s пользователя cac2s в Программное обеспечение, биллинг и *unix системы
уррррааааа! дядя Фёдорррр пррриеееехааал!!! it's works! в общем: 1:2 rate 85% ceil 100% 1:10 rate 85% ceil 85% 1:20 rate 1kbit ceil 85% при такой схеме всё намного! лучше. дальше. применяю такой подход к боевой схеме: +------+ | root | +------+ | | +---------------------------------+ +--| class 1:1 (нетранзитный трафик) | | +---------------------------------+ | | +---------------------------------+ +--| class 1:5 (транзитный трафик) | rate 85% ceil 100% +---------------------------------+ | +------+ |--| 1:10 | rate 5% ceil 85% (icmp, dns) | +------+ | +------+ |--| 1:20 | rate 15% ceil 85% (icecast) | +------+ | +------+ |--| 1:30 | rate 10% ceil 85% (ssh, rdp) | +------+ | +------+ |--| 1:40 | rate 20% ceil 85% (http<512Кбит) | +------+ | +------+ |--| 1:50 | rate 25% ceil 85% (mail, jabber, http>512Кбит ) | +------+ | +------+ +--| 1:90 | rate 1kbit ceil 85% (bulk) +------+ итог - при неоходимости 1:90 скукоживается до нескольких килобит -
[tc][htb] два варианта реализации, но ни одного корректно работающего
тему ответил в cac2s пользователя cac2s в Программное обеспечение, биллинг и *unix системы
прошу прощения, но голова уже квадратная. можно подробнее? например, есть 1:10 prio 4 для веба и 1:20 prio 7 для торрентов. куда лепить 3-й класс, и какие давать rate и ceil всем трём (можно в процентах. думаю, смысл будет уловлен) -
[tc][htb] два варианта реализации, но ни одного корректно работающего
тему ответил в cac2s пользователя cac2s в Программное обеспечение, биллинг и *unix системы
да. так оно и случилось. блин... -
[tc][htb] два варианта реализации, но ни одного корректно работающего
тему ответил в cac2s пользователя cac2s в Программное обеспечение, биллинг и *unix системы
дык, а что после этого? поставить что-то качать - не проблема. докачаться ведь может :)UPD: запустил торрент-качалку -
[tc][htb] два варианта реализации, но ни одного корректно работающего
тему ответил в cac2s пользователя cac2s в Программное обеспечение, биллинг и *unix системы
так пробовал ужеладно. для пущей уверенности сделаю ещё раз: #!/bin/bash IPT="/sbin/iptables" TC="/sbin/tc" IP="/bin/ip" DEV_IN="eth0" # Смотрит в лок. сеть RATE_IN="2500" # Гарантированная 3072КБит $TC qdisc del dev $DEV_IN root >/dev/null 2>&1 $IP link set dev $DEV_IN qlen 32 $TC qdisc add dev $DEV_IN root handle 1: htb # Транзитный трафик $TC class add dev $DEV_IN parent 1: classid 1:5 htb rate ${RATE_IN}kbit $TC class add dev $DEV_IN parent 1:5 classid 1:10 htb rate $[75[quot]$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 0 # 75% $TC class add dev $DEV_IN parent 1:5 classid 1:20 htb rate $[25[/quot]$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 1 # 25% $TC qdisc add dev $DEV_IN parent 1:10 handle 10: sfq perturb 10 $TC qdisc add dev $DEV_IN parent 1:20 handle 20: sfq perturb 10 $IPT -t mangle -D POSTROUTING -o $DEV_IN -j SHAPER-IN >/dev/null 2>&1 $IPT -t mangle -F SHAPER-IN >/dev/null 2>&1 $IPT -t mangle -X SHAPER-IN >/dev/null 2>&1 $IPT -t mangle -N SHAPER-IN $IPT -t mangle -I POSTROUTING -o $DEV_IN -j SHAPER-IN $IPT -t mangle -A SHAPER-IN -d 192.168.0.100 -j CLASSIFY --set-class 1:10 $IPT -t mangle -A SHAPER-IN -d 192.168.0.100 -j RETURN $IPT -t mangle -A SHAPER-IN -d 192.168.0.248 -j CLASSIFY --set-class 1:20 $IPT -t mangle -A SHAPER-IN -d 192.168.0.248 -j RETURN echo "Inbound shaping added to $DEV_IN. Rate: ${RATE_IN}Kbit/sec." проверка показывает правильную работу: 100-й ip одной закачкой/соединением "ест" 75%, 248-й ip тремя закачками - 25% -
[tc][htb] два варианта реализации, но ни одного корректно работающего
тему ответил в cac2s пользователя cac2s в Программное обеспечение, биллинг и *unix системы
и так, схема: +------+ | root | +------+ | | +---------------------------------+ +--| class 1:1 (нетранзитный трафик) | | +---------------------------------+ | | +---------------------------------+ +--| class 1:5 (транзитный трафик) | +---------------------------------+ | +------+ |--| 1:10 | rate 5% ceil 25% (icmp, dns) | +------+ | +------+ |--| 1:20 | rate 10% ceil 50% (icecast) | +------+ | +------+ |--| 1:30 | rate 10% ceil 50% (ssh, rdp) | +------+ | +------+ |--| 1:40 | rate 10% ceil 30% (mail) | +------+ | +------+ |--| 1:50 | rate 40% ceil 100% (web) | +------+ | +------+ |--| 1:60 | rate 20% ceil 90% | +------+ | +------+ +--| 1:90 | rate 5% ceil 75% (bulk) +------+ скрипт: #!/bin/bash IPT="/sbin/iptables" TC="/sbin/tc" IP="/bin/ip" DEV_IN="eth0" # Смотрит в лок. сеть RATE_IN="2500" # Гарантированная 3072КБит RATE_LOCAL="1gbit" IP_LOCAL="192.168.0.254" $TC qdisc del dev $DEV_IN root >/dev/null 2>&1 $IP link set dev $DEV_IN qlen 32 $TC qdisc add dev $DEV_IN root handle 1: htb # Нетранзитный трафик $TC class add dev $DEV_IN parent 1: classid 1:1 htb rate $RATE_LOCAL quantum 60000 prio 7 $TC qdisc add dev $DEV_IN parent 1:1 pfifo $TC filter add dev $DEV_IN parent 1: prio 1 protocol ip u32 match ip src $IP_LOCAL flowid 1:1 # Транзитный трафик $TC class add dev $DEV_IN parent 1: classid 1:5 htb rate ${RATE_IN}kbit $TC class add dev $DEV_IN parent 1:5 classid 1:10 htb rate $[5[quot]$RATE_IN/100]kbit ceil $[25[/quot]$RATE_IN/100]kbit prio 0 $TC class add dev $DEV_IN parent 1:5 classid 1:20 htb rate $[10[quot]$RATE_IN/100]kbit ceil $[50[/quot]$RATE_IN/100]kbit prio 1 $TC class add dev $DEV_IN parent 1:5 classid 1:30 htb rate $[10[quot]$RATE_IN/100]kbit ceil $[50[/quot]$RATE_IN/100]kbit prio 2 $TC class add dev $DEV_IN parent 1:5 classid 1:40 htb rate $[10[quot]$RATE_IN/100]kbit ceil $[30[/quot]$RATE_IN/100]kbit prio 3 $TC class add dev $DEV_IN parent 1:5 classid 1:50 htb rate $[40[quot]$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 4 $TC class add dev $DEV_IN parent 1:5 classid 1:60 htb rate $[20[/quot]$RATE_IN/100]kbit ceil $[90[quot]$RATE_IN/100]kbit prio 5 $TC class add dev $DEV_IN parent 1:5 classid 1:90 htb rate $[5[/quot]$RATE_IN/100]kbit ceil $[75[quot]$RATE_IN/100]kbit prio 6 $TC qdisc add dev $DEV_IN parent 1:10 handle 10: sfq perturb 10 $TC qdisc add dev $DEV_IN parent 1:20 handle 20: sfq perturb 10 $TC qdisc add dev $DEV_IN parent 1:30 handle 30: sfq perturb 10 $TC qdisc add dev $DEV_IN parent 1:40 handle 40: sfq perturb 10 $TC qdisc add dev $DEV_IN parent 1:50 handle 50: sfq perturb 10 $TC qdisc add dev $DEV_IN parent 1:60 handle 60: sfq perturb 10 $TC qdisc add dev $DEV_IN parent 1:90 handle 90: sfq perturb 10 $TC filter add dev $DEV_IN parent 10: protocol ip handle 110 flow hash keys dst divisor 512 $TC filter add dev $DEV_IN parent 20: protocol ip handle 120 flow hash keys dst divisor 512 $TC filter add dev $DEV_IN parent 30: protocol ip handle 130 flow hash keys dst divisor 512 $TC filter add dev $DEV_IN parent 40: protocol ip handle 140 flow hash keys dst divisor 512 $TC filter add dev $DEV_IN parent 50: protocol ip handle 150 flow hash keys dst divisor 512 $TC filter add dev $DEV_IN parent 60: protocol ip handle 160 flow hash keys dst divisor 512 $TC filter add dev $DEV_IN parent 90: protocol ip handle 190 flow hash keys dst divisor 512 $IPT -t mangle -D POSTROUTING -o $DEV_IN -j SHAPER-IN >/dev/null 2>&1 $IPT -t mangle -F SHAPER-IN >/dev/null 2>&1 $IPT -t mangle -X SHAPER-IN >/dev/null 2>&1 $IPT -t mangle -N SHAPER-IN $IPT -t mangle -I POSTROUTING -o $DEV_IN -j SHAPER-IN # icmp, dns $IPT -t mangle -A SHAPER-IN -p icmp -j CLASSIFY --set-class 1:10 $IPT -t mangle -A SHAPER-IN -p udp --sport 53 -j CLASSIFY --set-class 1:10 # icecast $IPT -t mangle -A SHAPER-IN -p tcp -m multiport --sports 7000,8000 -j CLASSIFY --set-class 1:20 # ssh, rdp $IPT -t mangle -A SHAPER-IN -p tcp -m multiport --sports 22,3389 -j CLASSIFY --set-class 1:30 # imap, imaps, pop3, pop3s $IPT -t mangle -A SHAPER-IN -p tcp -m multiport --sports 143,993,110,995 -j CLASSIFY --set-class 1:40 # http, https; ftp(20,21) $IPT -t mangle -A SHAPER-IN -p tcp -m multiport --sports 80,8080,443,20,21,1935 -j CLASSIFY --set-class 1:50 # bulk $IPT -t mangle -A SHAPER-IN -j CLASSIFY --set-class 1:90 echo "Inbound shaping added to $DEV_IN. Rate: ${RATE_IN}Kbit/sec." результат неизменный :-/ при старте торрент-закачки bulk-класс ни как не хочет отдавать "одолженную" ширину. сцу..а :) -
[tc][htb] два варианта реализации, но ни одного корректно работающего
тему ответил в cac2s пользователя cac2s в Программное обеспечение, биллинг и *unix системы
выходные же! =) завтра приду на работу, и первым делом переделаю схему с учётом прежних ошибок, оттестирую и отпишу. -
[tc][htb] два варианта реализации, но ни одного корректно работающего
тему ответил в cac2s пользователя cac2s в Программное обеспечение, биллинг и *unix системы
© http://lartc.org/howto/lartc.qdisc.filters.html Если я что не дочитал и не так понял - исправте меня :) исправляю: я при классификации пакетов при помощи iptables вместо -j MARK использую -j CLASSIFY, так что необходимость в добавлении фильтров к корневой дисциплине отпадает (см. здесь) а те фильтры, о которых Вы говорите - это гарантия деления ширины между dst, а не src,dst,proto,proto-src,proto-dst (по умолчанию), т.е. каждая краевая дисциплина теперь будет делить свою полосу между ip -
[tc][htb] два варианта реализации, но ни одного корректно работающего
тему ответил в cac2s пользователя cac2s в Программное обеспечение, биллинг и *unix системы
пришёл ответ от Мартина: коротко и ясно... -
[tc][htb] два варианта реализации, но ни одного корректно работающего
тему ответил в cac2s пользователя cac2s в Программное обеспечение, биллинг и *unix системы
да. точно. припоминаю. просто голова уже квадратная, поэтому неудивительно, что ни как не отреагировал на совет. прошу прощения :) приоритеты стали нормальными, НО у 1:2 prio нет! (пробовал менять prio на 1,2,...) - ситуация не поменялась. почему так? это и имел ввиду. т.е. моя ошибка заключалась в использовании prio>7 -
[tc][htb] два варианта реализации, но ни одного корректно работающего
тему ответил в cac2s пользователя cac2s в Программное обеспечение, биллинг и *unix системы
1. в общем, отписал письмо автору HTB... бросив небольшой скрипт для примера. если ответит - отпишу2. на opennet.ru один человек натолкнул на правильную идею: выводить tc -d class show dev eth0 после каждого выполнения команды tc class add... скрипт: #!/bin/bash IPT="/sbin/iptables" TC="/sbin/tc" IP="/bin/ip" DEV_IN="eth0" RATE_IN="2750" $TC qdisc del dev $DEV_IN root $IP link set dev $DEV_IN qlen 32 $TC qdisc add dev $DEV_IN root handle 1: htb r2q 3 $TC class add dev $DEV_IN parent 1: classid 1:1 htb rate ${RATE_IN}kbit echo 1:1; $TC -d class show dev eth0; echo $TC class add dev $DEV_IN parent 1:1 classid 1:10 htb rate $[50*$RATE_IN/100]kbit ceil ${RATE_IN}kbit quantum 60000 prio 0 echo 1:10; $TC -d class show dev eth0; echo $TC class add dev $DEV_IN parent 1:10 classid 1:11 htb rate $[25*$RATE_IN/100]kbit ceil ${RATE_IN}kbit quantum 30000 prio 0 echo 1:11; $TC -d class show dev eth0; echo $TC class add dev $DEV_IN parent 1:10 classid 1:12 htb rate $[25*$RATE_IN/100]kbit ceil $[50*$RATE_IN/100]kbit quantum 30000 prio 1 echo 1:12; $TC -d class show dev eth0; echo $TC class add dev $DEV_IN parent 1:1 classid 1:20 htb rate $[50*$RATE_IN/100]kbit ceil ${RATE_IN}kbit quantum 25000 prio 1 echo 1:20; $TC -d class show dev eth0; echo $TC class add dev $DEV_IN parent 1:20 classid 1:21 htb rate $[25*$RATE_IN/100]kbit ceil ${RATE_IN}kbit quantum 25000 prio 0 echo 1:21; $TC -d class show dev eth0 выхлоп: 1:1 class htb 1:1 root prio 0 quantum 114583 rate 2750Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0 1:10 class htb 1:10 parent 1:1 prio 0 quantum 60000 rate 1375Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0 class htb 1:1 root rate 2750Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 7 1:11 class htb 1:11 parent 1:10 prio 0 quantum 30000 rate 687000bit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0 class htb 1:10 parent 1:1 rate 1375Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 6 class htb 1:1 root rate 2750Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 7 1:12 class htb 1:11 parent 1:10 prio 0 quantum 30000 rate 687000bit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0 class htb 1:1 root rate 2750Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 7 class htb 1:10 parent 1:1 rate 1375Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 6 class htb 1:12 parent 1:10 prio 1 quantum 30000 rate 687000bit ceil 1375Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0 1:20 class htb 1:11 parent 1:10 prio 0 quantum 30000 rate 687000bit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0 class htb 1:1 root rate 2750Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 7 class htb 1:10 parent 1:1 rate 1375Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 6 class htb 1:20 parent 1:1 prio 1 quantum 25000 rate 1375Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0 class htb 1:12 parent 1:10 prio 1 quantum 30000 rate 687000bit ceil 1375Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0 1:21 class htb 1:11 parent 1:10 prio 0 quantum 30000 rate 687000bit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0 class htb 1:1 root rate 2750Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 7 class htb 1:10 parent 1:1 rate 1375Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 6 class htb 1:20 parent 1:1 rate 1375Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 6 class htb 1:21 parent 1:20 prio 0 quantum 25000 rate 687000bit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0 class htb 1:12 parent 1:10 prio 1 quantum 30000 rate 687000bit ceil 1375Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0 имеет место закономерность: quantum и prio класса удаляются/пропадают_из_выхлопа при добавлении к этому классу дочернего класса вот такая вот петрушка... уж и не знаю: так_и_должно_быть/баг/что-то_упущенно... -
[tc][htb] два варианта реализации, но ни одного корректно работающего
тему ответил в cac2s пользователя cac2s в Программное обеспечение, биллинг и *unix системы
выставил - ничего не поменялось :( #!/bin/bash IPT="/sbin/iptables" TC="/sbin/tc" IP="/bin/ip" DEV_IN="eth0" RATE_IN="2750" RATE_LOCAL="1gbit" IP_LOCAL="192.168.0.100" $TC qdisc del dev $DEV_IN root $IP link set dev $DEV_IN qlen 32 $TC qdisc add dev $DEV_IN root handle 1: htb r2q 3 # Транзитный трафик $TC class add dev $DEV_IN parent 1: classid 1:2 htb rate ${RATE_IN}kbit quantum 60000 prio 0 # high-prio $TC class add dev $DEV_IN parent 1:2 classid 1:5 htb rate $[95*$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 0 # low-prio $TC class add dev $DEV_IN parent 1:2 classid 1:90 htb rate $[5*$RATE_IN/100]kbit ceil $[75*$RATE_IN/100]kbit prio 1 # Нетранзитный трафик $TC class add dev $DEV_IN parent 1: classid 1:99 htb rate $RATE_LOCAL quantum 60000 prio 1 выхлоп # tc -d class show dev eth0: class htb 1:99 root prio 1 quantum 60000 rate 1000Mbit ceil 1000Mbit burst 1375b/8 mpu 0b overhead 0b cburst 1375b/8 mpu 0b overhead 0b level 0 class htb 1:90 parent 1:2 prio 1 quantum 5708 rate 137000bit ceil 2062Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0 class htb 1:2 root rate 2750Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 7 class htb 1:5 parent 1:2 prio 0 quantum 108833 rate 2612Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0 мало того, в выхлопе у 1:2 нет явно прописанного quantum. баг? UPD: немного подправил и упростил (удалил классы 1:10-1:90) -
[tc][htb] два варианта реализации, но ни одного корректно работающего
тему ответил в cac2s пользователя cac2s в Программное обеспечение, биллинг и *unix системы
так, решил бороться с проблемами по порядку, поэтому на повестке дня - проблема с prio. скопировал скрипт себе на ноут (чтобы разобраться с prio, а на боевом сервере буду отлаживать) и упростил скрипт практически до нЕльзя + поменял prio (проблема с семёрками заключалась в том, чта на prio выделен только один бит со всеми вытекающими): #!/bin/bash IPT="/sbin/iptables" TC="/sbin/tc" IP="/bin/ip" DEV_IN="eth0" RATE_IN="2750" RATE_LOCAL="1gbit" IP_LOCAL="192.168.0.100" $TC qdisc del dev $DEV_IN root $IP link set dev $DEV_IN qlen 32 $TC qdisc add dev $DEV_IN root handle 1: htb r2q 3 # Главный класс $TC class add dev $DEV_IN parent 1: classid 1:1 htb rate $RATE_LOCAL # Транзитный трафик $TC class add dev $DEV_IN parent 1:1 classid 1:2 htb rate ${RATE_IN}kbit prio 0 # high-prio $TC class add dev $DEV_IN parent 1:2 classid 1:5 htb rate $[95*$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 0 # low-prio $TC class add dev $DEV_IN parent 1:2 classid 1:90 htb rate $[5*$RATE_IN/100]kbit ceil $[75*$RATE_IN/100]kbit prio 1 # Нетранзитный трафик $TC class add dev $DEV_IN parent 1:1 classid 1:99 htb rate $RATE_LOCAL quantum 60000 prio 1 ситуация изменилась, но все же есть косяки. вывод tc -d class show dev eth0 (упорядочил для более удобного сравнения с добавлением классов в скрипте): приоритеты стали нормальными, НО у 1:2 prio нет! (пробовал менять prio на 1,2,...) - ситуация не поменялась. почему так?